Vous êtes sur la page 1sur 265

Introduccin al Shell

Crear dos archivos de prueba Comandos en el sistema UNIX Estructura de Comandos Expansiones de la lnea de comandos Variables de ambiente Entrecomillado de argumentos PS1 Entrada estndar y salida estndar Fin de flujo Agregar la salida estndar a un archivo Error estndar Interconexin de comandos (entubamiento) Filtros Campos y delimitadores Valores de retorno de los comandos El operador grave Secuencias de comandos Redireccin del shell Fin Bibliografa y Referencias

El intrprete de comandos o "shell" acta entre el sistema operativo y el operador. Provee al usuario una interfaz hacia el sistema operativo. El usuario dialoga con el intrprete de comandos, y ste transfiere las rdenes al sistema operativo, que las ejecuta sobre la mquina.

Crear dos archivos de prueba.


Con el comando cat puede crearse un archivo aceptando el teclado como entrada estndar y direccionando la salida estndar hacia un archivo:
cat >nota

digitar las siguientes lneas, tal cual estn, terminando cada lnea dando <Enter>; finalizar con <Ctrl-D>. Digitar con cuidado: una vez pasados al rengln siguiente, no puede volverse atrs para corregir.
El shell es un intrprete de comandos. Es tambin un lenguaje de programacin. Los programas escritos con el shell se llaman scripts.

Digitar <Ctrl-D> para finalizar el ingreso.

cat nota

muestra el contenido digitado.

Crear del mismo modo el archivo LEAME, haciendo


cat > LEAME

con este contenido:


Este es el archivo LEAME. Recuerde que UNIX diferencia entre maysculas y minsculas. El archivo LEAME tendr este contenido.

cat LEAME

para verificar el contenido.

Comandos en el sistema UNIX.


En UNIX, los comandos son programas ejecutables separados. El shell es un intrprete de comandos: puede expandir y cambiar la manera en que actan los comandos, admite el uso de comodines y la interconexin o entubamiento de comandos.

Estructura de comandos.
La estructura general de un comando es la siguiente:
nombre opciones argumentos nombre es el nombre del comando. Las opciones o banderas controlan la forma en que

acta el comando; van precedidas por el signo - (menos). Los argumentos son comnmente nombres de archivos o nombres de login de usuarios.

pr -l23 nota pr -l23 LEAME

da formato y muestra el archivo indicado en pginas de 23 lneas de largo para que quepa en la pantalla.
pr -d -l23 LEAME

muestra el archivo LEAME a doble espacio, largo de pgina 23.


pr -d -o15 -l23 LEAME

doble espacio, margen izquierdo de 15 espacios, largo de pgina 23.


pr -l23 nota LEAME | more

muestra los dos archivos uno tras otro, pero los pagina separados.
cat nota LEAME

concatena los archivos; los presenta uno tras otro.


cat nota LEAME | pr -l23

concatena los archivos y luego les da formato a los dos juntos.

Expansiones de la lnea de comando.


Los comodines son caracteres que sustituyen cadenas de caracteres.
* ? secuencia de caracteres cualesquiera, 0 o ms. caracter cualquiera, uno y uno slo; debe aparear un caracter.

[...] sustituye los caracteres indicados individualmente.

Variables de ambiente.
Las variables de ambiente son cadenas de caracteres de la forma
nombre=valor nombre es cualquier cadena de caracteres que no incluya $ ni espacio (\b); valor es cualquier

cadena; puede incluir el espacio si el valor est entre comillas.

MUESTRA="hola chicos"

asigna "hola chicos" a la variable MUESTRA.


echo $MUESTRA

muestra en pantalla el contenido de la variable MUESTRA. Para exhibir el contenido de una variable de ambiente se escribe echo $nombre-variable. En general, para hacer uso del contenido de una variable, se escribe $nombre-variable.

Es una costumbre muy arraigada en UNIX usar maysculas para los nombres de variable, as como es una regla usar minsculas para los comandos. Las opciones pueden ser maysculas y minsculas; la opcin -a no es lo mismo que -A.

Las variables de ambiente pueden ser usadas como nombres de comando o como argumentos de un comando.
XYZ="cat nota" $XYZ

la variable XYZ contiene un comando, y al ser invocado su contenido, el comando es ejecutado.

echo hola $MUESTRA chicos

la variable puede usarse en la formacin de cadenas.


echo hola${MUESTRA}chicos

la variable puede embeberse en una cadena; las llaves delimitan el nombre de la variable.
env

muestra las variables de ambiente definidas. Muchas son fijadas en el ingreso del usuario al sistema (variables de login); y otras son propias del shell (variables del shell).
echo $LOGNAME

muestra el nombre de login del usuario.


echo $HOSTNAME

muestra el nombre de la mquina.


echo $NOEXISTE

Las variables no definidas no muestran nada cuando son referenciadas.

Entrecomillado de argumentos en la lnea de comandos.


Los espacios separan argumentos. El entrecomillado obliga a tratar una cadena con espacios como si fuera un solo argumento. Cuando se usan comillas dobles (" ") el shell interpreta las variables de ambiente includas, actuando segn su contenido:
MUESTRA="Mi nombre de login es $LOGNAME" echo $MUESTRA

Cuando se usan comillas simples (' ') el shell no interpreta las variables de ambiente, tratando sus nombres como cadenas:
MUESTRA='La variable $LOGNAME contiene su nombre de login' echo $MUESTRA

Las comillas simples permiten usar comillas dobles:


echo '"hola chicos"'

PS1.
Aunque generalmente los omitimos, en los ejemplos de esta seccin mostraremos el indicador de comandos y la salida de ejecucin.

La variable smbolo de indicador de comandos nivel 1 PS1 (Prompt Symbol level 1) es un valor de ambiente que puede no aparecer en la salida de env:
$ echo $PS1 $

responde con el indicador de comandos actual, $.


$ PS1=hola: hola:

carga un nuevo indicador de comandos; el sistema responde con el nuevo indicador de comandos, hola:.
hola: MUESTRA="ingrese comando:" hola: PS1=$MUESTRA ingrese comando: MUESTRA=hola ingrese comando: echo $MUESTRA hola ingrese comando:

la variable MUESTRA cambi pero el indicador no cambi;


ingrese comando: PS1='$' $

repone el indicador de comandos.

Entrada estndar y salida estndar.


Los comandos leen como entrada una secuencia de caracteres (flujo de entrada o "input stream"), y escriben a la salida otra secuencia de caracteres (flujo de salida o "output stream"). Estas secuencias no tienen estructura interna alguna, y se les llama entrada estndar y salida estndar.
cat nota > nota2

redirige la salida estndar a un archivo que crea o sobreescribe, en vez de a la pantalla.


mail juan < nota

toma la entrada estndar de un archivo en vez del teclado.


pr < nota > nueva.nota

el archivo nota es la entrada, el archivo nueva.nota es la salida.


cat nueva.nota

muestra el archivo donde se grab la salida con formato.

Los smbolos < y > redirigen entrada y salida estndar:


< nombre_entrada > nombre_salida

redirige la entrada estndar redirige la salida estndar

MUESTRA=/etc/passwd pr < $MUESTRA > lista.usuarios more lista.usuarios

Los comandos y los archivos tienen una estructura orientada a caracter. En muchos comandos se puede intercambiar teclado por archivos o dispositivos de hardware.

cat nota cat < nota

son comandos equivalentes porque cat opera sobre un archivo y tambin sobre la entrada estndar.
cat nota LEAME nueva.nota cat nota - nueva.nota < LEAME

son comandos equivalentes. El signo menos (-) aislado equivale a tomar en ese punto la entrada estndar, que usualmente est asignada al teclado.

Fin de flujo.
El ingreso de datos desde el teclado, as como el despliegue en pantalla, se manejan en UNIX como "flujos de caracteres", una serie de caracteres uno tras otro. Para indicar en el teclado el

fin de un flujo de caracteres se usa Ctrl-D. Este smbolo no forma parte del ingreso; simplemente indica el final del ingreso, que ya no se escribir ms. En UNIX no hay un caracter especial para indicar fin de archivo; el sistema sabe cuando termina un archivo por medio de contadores.

cat nota - nueva.nota > arch.salida

procesa el archivo nota, lee lo que se digite en el teclado hasta recibir un Ctrl-D, procesa nueva.copia y escribe todo en el archivo arch.salida; se renen tres fuentes distintas en una nica salida.
cat arch.salida

muestra todo lo reunido.

Agregar la salida estndar a un archivo.


cat < nota > nota.copia cat nota nota.copia > doble.nota rm nota.copia doble.nota contiene nota dos veces. Se logra lo mismo con cat nota > dup.nota cat nota >> dup.nota

El smbolo >> redirige la salida estndar a un archivo, pero agregando al final del mismo en lugar de reemplazar su contenido.

Error estndar.
Adems de los flujos de entrada y salida estndar, existe un tercer flujo de caracteres, el error estndar, hacia donde se dirigen los mensajes de error. El error estndar est dirigido habitualmente a la pantalla, pero mediante 2> o 2>> se redirige el error estndar hacia un archivo de errores. Los flujos estndar se reconocen por los siguientes nmeros:
0 1 2 la entrada estndar, usualmente el teclado; la salida estndar, usualmente la pantalla; el error estndar, usualmente la pantalla.

echo Archivo de errores > salida.error cat noexiste 2>>salida.error cat salida.error

el archivo salida.error contiene el mensaje inicial y el de error.


ls noexiste 2>>salida.error rm noexiste 2>>salida.error cat salida.error

rene los mensajes de error en el archivo salida.error .

Interconexin de comandos (entubamiento).


El operador | hace que la salida del comando precedente sea la entrada del comando siguiente, creando un entubamiento o interconexin de comandos.

cat nota LEAME | pr > salida

hace que la concatenacion de los archivos nota y LEAME sea servida al comando pr, cuya salida est redirigida a un archivo.
cat - LEAME < nota | pr > salida

tiene el mismo efecto. Notar la posicion de redireccion <.

Los operadores < y > redirigen, | conecta comandos.

Filtros.
Muchos comandos estn pensados para ser interconectados, pasando simplemente la entrada hacia la salida, por lo que se les llama habitualmente filtros.
echo 'hola chicos' | tr l p tr traduce caracteres y produce 'hopa chicos'. echo 'hola chicos' | tr lo pa

produce 'hapa chicas'.

Campos y delimitadores.
Un campo es una cadena de caracteres separada por un caracter delimitador. El archivo /etc/passwd tiene en cada lnea una serie de campos separados por dos puntos (:) .
more /etc/passwd

muestra el contenido de /etc/passwd.


cut -f1 -d: < /etc/passwd

cut -f1,3,5 -d: < /etc/passwd

muestra los campos pedidos usando el delimitador : (dos puntos).


cut -c1-8 < /etc/passwd

muestra columnas 1 a 8.
ls -l | cut -c56-

corta el listado de archivos desde donde empieza el nombre al final.


sort < /etc/passwd | cut -f1 -d: | more

ordena las lneas, corta el primer campo y presenta los nombres de usuarios habilitados en el sistema.
env | cut -f1 -d= | sort

muestra nombres de variables de ambiente ordenadas; el separador es =.

Valores de retorno de los comandos.


Los comandos devuelven un cdigo de retorno 0 si el comando termina correctamente, o un nmero entre 1 y 255 segn la razn de falla. El cdigo de retorno del ltimo comando queda en una variable llamada '?', que se interroga como $?.
cat noexiste ERROR=$? echo $? echo $ERROR

guarda el cdigo de error; la asignacin termina bien, por lo que en $? queda 0, pero en ERROR qued el nmero de error de la operacin fallida. $? es una 'variable de shell' mantenida internamente por el propio intrprete. Otras variables de shell son:

# $

nmero de argumentos en el comando para la shell actual nmero de proceso para el shell actual

Estas variables se interrogan como $# y $$.

El operador grave.
El acento grave (`) asigna a una variable de ambiente la salida estndar de un comando. El largo de la variable es limitado, pero usualmente > 5120 en SVR4.

MUESTRA=`echo $LOGNAME` echo $MUESTRA

escribe el nombre de login del usuario.


wc /etc/passw

cuenta lneas, palabras y caracteres.

El comando wc (word count) acepta opciones -l para lneas, -w para palabras y -c para caracteres.
TOTALPALABRAS=`cat * | wc -w` echo $TOTALPALABRAS

cuenta las palabras en todos los archivos del directorio. Tambin


echo `cat * | wc -w` echo Total de palabras en el directorio: `cat * | wc -w`

El acento grave permite ejecutar un comando dentro de otro, encerrando el comando anidado entre acentos graves.

Secuencias de comandos.
El shell es tambin un lenguaje de programacin. Pueden escribirse varios comandos en una misma lnea separndolos con ; (punto y coma).
date ; echo Hola ; echo $LOGNAME MUESTRA=`date ; echo Hola ; echo $LOGNAME`;echo $MUESTRA

Redireccin del shell.


El shell que atiende los comandos del usuario es el login shell; arranca cuando el usuario ingresa al sistema y termina cuando sale. Escribir sh como comando invoca una segunda instancia del shell, que puede terminarse con el comando exit o con <Ctrl-D>.

Puede crearse un archivo de comandos haciendo


cat > datos.usuario

y escribiendo las siguientes lneas. Pueden omitirse los comentarios (de # en adelante)
echo Salida del comando datos.usuario

echo Fecha: `date ` echo Usuario: $LOGNAME ps echo Shell actual: $$

# fecha y hora # nombre de login del usuario # procesos corriendo del usuario # nmero de proceso para el shell actual

finalizar con <Ctrl-D>. Los # indican comentario. Para convertir el archivo en ejecutable para el usuario, hacer
chmod u+x datos.usuario

Verificar con ls -l. Los comandos ingresados en el archivo pueden ejecutarse con
sh datos.usuario

Este comando invoca una nueva instancia de shell que no es la del ingreso al sistema.

Agregar una lnea ms haciendo


cat datos.usuario - >> masdatos.usuario

y escribiendo
cat noexiste # intenta mostrar un archivo inexistente

Finalizar con <Ctrl-D>.

echo "Archivo de errores del usuario" > errores.usuario

coloca una lnea descriptiva en el archivo errores.usuario.


cat errores.usuario

verifica su contenido.

sh <masdatos.usuario >salida.usuario 2>>errores.usuario

lee los comandos del archivo masdatos.usuario en la entrada estndar, redirige la salida estndar al archivo salida.usuario y redirige la salida del error estndar al archivo errores.usuario.
cat salida.usuario cat errores.usuario

Fin.

Borrar con el comando rm los archivos auxiliares; conservar para referencia los archivos nota, LEAME, datos.usuario , masdatos.usuario y eventualmente otros que le interesen.

UNIX y C
El sistema operativo UNIX suele venir acompaado de un compilador para lenguaje C. Escribiendo programas en lenguaje C es posible crear comandos indistinguibles de los propios de UNIX. Como ejemplo, puede crearse el siguiente archivo, usando un editor de texto sencillo como el ae, o el comando cat si se tiene f en la propia digitacin. Contenido del archivo hola.c:
/* hola.c: programa de saludo */ #include <stdio.h> main() { printf("Hola, mundo\n"); }

Compilar el contenido de este archivo con el comando


cc hola.c -o hola

Esto crea el archivo de salida hola, ejecutable en UNIX mediante el comando


./hola

Imprime, como es de suponer, la frase "Hola mundo". Un ejemplo ms interesante, con uso de llamadas a la biblioteca del sistema, es el ejemplo siguiente, una versin muy mnima del comando cat, que llamaremos cati. Contenido del archivo cati.c:
/* cati: cat versin mnima */ # define LARGO 1024 /* define valor de variable LARGO */ main() { char bufer[LARGO]; int n;

/* declara un arreglo de caracteres */ /* para contar caracteres ledos */

/* llamada al sistema para leer caracteres desde la entrada estndar (0), hacia el arreglo bufer, en cantidad igual al tamao del arreglo bufer */ n = read(0, bufer, sizeof bufer); /* primera lectura */ /* repite mientras haya caracteres ledos, es decir, n>0 */ while (n > 0) { /* llamada al sistema para escribir caracteres en salida estndar (1), en cantidad n, extrayendo desde arreglo bufer */ write(1, bufer, n);

n = read(0, bufer, sizeof bufer); } exit(0); }

/* siguientes lecturas */

/* sale devolviendo cdigo de retorno 0 */

Los extensos comentarios explican el funcionamiento. Compilar este programa con el comando
cc cati.c -o cati

Esto crea el archivo de salida cati, ejecutable en UNIX. El comando


./cati <hola.c

muestra el contenido del programa hola.c. Esta versin mnima slo funciona redireccionando la entrada estndar. Puede probarse su funcionamiento ingresando datos desde el teclado, finalizando con Ctrl-D. El programa puede interrumpirse con Ctrl-C. Qu diferencia hay? Es un problema de programacin algo ms complejo asimilar un nombre de archivo como parmetro y hacer que el programa despliegue el contenido de este archivo.

La razn por la que estos programa se invocan como ./hola y no simplemente hola es que el directorio actual no est habitualmente en la va de bsqueda de ejecutables (variable PATH). Colocando las versiones ejecutables de los programas hola o cati en un directorio como /bin los hara ejecutables directamente como cualquier comando de UNIX. Estos ejemplos muestran la versatilidad de UNIX como sistema operativo: puede uno ampliarlo con comandos construdos por uno mismo que se integran perfectamente a los comandos propios del sistema. En las distribuciones de UNIX de dominio pblico suelen venir los fuentes en C de todos los comandos, lo cual permite, al usuario con conocimento suficiente, modificar o corregir estos programas.

Sistema de Archivos
Archivos Directorios Nombres de Archivo Directorio Propio. Directorio Actual Nombres de Directorio Cambios de directorio Estructura Interna de los Archivos Propiedades de los archivos Tipo y Permisos de achivos

El sistema de archivos en UNIX Preguntas y Ejercicios Bibliografa

El sistema UNIX funciona totalmente en base a archivos. Los programas, los datos, los directorios y an los controladores de dispositivos tales como discos, modems e impresoras, son archivos. El sistema de archivos de UNIX se organiza en una jerarqua de directorios que resulta en una estructura arborescente.

Archivos.
Cada archivo tiene asociado un nombre, un contenido, un lugar de ubicacin e informacin de tipo administrativo, tal como dueo y tamao. El contenido de un archivo puede ser texto, programas fuente, programas ejecutables, imgenes, sonidos y otros.

Estructuralmente un archivo es una secuencia de bytes de datos que reside en forma semipermanente en algn medio estable, como ser una cinta magntica o un disco.

Directorios.
Los archivos se agrupan en directorios. Un directorio es un archivo que contiene una lista de nombres de archivo e informacin acerca de los mismos. Dentro del sistema de archivos, un directorio es una localizacin capaz de contener otros directorios o archivos. Dos archivos que se encuentren en distinto directorio pueden tener el mismo nombre sin confundirse. El comando ls permite listar el contenido de un directorio:
ls /var

el argumento es un directorio; la salida son los nombres de archivos y subdirectorios en ese directorio.
ls nota

el argumento es un archivo, la salida es el nombre del archivo.


ls -l /var

muestra los archivos y subdirectorios contenidos en /var en formato largo.

ls -ld /var

muestra caractersticas del directorio /var en lugar de los archivos y subdirectorios contenidos en l.

Nombres de archivos.
Para el nombre de archivo se puede usar prcticamente cualquier caracter, incluso caracteres no visibles. Los caracteres $ ; \ & ! * | causan confusin y no conviene usarlos. Se aconseja usar solamente letras, nmeros, punto, guin y subraya. UNIX diferencia maysculas y minsculas: el archivo NOTA.TXT es distinto del archivo nota.txt y tambin de Nota.txt. No se distingue entre nombre de archivo y extensin: nota.nueva.txt es un nombre de archivo vlido, y LCK..modem tambin. Un archivo que comienza por un punto no es visible:
touch .noseve ls ls -a ls no lo muestra, pero s ls -a. rm .noseve

lo borra como a cualquier archivo.

Directorio propio. Directorio actual.


Al ingresar al sistema cada usuario entra en su directorio propio, un directorio privado que no es tocado por el sistema ni por los otros usuarios. El directorio en el cual se encuentra posicionado el usuario en un momento dado se denomina su directorio actual.
cd /usr/bin pwd

cambia al directorio /usr/bin; el directorio actual es /usr/bin.


cd pwd

devuelve al usuario a su directorio propio, que es ahora el directorio actual.


echo $HOME

nuestra el nombre del directorio propio. HOME es una variable de ambiente que contiene el nombre del directorio propio del usuario.
cd $HOME

tiene el mismo efecto que cd.

Nombres de directorios.
Un directorio puede contener otros directorios as como archivos ordinarios, lo que genera una jerarqua o rbol de directorios. El directorio superior o directorio raz se denomina /.
cd / pwd

el directorio actual es el directorio raz.


cd

vuelve al directorio propio del usuario.

El caracter / se usa tambin para separar los componentes de un nombre de archivo completo: /export/home/usuario1/nota. La porcin /export/home/usuario es la ruta, nota es el nombre del archivo. Si se omite la ruta, se asume que el archivo se encuentra en el directorio actual. Un nombre tal como
textos/libro/capitulo.1 indica que su ruta comienza a partir del directorio actual. Sera

lo mismo escribir ./textos/libro/capitulo.1 ya que el punto designa el directorio actual. Dos puntos seguidos designan el directorio de nivel superior al actual. Si el directorio actual es /home/usuario1
ls ../usuario2

muestra el contenido de los archivos en /home/usuario2

El caracter / separa directorios includos como parte de un nombre de archivo o directorio.


ls dir1

es un direccionamiento relativo;
ls /home/esteban/dir1

es un direccionamiento absoluto.

Pueden usarse comodines para referenciar directorios y archivos:


cat /home/esteban/*/*

Cambios en la jerarqua de directorios.

mkdir nuevo.dir

crea un nuevo directorio.


rmdir nuevo.dir

borra un directorio existente; acta slo sobre directorios vacos.


mkdir dir1 mkdir dir1/dir2 touch dir1/dir2/arch2 dir1/arch1 ls -lR

muestra todos los archivos y directorios creados;


rm -r dir1

borra el directorio y todos los archivos y subdirectorios que pueda contener.

Estructura interna de los archivos.


Un archivo es una secuencia de bytes. Un byte es equivalente a un caracter. El sistema no impone estructura alguna a los archivos ni asigna significado a su contenido; el significado de los bytes depende totalmente de los programas que interpretan el archivo.

En ningn caso hay ningn byte que no haya sido colocado por el usuario o un programa. No hay caracter de fin de archivo. El ncleo del sistema UNIX se mantiene al tanto del tamao de los archivos sin introducir ningn caracter especial. El caracter nuevalnea es interpretado por las terminales como nueva lnea y retorno de carro (CR LF, carriage-return y line-feed), necesario para desplegar correctamente los renglones en la terminal. Al apretar la tecla Enter el ncleo transmite a la terminal CR LF, pero en un archivo se guarda slo LF. Qu hay dentro de un archivo? El ncleo no puede decirnos nada del tipo de archivo: no lo conoce. Todos los archivos tienen la misma estructura interna. El comando file hace una conjetura: lee algunos bytes y busca indicios sobre el tipo de contenido. En los sistemas UNIX hay slo una clase de archivo. Lo nico que se requiere para accederlo es su nombre.

Propiedad de los archivos.


Cada usuario es dueo de los archivos creados por l, hasta que los borre o los ceda a otro usuario. Cada usuario pertenece a un grupo, y puede compartir archivos con los usuarios de ese grupo. Cada archivo est asignado a un grupo de usuarios, al cual debe pertenecer su dueo. El comando ls -l muestra dueo y grupo de los archivos listados.

Tipo y permisos de archivos.

Cada archivo tienen un conjunto de permisos asociados con l que determinan qu puede hacerse con el archivo y quin puede hacerlo. Los permisos de un archivo se indican con 10 caracteres: 1 caracter para tipo de archivo, 3 caracteres [rwx] para permisos del dueo, 3 caracteres [rwx] para permisos del grupo, 3 caracteres [rwx] para permisos de otros. Caracter para tipo de archivo:
d l b c

directorio enlace simblico archivo normal archivo controlador de dispositivo orientado a bloques archivo control de dispositivo orientado a caracteres

Caracteres de permisos:
r w x

acceso de lectura (read) acceso de escritura (write) acceso de ejecucin (execute)

cuyo significado vara segn se trate de archivos o directorios:

Permiso Archivos r w x leer archivos grabar en un archivo

Directorios ver contenido de directorios crear y borrar archivos

ejecutar como programa ingresar a un directorio sin derechos sin derechos

El ingreso a un directorio (permiso x) permite ejecutar un archivo contenido dentro de l, o trasladarse a ese directorio; para estas operaciones no es necesario poder ver los nombres de los archivos contenidos (permiso r).

Un archivo se declara ejecutable dndole permiso de ejecucin. Se ejecuta dando su nombre. Los comandos de UNIX son archivos ejecutables.
Ejemplos de permisos de archivo:
rwxr--r-rw-rw-r-rw-------

El sistema de archivos en UNIX.


Un sistema de archivos en UNIX puede contener miles de archivos, cientos de directorios y cientos de enlaces simblicos, dependiendo de la distribucin y de lo que se haya instalado. Como referencia, la distribucin Debian/GNU 2.1 viene con cerca de 2500 paquetes para instalar. Una instalacin normal puede insumir un 25% en herramientas de administracin, y un 10 % en herramientas de desarrollo. Borrar, alterar o cambiar permisos de archivos puede conducir a resultados impredecibles.
$ ls -F /

es til para recorrer el sistema de archivos, bajando luego a los subdirectorios. Los requerimientos de las redes cambiaron la organizacin funcional del sistema de archivos. En un lugar grande, la red se configura con un conjunto de mquinas heterogneas, cada una responsable del mantenimento y uso de cada archivo. Los archivos pueden ser especficos para cierta mquina, compartidos por varias mquinas del mismo tipo, o accesibles a casi cualquier tipo de mquina en la red. Enlaces simblicos hacia la anterior localizacin de los archivos ayudan al acceso. Un directorio puede ser real o un enlace simblico a otro; usar /bin/pwd para si se ha llegado al directorio directamente o a travs de un enlace simblico. Convenciones en nombres de archivos y directorios.
/bin /boot /cdrom /dev archivos ejecutables, comandos de usuario archivos de arranque punto de montaje para la uniad de CD-ROM archivos especiales de dispositivos [subdirectorios propios de System V] ./dsk ./fd ./kd ./kmem ./null ./osm dispositivos de disco dispositivos descriptores de archivo dispositivos de teclado y despliegue memoria dispositivo para descarte de salidas mensajes de error del ncleo

./pts ./rdsk ./term ./xt /dosc /etc ./init.d ./rc?.d de

pseudo ttys; igual que /dev/pts* dispositivos crudos de disco terminales; igual que /dev/tty* pseudo ttys; para capas DMD punto de montaje para la particin DOS configuracin de paquetes, configuracin de sistema scripts de arranque y detencin de programas enlaces a scripts, con K o S (Kill o Start), y nmero

secuencia para controlar el arranque ./skel /export /floppy /home /lib /lost+found /mnt /proc /root /sbin /tmp /usr ./X11R6 ./bin ./doc ./include ./info ./lib ./local ./man ./sbin archivos de inicializacin para nuevos usuarios directorios de usuarios en sistemas grandes para montar una unidad de disquete objetos relacionados con los usuarios bibliotecas de desarrollo y material de apoyo archivos perdidos punto de montaje de dispositivos externos archivos de control de procesos directorio propio para el supervisor (root) archivos ejecutables de administracin archivos temporales ejecutables, documentacin, referencia sistema X-Windows ms ejecutables documentos de paquetes de software encabezados .h de bibliotecas en C archivos de info, informacin de UNIX (GNU) ms bibliotecas en C ejecutables instalados por el administrador subdirectorios de pginas del manual ms archivos ejecutables de administracin

./share ./src /var ./backup ./catman ./lib ./lock ./log ./spool ./run

compartidos (source) cdigo fuente del kernel archivos de log, auxiliares, archivos que crecen respaldo de algunos archivos del sistema pginas man ya formateadas informacin propia de programas control de bloqueos archivos de registro de mensajes (log) del sistema colas de impresin, intermedios de correo y otros informacin de procesos (PIDs)

Manejo de Archivos
Copia de Archivos Mover, cambiar de nombre Enlaces "hard" Enlaces simblicos Opciones del comando ls Cambio de dueo y grupo Modos de permisos Listado de permisos de los directorios Cambio de permisos basename, dirname Archivos de dispositivos El comando "mesg" Otros dispositivos Preguntas y Ejercicios Bibliografa y Referencias

En los ejemplos siguientes se asume al usuario ubicado en su directorio personal, el cual contiene los archivos nota y LEAME. El resultado de cada ejemplo debe comprobarse mediante comandos tales como pwd,ls, cat o more.

Copia de archivos.
cp nota nota.copia

copia el archivo nota en nota.copia. Si el directorio propio del usuario es /home/usuario1,


cp ./nota /home/usuario1/nota.copia

hace lo mismo indicando las rutas. Si el archivo destino existe lo sobreescribe y realiza la copia sin comentario ni advertencia.

mkdir dir1 cp nota dir1

si el destino es un directorio, el archivo se copia en ese directorio.

cp nota LEAME dir1

pueden copiarse varios archivos hacia un directorio.

mkdir dir2 touch dir2/arch2 dir2/arch3 ls dir2 cp dir2/* .

copia todos los archivos en dir2 hacia el directorio actual.

Para copiar un directorio es preciso usar la opcin -r, de "recursivo":


cp -r dir1 dir3 ls -l dir3

copia el directorio dir1 y todo el contenido en el dir3.

rmdir dir3

fracasa porque dir3 no est vaco.


rm -r dir3

con la opcin -r, "recursivo", se puede borrar completamente un directorio y todo su contenido, sean estos archivos o subdirectorios.

rm -r dir1/* dir2

borra todos los archivos bajo dir1 y dir2; borra tambin el directorio dir2 pero no el dir1.

rm arch? nota.copia

borra del directorio actual los archivos arch1, arch2, .., y nota.copia.

Mover, cambiar de nombre.


echo "Hola todos" > hola cat hola mv hola saludo cat saludo mv cambia el nombre del archivo hola por el de saludo.

mv saludo dir1/saludo.1

mueve hacia otro directorio cambiando el nombre.

mv dir1 dirnuevo

cambia de nombre archivos o directorios.

rm -r dirnuevo

elimina dirnuevo y todos sus archivos.

Enlaces "hard".
Un enlace "hard" (hard link) es una nueva referencia a un mismo archivo; consiste en una nueva entrada de directorio que apunta a un archivo ya existente y apuntado desde otra

entrada de directorio. El contenido se encuentra en un solo lado, pero el archivo puede ser accedido desde varios lugares, eventualmente con diferentes nombres.
echo 'Hola todos de nuevo!' > adios ln adios adios.ln0

ln crea un segundo nombre referido al mismo archivo; no se hace copia, crea un enlace (link). Verificar que
ls -l adios*

muestra un conteo de 2 en la columna de enlaces. Al crear el enlace con el comando ln, observar que el archivo existente va en primer lugar, luego uno o ms nombres de enlaces a crear.

ln adios adios.ln1 ln adios adios.ln2 ls -l adios*

muestra el conteo de enlaces hard en estos archivos.

mkdir dir2 ln adios dir2/adios

hace aparecer en dir2 un enlace llamado adios hacia el archivo adios del directorio actual. Un enlace hard puede hacer aparecer un mismo archivo en ms de un directorio, con igual o distinto nombre; el contenido est en un solo lado, no est repetido.

rm adios* ls -l dir2/adios

Cuando se borra un archivo con varios enlaces, slo se borra el enlace. El archivo es realmente borrado slo cuando desaparece el ltimo enlace.
ln dir2 dir2ln

da error; no se puede crear un enlace hard para un directorio.

Enlaces simblicos.
Un enlace simblico (symbolic link) es un archivo que apunta a otro archivo o directorio. El archivo de enlace simblico contiene solamente la ruta del otro archivo o directorio.
ln -s nota nota.ls0

crea nota.ls0 como enlace simblico.

ln -s dir2 dir2ls

crea dir2ls como enlace simblico hacia un directorio.


ls -l

muestra la letra l en el tipo de archivo para indicar que es un enlace simblico.


ls dir2 ls dir2ls

muestran el mismo contenido de archivos.


ls -l dir2ls

muestra que es un enlace simblico e indica hacia donde apunta.

cd dir2ls ls -l

muestra el contenido de dir2, enlazado desde dir2ls.


pwd

indica el directorio con nombre del enlace, pero


/bin/pwd

muestra el directorio verdadero, no el enlace simblico; pwd indica la ruta por la que se lleg al directorio, /bin/pwd indica la ruta de acceso al verdadero directorio. Conviene usar /bin/pwd para evitar ser engaado por enlaces simblicos a directorios. El comando pwd es interno del shell, /bin/pwd es un programa aparte.

cd .. mv dir2 DIR2

cambia el nombre del directorio real; el enlace simblico sigue apuntando a dir2, por lo que
cd dir2ls

da error, ya que no existe el objeto real.


mv DIR2 dir2

repone el nombre original al que apunta el enlace.

rmdir dir2ls

da error porque no es un directorio sino un enlace.


rm dir2ls

borra el enlace. Un enlace simblico se borra con rm, y no con rmdir, puesto que el enlace simblico es un archivo y no un directorio, an cuando sea un enlace simblico hacia un directorio.
ls dir2

cuando se borra un enlace simblico, slo se borra un archivo puntero, y no el objeto real.

Opciones del comando ls.


ls -1

muestra un item por lnea. Cuando ls se usa en interconexiones, la salida de ls presenta un item por lnea por defecto.
ls -C

fuerza el despliegue encolumnado.


ls -a

muestra todos los archivos, incluyendo los que comienzan con punto, normalmente no mostrados. El directorio corriente . y el directorio padre .. son entidades reales.

ls -F /bin ls -F

agrega sufijo que indica el tipo de archivo: / directorio, * ejecutable, @ enlace simblico.

ls -R

muestra recursivamente todos los archivos, subdirectorios y archivos dentro de subdirectorios. Para ver un listado ms largo,
ls -CR /etc | more

ln -s dir2 dir2ls ln nota nota.ln0 ls -l

listado largo, muestra atributos de los archivos: tipo de archivo (primer caracter), permisos (9 caracteres), enlaces hard (en archivos), dueo, grupo, tamao en bytes, fecha y hora, nombre.
-rw-r--r-- 1 esteban other 138 Apr 5 19:34 LEAME drwxr-xr-x 2 esteban other 138 Apr 5 19:34 dir2 lrw-r--r-- 1 esteban other 138 Apr 5 19:34 dir2ls ->./dir2 -rw-rw-rw- 1 esteban other 138 Apr 5 19:34 nota

El smbolo -> indica "apunta hacia" para enlaces simblicos.

Cambio de dueo y grupo.


chown usuario1 nota

cambia el dueo del archivo nota adjudicndoselo a usuario1.


chown usuario1 arch1 arch2

cambia el dueo de la lista de archivos indicada. No puede revertirse, ya que el usuario actual dej de ser dueo de esos archivos. Si el archivo tiene permiso de lectura, es posible copiarlo para disponer de una copia propia. El cambio de dueo no est permitido a usuarios comunes, sino reservado al supervisor para evitar que a un usuario se le adjudiquen archivos sin su consentimiento.

chgrp tecnicos nota

cambia de grupo el archivo notas, adjudicndoselo al grupo tecnicos. El dueo debe pertenecer al grupo tecnicos.
chgrp tecnicos arch1 arch2

cambia el grupo de la lista de archivos.

Modos de permisos.
Los permisos de archivos y directorios se cambian con el comando chmod. Pueden expresarse de dos maneras: simblica y absoluta. En la forma simblica, se usa la siguiente sintaxis:

[ugoa...][[+-=][rwxstugo...]

+ = r w x s t u g o a

agrega permiso a los existentes quita permiso de los existentes nicos permisos asignados al archivo lectura escritura ejecucin, o acceso si es directorio usa el id del dueo o grupo del archivo al ejecutar fijar "sticky bit" a un directorio: slo dueos pueden borrar usuario (dueo) grupo otros todos (dueo, grupo y otros)

Ejemplos de permisos en notacin simblica:


u+r g+w-r ug+r ugo+w-rx u+rwx,g+r-wx,o-rwx

chmod u+rwx,g+rw-x,o+r-wx arch1 chmod u=rwx,g=rw,o=r arch1

cambian los permisos de los archivos indicados.

En modo absoluto se usa un cdigo de 4 dgitos octales 0..7, en la forma Nnnn.


N, primer dgito:

4 fijar ID del dueo al ejecutar 2 fijar ID del grupo al ejecutar 1 fijar "sticky bit" a un directorio nnn, 3 dgitos: permisos del usuario, grupo y otros, con el cdigo 4 lectura

2 escritura 1 ejecucin, o acceso si es directorio

Ejemplos de permisos en notacin absoluta:


0777 0755 0764 0640 0710

chmod 0764 arch1

cambia los permisos como en el ejemplo anterior.

Listado de permisos de los directorios.


ls -l

muestra los permisos y otros atributos.

Para obtener informacin del directorio dir1 ubicado en el directorio actual,


ls -l

lista todos los archivos, entre los que aparece dir1;


ls -l dir1

lista el contenido del directorio dir1.


ls -ld dir1

trata la entrada dir1 como archivo, sin listar su contenido, y dando sus atributos como directorio.
ls -ld .

muestra atributos del directorio actual.

Cambio de permisos.
chmod u-w nota

quita permisos de escritura al dueo.


chmod u+w nota

concede permisos de escritura al dueo.


chmod u-w+x nota chmod u-wx+r nota

cambian varios permisos del dueo al mismo tiempo.

chmod u+w nota chmod g+w nota chmod o+w nota

concede permiso de escritura solo al usuario, al grupo o a otros.


chmod u+rw-x,g+r-wx,o+r-wx nota

fija todos los permisos en una sola operacin. Los permisos que no se mencionen quedan como estn.
chmod 0644 nota

realiza lo mismo en notacin absoluta.

El comando chmod admite las opciones


-v verboso, describe los permisos cambiados -f no da error sobre permisos que no pueden cambiarse -R recursivo, cambia permisos de directorios y sus archivos

chmod -v u+rwx,g+rw-x,o+r-wx arch1 chmod -v 764 arch1 chmod -v 444 arch1 chmod u=rw,go=r arch1

fija permisos en rw-r--r--.


chmod u=rwx,u+s arch1 ejecutar arch1 con permiso del dueo de arch1. chmod -vR a+r dir1

da permiso de lectura a todos los directorios bajo dir1, anunciando en forma verbosa lo hecho.

chmod ugo+rwx dirtodos chmod a+t dirtodos

fija "sticky bit": a pesar de tener el directorio permisos totales para todos, slo pueden borrarse los archivos propios del usuario, no los ajenos.
chmod 1777 dirtodos

realiza lo mismo.

Los permisos s (setuid, setgid) hacen que un archivo ejecutable ejecute con permisos del usuario dueo o del grupo dueo del archivo, cualquiera sea el usuario y grupo de quien lo invoca. El permiso setgid sobre un directorio hace que los archivos y subdirectorios creados en l pertenezcan al grupo del directorio, y no al grupo primario del usuario, como es normal; esto es til para los grupos de trabajo. El permiso t (sticky bit) se aplica a directorios con permisos totales; limita la operacin de borrado al dueo del archivo o subdirectorio. Los modos S y T, que pueden aparecer en ls -l, indican modos sin sentido: setuid o setgid sobre archivos no ejecutables, sticky bit sobre directorio sin permisos para todos.

basename, dirname
echo $EDITOR

muestra la variable de ambiente que contiene el nombre del editor por defecto. Si no aparece nada, inicializarla:
which vi

para obtener la va hacia el editor vi.


EDITOR=/usr/bin/vi echo $EDITOR

muestra el nombre del editor a usar por defecto.

MIEDITOR=`basename $EDITOR` echo "Mi editor es $MIEDITOR"

muestra el nombre del archivo sin ruta; basename quita la ruta a un nombre de archivo calificado con ruta.
DIREDITOR=`dirname $EDITOR` dirname separa la ruta del nombre completo. echo "Mi editor es $MIEDITOR en el directorio $DIREDITOR"

muestra el uso en comandos de variables de ambiente.


echo "Mi editor es "`basename $EDITOR`" en "`dirname $EDITOR`

muestra el uso del operador grave para ejecutar comandos dentro de otros comandos.

Archivos de dispositivos.

El sistema de archivos de UNIX provee una interface estndar entre los dispositivos de hardware y el sistema operativo que acta igual que un archivo comn: todas las operaciones de entrada y salida se hacen escribiendo y leyendo sobre un archivo. No se trata de un archivo comn en disco; acta como una ruta hacia un canal de entrada/salida del hardware. As como se redirige la salida de un comando hacia un archivo, puede redirigirse tambin hacia un disco, una cinta o un mdem con slo mencionar el nombre del dispositivo correspondiente.

tty

devuelve el nombre del dispositivo asociado al terminal, por ejemplo /dev/tty1. Tomando ese mismo nombre
ls -l /dev/tty1

obtenemos un listado de atributos del "archivo" controlador de este dispositivo, algo as como
crw-rw-rw- 1 usuario1 otros .... /dev/tty1

El primer caracter indica el tipo de dispositivo: c si es orientado a caracteres, b si es orientado a bloques. Terminales, impresoras y modems son orientados a caracter, discos y cintas son orientados a bloque.

cat - < /dev/tty1

para escuchar en la propia sesin de terminal; escribir varias lneas y finalizar con Ctrl-D.
cat - < `tty`

produce el mismo efecto. Luego probar


$ cat - > `tty`

puede explicarse el comportamiento?

El comando mesg.
ls -l `tty`

Si otros usuarios pueden leer y escribir en este dispositivo, tambin pueden ver lo que se est haciendo o an escribir directamente en el terminal redirigiendo su salida. Esto se usa en los comandos wall (write all, escribir a todos) y write (escribir mensajes entre usuarios).

mesg

muestra si est habilitada o no la recepcin de mensajes.


mesg y

cambia permisos de grupo y otros en el dispositivo, aceptando mensajes.


mesg n

rechaza mensajes. Verificar con


ls -l `tty`

que muestra los permisos que regulan la terminal del usuario.

ls -l /dev/tty?

muestra los permisos de las terminales principales;


ls -l /dev/tty??

muestra una cantidad de tipos de terminal disponibles.

Otros dispositivos.
cat /etc/passwd cat /etc/passwd > /dev/null

El dispositivo /dev/null acta como una papelera de tamao ilimitado que recibe la salida a descartar. No guarda nada; lo que all se enve se pierde para siempre.

Todos los dispositivos de hardware del sistema tienen una representacin en el directorio /dev.

Expresiones Regulares
Expresiones Regulares Metacaracteres Expresiones regulares bsicas Expresiones regulares de un slo caracter Construccin de expresiones regulares Ejemplos de expresiones regulares bsicas Expresiones regulares extendidas Ejemplos de expresiones regulares extendidas Expresiones Regulares en GNU

Preguntas y Ejercicios Bibliografa y Referencias

Expresiones Regulares.
La expresiones regulares (ER) son una forma de describir cadenas de caracteres. Se usan en operaciones de apareamiento o comparacin. Las expresiones regulares permiten realizar bsquedas o sustituciones de gran complejidad. Las bsquedas en el editor vi con los comandos / y ? aceptan expresiones regulares; esto hace las bsquedas mucho ms potentes y flexibles. Las expresiones regulares son aceptadas en otros editores y en muchos comandos, si bien con algunas diferencias de sintaxis. Una expresin regular es un patrn que describe un conjunto de cadenas de caracteres. Por ejemplo, el patrn aba*.txt describe el conjunto de cadenas de caracteres que comienzan con aba, contienen cualquier otro grupo de caracteres, luego un punto, y finalmente la cadena txt. El smbolo * se interpreta como "0, 1 o ms caracteres cualesquiera". Las expresiones regulares se construyen como las expresiones aritmticas, usando operadores para combinar expresiones ms pequeas. Analizaremos esos operadores y las reglas de construccin de expresiones regulares, atendiendo siempre al conjunto de cadenas que representa cada patrn.

Metacaracteres.
La construccin de expresiones regulares depende de la asignacin de significado especial a algunos caracteres. En el patrn aba*.txt el caracter * no vale por s mismo, como el caracter asterisco, sino que indica un "conjunto de caracteres cualesquiera". Asimismo, el caracter ? no se interpreta como el signo de interrogacin sino que representa "un caracter cualquiera y uno solo". Estos caracteres a los que se asigna significado especial se denominan "metacaracteres".

El conjunto de metacaracteres para expresiones regulares es el siguiente:


\ ^ $ . [ ] { } | ( ) * + ?

Estos caracteres, en una expresin regular, son interpretados en su significado especial y no como los caracteres que normalmente representan. Una bsqueda que implique alguno de estos caracteres obligar a "escaparlo" de la interpretacin mediante \, como se hace para evitar la interpretacin por el shell de los metacaracteres del shell. En una expresin regular, el caracter ? representa "un caracter cualquiera"; si escribimos \?, estamos representando el caracter ? tal cual, sin significado adicional.

Expresiones Regulares Bsicas.


Una expresin regular determina un conjunto de cadenas de caracteres. Un miembro de este conjunto de cadenas se dice que aparea, equipara o satisface la expresin regular.

ERs de un slo caracter.


Las expresiones regulares se componen de expresiones regulares elementales que aparean con un nico caracter:

Exp.Reg. c . [abc] [^abc]

aparea con ER que aparea con el caracter ordinario c (punto) ER que aparea con un caracter cualquiera excepto nueva lnea ER de un caracter que aparea con a, b o c ER de un caracter que no sea a, b o c ERs de un caracter que aparean con cualquier caracter en el intervalo indicado. El signo - indica un intervalo de caracteres consecutivos. ER que aparea con alguno de estos caracteres (en lugar de la e):
. * [ \

[0-9][az][A-Z]

cuando no estn dentro de [ ] al principio de la ER, o al principio dentro de [ ] al final de una ER

\e

^ $

usado para delimitar una ER

Los parntesis rectos [] delimitan listas de caracteres individuales. Muchos metacaracteres pierden su significado si estn dentro de listas: los caracteres especiales . * [ \ valen por s dentro de []. Para incluir un caracter ] en una lista, colocarlo al principio; para incluir un ^ colocarlo en cualquier lugar menos al principio; para incluir un - colocarlo al final. Dentro de los conjuntos de caracteres individuales, se reconocen las siguientes categoras:
[:alnum:] [:alpha:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:] alfanumricos alfabticos de control dgitos grficos minsculas imprimibles de puntuacin espacios maysculas dgitos hexadecimales

Por ejemplo, [[:alnum:]] significa [0-9A-Za-z], pero esta ltima expresin depende de la secuencia de codificacin ASCII, en cambio la primera es portable, no pierde su significado bajo distintas codificaciones. En los nombres de categoras, los parntesis rectos forman parte del nombre de la categora, no pueden ser omitidos.

Construccin de Expresiones Regulares.


Una Expresin Regular se contruye con uno o ms operadores que indican, cada uno, el caracter a buscar. Los operadores ms comunes y aceptados son los siguientes:

Operador Significado
c \c ^ $ . [...] [^...] r* r1r2

un caracter no especial concuerda consigo mismo elimina significado especial de un caracter c; el \ escapa el significado especial indica ubicado al comienzo de la lnea (cadena nula al principio de lnea) indica ubicado al final de la lnea (cadena nula al final de lnea) (punto) un caracter individual cualquiera uno cualquiera de los caracteres ...; acepta intervalos del tipo a-z, 0-9, A-Z (lista) un caracter distinto de ... ; acepta intervalos del tipo a-z, 0-9, A-Z 0, 1 o ms ocurrencias de la ER r (repeticin) la ER r1 seguida de la ER r2 (concatenacin)

Ejemplos de Expresiones Regulares Bsicas. Las expresiones regulares se aprenden mejor con los ejemplos y el uso.

Exp.Reg.
a.b a..b [abc] [aA] [aA][bB]

aparea con axb aab abb aSb a#b ... axxb aaab abbb a4$b ... a b c (cadenas de un caracter) a A (cadenas de un caracter) ab Ab aB AB (cadenas de dos caracteres)

[0123456789] [0-9] [A-Za-z] [0-9][0-9][0-9] [0-9]* [0-9][0-9]* ^.*$

0123456789 0123456789 A B C ... Z a b c ... z 000 001 .. 009 010 .. 019 100 .. 999
cadena_vaca 0 1 9 00 99 123 456 999 9999 ...

0 1 9 00 99 123 456 999 9999 99999 99999999 ... cualquier lnea completa

En el editor vi, las expresiones regulares permiten realizar bsquedas tales como:
/^Desde

busca lneas que empiecen con la cadena Desde


/final$

busca lneas que termine con la cadena final


/\$25

busca lneas que contengan $25; \ escapa el $

Expresiones Regulares Extendidas.


Algunos comandos, como egrep o grep -E, aceptan Expresiones Regulares Extendidas, que comprenden las Expresiones Regulares Bsicas ms algunos operadores que permiten construcciones ms complejas. Los operadores incorporados son los siguientes:

Operador
r+ r? r{n} r{n,} r{,m}

Significado 1 o ms ocurrencias de la ER r 0 o una ocurrencia de la ER r, y no ms n ocurrencias de la ER r n o ms ocurrencias de la ER r 0 o a lo sumo m ocurrencias de la ER r

r{n,m} r1|r2 (r) "r"

n o ms ocurrencias de la ER r, pero a lo sumo m la ER r1 o la ER r2 (alternativa) ER anidada evita que los caracteres de la ER r sean interpretados por el shell

La repeticin tiene precedencia sobre la concatenacin; la concatenacin tiene precedencia sobre la alternativa. Una expresin puede encerrarse entre parntesis para ser evaluada primero.

Ejemplos de Expresiones Regulares Extendidas:


Exp.Reg.Ext.
[0-9]+ [0-9]? ^a|b (ab)* ^[0-9]?b

aparea con
0 1 9 00 99 123 456 999 9999 99999 99999999 .. cadena_vaca 0 1 2 .. 9 a b cadena_vaca ab abab ababab ... b 0b 1b 2b .. 9b

([0-9]+ab)* cadena_vaca 1234ab 9ab9ab9ab 9876543210ab 99ab99ab ...

Expresiones regulares en GNU.


En GNU, no se distinguen expresiones regulares bsicas de extendidas; los comandos aceptan todas las expresiones regulares. En ese caso, como siempre se estn usando extendidas, los metacaracteres ?, +, {, |, (, y ) deben ser escapados cuando se quieren usar como caracteres normales, escribiendo \?, \+, \{, \|, \(, y \).

Filtros.
sort grep find fgrep y egrep tr uniq

dd Preguntas y Ejercicios Bibliografa y Referencias

Se da el nombe de filtros a un grupo de comandos que leen alguna entrada, realizan una transformacin y escriben una salida. Adems de los que veremos aqu, incluye comandos tales como head, tail, wc, y cut.

sort
La comparacin u ordenacin puede ser por caracteres ASCII o por valor numrico. La ordenacin ASCII es la ms parecida a la alfabtica; sigue el orden del juego de caracteres ASCII. En este ordenamiento, los caracteres idiomticos (vocales acentuadas, ) no se encuentran en el orden alfabtico tradicional. En la ordenacin numrica se respeta la ordenacin por valor numrico de la cadena de caracteres: 101 va despus de 21; en ordenamiento ASCII sera al revs.
sort arch1

ordena segn el cdigo ASCII.


sort -n arch2.num

ordena numricamente.

Si no se indican campos de ordenacin, la comparacin se hace sobre toda la lnea. Si se indican campos, la comparacin se hace considerando la cadena de caracteres iniciada en el primer caracter del primer campo hasta el ltimo caracter del ltimo campo.
sort -t: -k1,3 arch1.txt

ordena por campos separados por ":", tomando en cuenta para la comparacin los caracteres desde el primero del campo 1 hasta el ltimo del campo 3.
sort -t: -k1.3,3.5 arch1.txt

ordena por campos tomando en cuenta desde el 3er. caracter del campo 1 hasta el 5to. caracter del campo 3.
sort -nr arch2.num

ordena en orden numrico descendente.


sort -k3 arch3.txt

ordena alfabticamente, usando como cadena de comparacin la comprendida desde el primer caracter del 3er. campo hasta el fin de lna. Como no se indica separador, los campos se definen por blancos (espacio o tabulador).

find
El comando find explora una rama de directorios buscando archivos que cumplan determinados criterios. El comando find en GNU es extremadamente potente, permitiendo criterios de bsqueda tales como: el nombre contiene cierta cadena de caracteres o aparea con algn patrn: son enlaces a ciertos archivos; fueron usados por ltima vez en un cierto perodo de tiempo; tienen un tamao comprendido dentro de cierto intervalo; son de cierto tipo (regular, directorio, enlace simblico, etc.); pertenecen a cierto usuario o grupo; tienen ciertos permisos de acceso; contienen texto que aparea con cierto patrn. Una vez ubicados los archivos, find puede realizar diversas acciones sobre ellos: ver o editar; guardar sus nombres en otro archivo; eliminarlos o renombrarlos; cambiar sus permisos de acceso; clasificarlos por grupos.
find /var -name *.log -print

busca en el directorio /var los archivos terminados en .log, imprime sus nombres en la salida.
find /tmp -size +200k -print

busca archivos mayores de 200k. En los argumentos numricos, +N es mayor que N, -N es menor que N, N es exactamente igual a N.
find /var/spool/mail -atime +30 -print

busca archivos no accedidos hace ms de 30 das. La opcin -atime se refiere a tiempo transcurrido desde ltima lectura, -mtime desde ltima modificacin de estado o permisos, ctime de contenido.
find /var/tmp -empty -exec rm {} \;

busca archivos vacos y los borra.


find /home -nouser -ls

busca archivos en los cuales en lugar del nombre de usuario dueo aparece un nmero (UID). Esta situacin se da cuando la cuenta de usuario ha sido borrada pero han permanecido los archivos creados por ese usuario.

grep
El comando grep (Global Regular Expression and Print) permite buscar las lneas que contienen una cadena de caracteres especificada mediante una expresin regular. Lee la entrada estndar o una lista de archivos y muestra en la salida slo aquellas lneas que contienen la expresin indicada. La sintaxis es
grep patrn archivos

donde el patrn a buscar es una expresin regular. Crear un archivo con los das de la semana, uno por lnea; llamarle dias.
grep martes dias grep tes dias

muestra las lneas del archivo dias que contienen la cadena "tes".

grep unix01 /etc/passwd grep unix0[1-9] /etc/passwd

ls -l /usr | grep '^d'

lista slo los subdirectorios del directorio /usr (la lnea empieza con "d").

ls -l / | grep '.......rw'

lista slo los archivos que otros pueden leer y escribir en el directorio principal.

grep '^[^:]*::' /etc/passwd

busca usuarios sin contrasea; caracteres al principio de lnea que no sean ":", y luego "::" (el segundo lugar, que es el de la contrasea, est vaco).

grep '^[^:]*:\*:' /etc/passwd

busca usuarios que no pueden entrar al sistema; tienen un * en el lugar de la contrasea; \ escapa el significado del segundo *, que vale como caracter a buscar.

Ninguna expresin regular de grep aparea con un caracter nueva lnea; las expresiones se aplican individualmente a cada lnea. Entre las opciones de grep se cuentan -i para evitar distinguir entre maysculas de minsculas, -n para mostrar el nmero de lnea y -v para buscar lneas que no contengan la expresin regular indicada.

fgrep y egrep
Hay dos versiones de grep que optimizan la bsqueda en casos particulares:
fgrep

(fixed grep, o fast grep) acepta solamente una cadena de caracteres, y no una expresin regular, aunque permite buscar varias de estas cadenas simultneamente;
egrep

(extended grep), que acepta expresiones regulares extendidas con los operadores + ? | y parntesis.
fgrep

no interpreta metacaracteres, pero puede buscar muy eficientemente muchas palabras en paralelo, por lo que se usa mucho en bsquedas bibliogrficas; egrep acepta expresiones ms complejas, pero es ms lento; grep es un buen compromiso entre ambos.
fgrep martes dias

busca la cadena martes en el archivo dias.

En fgrep y egrep puede indicarse la opcin -f buscar.exp, donde buscar.exp es un archivo que contiene la expresin a buscar: cadenas simples para fgrep, expresiones regulares para egrep, separadas por nueva lnea; las expresiones se buscan en paralelo, es decir que la salida sern todas las lneas que contengan una cualquiera de las expresiones a buscar. Crear un archivo buscar.fgrep con las cadenas "tes" y "jue", una por lnea. El comando
fgrep -f buscar.fgrep dias

extrae del archivo dias las lneas que contienen estas cadenas.

El comando grep soporta fgrep y egrep como opciones -F y -E, respectivamente.


grep -F -f buscar.fgrep dias egrep "tes|jue" dias grep -E "tes|jue" dias

obtienen el mismo efecto del comando anterior.

egrep "([0-9]+ab)*1234" archivo

busca cadenas comenzadas opcionalmente por un dgito y los caracteres ab, todo el parntesis 0 o ms veces, y hasta encontrar la cadena 1234.

Escribir grep -E es similar a egrep, aunque no idntico; egrep es compatible con el comando histrico egrep; grep -E acepta expresiones regulares extendidas y es la versin moderna del comando en GNU. fgrep es idntico a grep -F.

tr
El comando tr translitera los caracteres de la entrada: sustituye unos caracteres por otros. La sustitucin es caracter a caracter. Entre sus opciones se encuentran -d para borrar caracteres; c para sustituir complemento de los caracteres indicados, es decir, que no sean sos; y -s para comprimir caracteres repetidos en uno solo.
cat dias | tr a-z A-Z

convierte todo a maysculas.


cat dias | tr -d aeiou

borra todas las vocales del archivo dias.

Agregar al archivo dias lneas en blanco, varias seguidas, intercaladas entre los nombres de los das.
cat dias cat dias | tr -s "\n*"

convierte varios caracteres nueva lnea seguidos en una solo; elimina renglones en blanco.

cat nota | tr -c "[a-zA-Z0-9]" "_"

transforma todos los caracteres que no sean letras o nmeros en subrayas.


cat nota | tr -cs "[a-zA-Z0-9]" "[\n*]"

transforma todos los caracteres que no sean letras o nmeros en nuevalnea, y comprime las nuevalneas repetidas en una sola; deja cada palabra sola en un rengln.

ls -l /usr | tr -s " " | cut -f3,4

comprime los blancos en la salida para poder cortar campos.

uniq
El comando uniq excluye todos los renglones adyacentes duplicados menos uno; es decir, elimina renglones repetidos consecutivos. La opcin -c escribe el nmero de ocurrencias al comienzo del rengln. El siguiente ejemplo muestra las 5 palabras ms frecuentes en el conjunto de archivos:
cat *.txt | tr -sc A-Za-z '\012' | \ sort | uniq -c | sort -n | tail 5 cat lista todos los archivos, tr comprime el rengln eliminando blancos, sort los ordena, uniq cuenta las ocurrencias y elimina repetidos, sort -n ordena por cantidad de ocurrencias

y tail muestra las 5 ocurrencias ms frecuentes.

dd
El comando dd es un convertidor de datos: convierte de ASCII a EBCDIC y a la inversa, cambia los tamaos de los bloques de registros, hace ajuste de blancos y otras transformaciones usuales cuando se manejan transferencias entre sistemas operativos distintos o datos en bruto, sin formato, como en los respaldos en cinta.

Comandos de Filtro
Referencias dd find grep, fgrep, egrep sort tr uniq

dd
dd OPCION ...

copia un archivo, de entrada estndar a salida estndar por defecto, opcionalmente cambiando tamao de bloques de entrada salida y realizando diversas conversiones.
if=ARCHIVO of=ARCHIVO ibs=BYTES obs=BYTES bs=BYTES leer la entrada del archivo indicado. dirigir la salida al archivo indicado. leer la entrada en bloques de BYTES bytes. grabar la salida en bloques de BYTES bytes. leer y grabar entrada y salida en bloques.

conv=CONVERSION[,CONVERSION]... convertir segn argumentos.

Las opciones numricas admiten los multiplicadores b para 512, k para 1024. Los argumentos de conversin se separan por comas sin espacios; incluyen:
ascii ebcdic ibm block convierte EBCDIC a ASCII. convierte ASCII a EBCDIC. convierte ASCII a EBCDIC alternativo. embloca cada lnea de entrada en 'cbs' bytes, reemplaza nueva lnea por espacio, rellena con espacios. unblock lcase ucase notrunc reemplaza espacios finales de cada bloque con nueva lnea. convierte maysculas a minsculas convierte minsculas a maysculas. no truncar el archivo de salida.

find
find [DIRECTORIO...] [EXPRESION]

Recorre una jerarqua de directorios buscando archivos seleccionados segn cierta expresin y muestra informacin sobre los encontrados. Argumentos numricos:
+N -N N mayor que N menor que N exactamente N.

Criterios de bsqueda:
-name PATRON -iname PATRON -path PATRON -ipath PATRON -regexp EXP -iregexp EXP -lname PATRON el nombre aparea con PATRON; idem,insensible a mayculas; nombre con va completa; idem, insensible a maystulas; nombre aparea con expresin regular EXP idem, insensible a maysculas; archivo es un enlace simblico;

-ilname PATRON idem, insensible a maysculas;

-atime N -ctime N -mtime N -amin N -cmin N -mmin N -daystart -size N[bckw] bytes) -empty -user UNAME -group GNAME -uid N -gid N -nouser -nogroup

ltimo acceso N*24 horas atrs ltimo cambio de estado N*24 horas atrs ltima modificacin N*24 horas atrs ltimo acceso N minutos atrs ltimo cambio de estado N minutos horas atrs ltima modificacin N minutos atrs mide tiempos desde las 0 horas de hoy tamao de N bloques, caracteres, KB o palabras (2

archivo vaco, regular o directorio archivo del usuario UNAME archivo del grupo GNAME archivo del usuario de nmero N archivo del grupo de nmero N archivo sin dueo asignado archivo sin grupo asignado

Acciones:
-print -ls imprime la ruta completa de los archivos encontrados. lista los archivos encontrados en formato ls -dils

-exec COMANDO {} \; ejecuta COMANDO sobre los archivos encontrados find /usr/local/doc -name '*.texi'

busca en el directorio indicado los archivos de nombre indicado.


find /usr/src -name '*.c' -size +100k -print

muestra nombres de archivos terminados en .c con tamao mayor de 100 K.


find . -lname '*sysdep.c'

busca enlaces simblicos del nombre indicado.


find /u/bill -amin +2 -amin -6

archivos que fueron ledos entre 2 y 6 minutos atrs. La medicin de tiempos se hace desde 24 horas atrs (1 da atrs); para medir tiempos desde las 0 horas del da de hoy, usar la opcin -daystart.

find ~ -daystart -type f -mtime 1

archivos que fueron modificados ayer.


find / -empty -exec rm -rf '{}' ';'

busca archivos o directorios vacos y los elimina.


find . -name '*.h' -exec diff -u '{}' /tmp/master ';'

compara archivos de "header" (*.h) del directorio corriente contra el archivo /tmp/master.

grep, egrep, fgrep


grep [ -e PATRON | -f ARCHIVO | PATRON ] OPCIONES ARCHIVO ...

recorre los archivos indicados extrayendo las lneas que aparean con un patrn de cadena de caracteres.
-G -E -F el patrn es una expresin regular bsica; opcin por defecto el patrn es una expresin regular extendida el patrn es una cadena fija

Existen dos variantes: egrep, similar a grep -E, y fgrep, igual a grep -F.
-c slo muestra la cantidad de lneas

-e PATRON usa el patrn indicado; til cuando el patrn empieza con -f ARCHIVO obtiene los patrones del archivo, uno por lnea -h -i -n -v -w -x suprime indicacin de archivo cuando se busca en varios archivos ignora maysculas y minsculas en el patrn y en los archivos indicar nmero de lnea muestra las lneas que no aparean con el patrn aparea el patrn como una palabra el patrn aparea con toda la lnea

sort
sort [OPCIONES] [ARCHIVO...]

ordena, mezcla o compara todas las lneas de los archivos indicados o de la entrada estndar. Tiene 3 modos de operacin: ordenar, verificar orden, mezclar archivos.

-c -m

verifica si los archivos ya estn ordenados mezcla archivos ordenados en uno solo, ordenado

-b -d -f -i -n -r

ignora blancos adelante en la ordenacin ordena considerando slo letras, nmeros y blancos ordena como si todas fueran maysculas ignora caracteres no imprimibles (fuera de 040-0176 octal) ordena como valores numricos y no como ASCII invertir el sentido de la ordenacin archivo de salida; puede ser el de entrada

-o arch -t

usar el caracter indicado como separador de campos

-k POS1[,POS2] campos de ordenacin, POS1 hasta POS2 inclusive; o hasta el final si no hay POS2

Las posiciones POS1 y POS2 son de la forma F.C donde F es el nmero del campo y C es el primer caracter desde el comienzo del campo (para POS1) o desde el final del campo (para POS2); si se omite C se ordena tomando en cuenta el primer caracter del campo.

cat /etc/passwd | sort -t: cat /etc/passwd | sort -t: +4 -f | cut -d: -f5 cat /etc/passwd | sort -t: +5 | cut -d: -f6 cat /etc/passwd | sort -t: -n -k3,5 | cut -d: -f4,5

tr
tr [OPCION]... CONJ1 [CONJ2]

copia entrada en salida traduciendo, comprimiendo o borrando caracteres. CONJ1 y CONJ2 definen un conjunto ordenado de caracteres a transformar. La opcin -c reemplaza CONJ1 por su complemento, los caracteres no especificados en el conjunto.
-d -s elimina los caracteres de CONJ1. comprime caracteres repetidos en CONJ1 en una sola ocurrencia.

-ds primero borra segn CONJ1 y despus comprime segn CONJ2.

El formato de CONJ1 y CONJ2 se parece al de las expresiones regulares, pero son slo listas de caracteres. La mayora de los caracteres se representan a s mismos, pero existen las siguientes abreviaturas:
\a \b \f \' \r \t \v \OOO \\ Control-G, Control-H, Control-L, Control-J, Control-M, Control-I, Control-K, caracter representado por dgitos octales barra inversa.

M-N 0-9

intervalo de caracteres desde el M al N (M anterior al N) equivale a 0123456789

La notacin [:CLASE:] expande a los caracteres predefinidos en las clases:


alnum alpha blank cntrl digit graph lower print punct space upper xdigit letras y nmeros. letras. espacio. caracteres de control. nmeros. caracteres imprimibles, excludo el espacio. minsculas caracteres imprimibles, includo el espacio. signos de puntuacin. espacio maysculas. dgitos hexadecimales.

La traduccin se realiza cambiando el primer caracter de CONJ1 por el primer caracter

de CONJ2, el 2o. de CON1 por el 2o. de CONJ2, etc. Los caracteres no indicados en CONJ1 pasan incambiados.
tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ tr a-z A-Z tr '[:lower:]' '[:upper:]'

convierten minsculas en maysculas.


tr -d '\000'

elimina caracteres nulos (octal 000).


tr -cs '[a-zA-Z0-9]' '[\n*]'

separa las palabras una por lnea.


tr -s '\n'

comprime caracteres nueva lnea en uno solo (elimina lneas en blanco).

uniq
uniq [OPCION]... [ENTRADA [SALIDA]]

muestra una nica lnea para una entrada ordenada, eliminando lneas repetidas sucesivas. Opcionalmente, puede mostrar solo lneas que aparecen una vez, o slo lneas que aparecen varias veces. La entrada debe estar ya ordenada; si no lo est, puede usars sort -u para lograr un efecto similar.
-f N -s N -c -i -d -u saltear N campos antes de verificar unicidad. saltear N caracteres antes de verificar unicidad. indicar junto a cada lnea el nmero de veces que aparece. ignorar maysculas y minsculas al comparar. mostrar slo lneas repetidas. mostrar slo lneas nicas.

Los campos son cadenas de caracteres separadas por uno o ms blancos (espacios o tabuladores). Si se indican saltear campos y caracteres, los campos se saltean primero.

Programacin del Shell


Comandos multilnea El archivo de comandos (script) Comentarios en los scripts Comandos de programacin true false if for case while until exit expr test read Parmetros Depuracin Preguntas y Ejercicios Bibliografa y Referencias

El intrprete de comandos o "shell" de UNIX es tambin un lenguage de programacin completo. La programacin de shell se usa mucho para realizar tareas repetidas con frecuencia. Los diseadores de sistemas suelen escribir aplicaciones en el lenguaje de base del sistema operativo, C en el caso de UNIX, por razones de rapidez y eficiencia. Sin embargo, el shell de UNIX tiene un excelente rendimiento en la ejecucin de "scripts" (guiones); sta es la denominacin aplicada a los programas escritos en el lenguaje del shell. Se han creado aplicaciones completas usando solamente scripts.

Comandos multilnea.
Una lnea de comando termina con un caracter nuevalnea. El caracter nuevalnea se ingresa digitando la tecla ENTER. Varios comandos pueden escribirse en una misma lnea usando el separador ";"
echo $LOGNAME; pwd; date

Si un comando no cabe en una lnea, la mayora de los intrpretes continan la digitacin en la lnea siguiente. Para establecer especficamente que un comando contina en la lnea siguiente, hay dos formas, mutuamente excluyentes (se usa una u otra, pero no ambas al mismo tiempo): - terminar la primera lnea con \ :
$ echo $LOGNAME \ > $HOME

que muestra algo como

jperez /home/jperez

- dejar una comilla sin cerrar:


$ echo "$LOGNAME > $HOME"

que produce el mismo resultado. En los ejemplos anteriores hemos escrito los indicadores de comando. Al continuar el comando en la segunda lnea, el indicador de comandos cambia de $ a >, es decir, del indicador de comando de primer nivel PS1 al indicador de comando de segundo nivel PS2. Si no se quiere terminar el comando multilnea, puede interrumpirse el ingreso con Ctrl-C, volviendo el indicador de comando a PS1 inmediatamente.

El archivo de comandos (script).


Es cmodo poder retener una lista larga de comandos en un archivo, y ejecutarlos todos de una sola vez slo invocando el nombre del archivo. Crear el archivo misdatos.sh con las siguientes lneas:
# misdatos.sh # muestra datos relativos al usuario que lo invoca # echo "MIS DATOS." echo " Nombre: "$LOGNAME echo "Directorio: "$HOME echo -n "Fecha: " date echo # fin misdatos.sh

El smbolo # indica comentario. Para poder ejecutar los comandos contenidos en este archivo, es preciso dar al mismo permisos de ejecucin:
chmod ug+x misdatos.sh

La invocacin (ejecucin) del archivo puede realizarse dando el nombre de archivo como argumento a bash
bash misdatos.sh

o invocndolo directamente como un comando


misdatos.sh

Puede requerirse indicar una va absoluta o relativa, o referirse al directorio actual,


./misdatos.sh

si el directorio actual no est contenido en la variable PATH.

Comentarios en los scripts.


En un script todo lo que venga despus del smbolo # y hasta el prximo caracter nuevalnea se toma como comentario y no se ejecuta.
echo Hola todos # comentario hasta fin de lnea

slo imprime "Hola todos".


# cat /etc/passwd

no ejecuta nada, pues el smbolo # convierte toda la lnea en comentario.

Los scripts suelen encabezarse con comentarios que indican el nombre de archivo y lo que hace el script. Se colocan comentarios de documentacin en diferentes partes del script para mejorar la comprensin y facilitar el mantenimiento. Un caso especial es el uso de # en la primera lnea para indicar el intrprete con que se ejecutar el script. El script anterior con comentarios quedara as:
#!/bin/bash # misdatos.sh # # muestra datos propios del usuario que lo invoca # echo "MIS DATOS." echo " Nombre: "$LOGNAME echo "Directorio: "$HOME echo -n "Fecha: " date # muestra fecha y hora echo # lnea en blanco para presentacin # fin misdatos.sh

La primera lnea indica que el script ser ejecutado con el intrprete de comandos bash. Esta indicacin debe ser siempre la primera lnea del script y no puede tener blancos.

Estructuras bsicas de programacin.


Las estructuras bsicas de programacin son slo dos: la estructura repetitiva y la estructura alternativa. Cada forma tiene sus variaciones, y la combinacin de todas ellas generan mltples posibilidades, pero detrs de cualquiera de ellas, por compleja que parezca, se encuentran siempre repeticiones o alternativas.

Estructura repetitiva: se realiza una accin un cierto nmero de veces, o mientras dure una condicin.
mientras haya manzanas, pelarlas; desde i = 1 hasta i = 7 escribir dia_semana(i);

Esta escritura informal se denomina "pseudocdigo", por contraposicin al trmino "cdigo", que sera la escritura formal en un lenguaje de programacin. En el segundo ejemplo, dia_semana(i) sera una funcin que devuelve el nombre del da de la semana cuando se le da su nmero ordinal. Estructura alternativa: en base a la comprobacin de una condicin, se decide una accin diferente para cada caso.
si manzana est pelada, comerla, en otro caso, pelarla;

# orculo caso $estado en soltero) escribir "El casamiento ser su felicidad"; casado) escribir "El divorcio le devolver la felicidad"; divorciado) escribir "Slo ser feliz si se vuelve a casar"; fin caso

Funciones: una tarea que se realiza repetidamente dentro del mismo programa puede escribirse aparte e invocarse como una "funcin". Para definir una funcin es preciso elegir un nombre y escribir un trozo de cdigo asociado a ese nombre. La funcin suele recibir algn valor como "parmetro" en base al cual realiza su tarea. Definida as la funcin, para usarla basta escribir su nombre y colocar el valor del parmetro entre parntesis.
funcin area_cuadrado (lado) devolver lado * lado; funcin dia_semana(da_hoy) caso $dia_hoy en 1) devolver "Lunes";; 2) devolver "Martes";; 3) devolver "Mircoles";: 4) devolver "Jueves";; 5) devolver "Viernes;; 6) devolver "Sbado";; 7) devolver "Domingo";; fin caso;

Comandos de programacin.
En esta seccin veremos los comandos tpicos de programacin del shell. Obsrvese que el shell toma la convencin inversa de C para cierto y falso: cierto es 0, y falso es distinto de 0. El shell adopta esta convencin porque los comandos retornan 0 cuando no hubo error. Veremos dos comandos, true y false, que retornan siempre estos valores; se usan en algunas situaciones de programacin para fijar una condicin. true Este comando no hace nada, slo devuelve siempre 0, el valor verdadero. La ejecucin correcta de un comando cualquiera devuelve 0.
true echo $?

muestra el valor 0; la variable $? retiene el valor de retorno del ltimo comando ejecutado.

false Este comando tampoco hace nada slo devuelve siempre 1; cualquier valor diferente de 0 se toma como falso. Las diversas condiciones de error de ejecucin de los comandos devuelven valores diferentes de 0; su significado es propio de cada comando.
false echo $?

muestra el valor 1. if El comando if implementa una estructura alternativa. Su sintaxis es


if expresin ; then comandos1 ; [else comandos2 ;] fi

o tambin
if expresin then comandos1 [else comandos2] fi

Si se usa la forma multilnea cuando se trabaja en la lnea de comandos, el indicador cambia a > hasta que termina el comando. La expresin puede ser cualquier expresin lgica o comando que retorne un valor; si el valor retornado es 0 (cierto) los comandos1 se ejecutan; si el valor retornado es distinto de 0 (falso) los comandos1 no se ejecutan. Si se us la forma opcional con else se ejecutan los comandos2.
if true; then echo Cierto ; else echo Falso ; fi

siempre imprime Cierto; no entra nunca en else.


if false; then echo Cierto ; else echo Falso ; fi siempre imprime Falso, no entra nunca en then.

Construcciones ms complejas pueden hacerse usando elif para anidar alternativas. Escribir en un archivo las lneas que siguen
# ciertofalso.sh: escribe cierto o falso segn parmetro numrico # if [ $1 = "0" ] then echo "Cierto: el parmetro es 0." else echo "Falso: el parmetro no es 0." fi

Convertir el script en ejecutable. Invocar este script con


./ciertofalso.sh N

donde N es un nmero entero 0, 1, 2, etc. La variable $1 hace referencia a este parmetro de invocacin. Verificar el resultado. Crear y ejecutar el siguiente script:

# trabajo.sh: dice si se trabaja segn el da # invocar con parmetros: # domingo, feriado, u otro nombre cualquiera # if [ $1 = "domingo" ] then echo "no se trabaja" elif [ $1 = "feriado" ] then echo "en algunos se trabaja" else echo "se trabaja" fi

for Este comando implementa una estructura repetitiva, en la cual una secuencia de comandos se ejecuta una y otra vez. Su sintaxis es
for variable in lista ; do comandos ; done

Se puede probar en la lnea de comandos:


for NUMERO in 1 2 3 4 ; do echo $NUMERO ; done for NOMBRE in alfa beta gamma ; do echo $NOMBRE ; done for ARCH in * ; do echo Nombre archivo $ARCH ; done

El caracter * es expandido por el shell colocando en su lugar todos los nombres de archivo del directorio actual. Crear y probar el siguiente script.
# listapal.sh: lista de palabras # muestra palabras de una lista interna # LISTA="silla mesa banco cuadro armario" for I in $LISTA do echo $I done # fin listapal.sh

En el siguiente script, el comando expr calcula expresiones aritmticas; notar su sintaxis.


# contarch.sh # muestra nombres y cuenta archivos en el directorio actual # CUENTA=0 for ARCH in * do echo $ARCH CUENTA=`expr $CUENTA + 1` # agrega 1 a CUENTA done

echo Hay $CUENTA archivos en el directorio `pwd` # fin contarch.sh

case Este comando implementa alternativas o "casos"; elige entre mltiples secuencias de comandos la secuencia a ejecutar. La eleccin se realiza encontrando el primer patrn con el que aparea una cadena de caracteres. Su sintaxis es
case $CADENA in patrn1) comandos1;; patrn2) comandos2;; ... *) comandosN;; esac

El patrn * se coloca al final; aparea cualquier cadena, y permite ejecutar comandosN cuando ninguna de las opciones anteriores fue satisfecha. Crear el siguiente script:
# diasemana.sh: nombres de los das de la semana # invocar con nmero del 0 al 6; 0 es domingo case $1 in 0) echo Domingo;; 1) echo Lunes;; 2) echo Martes;; 3) echo Mircoles;; 4) echo Jueves;; 5) echo Viernes;; 6) echo Sbado;; *) echo Debe indicar un nmero de 0 a 6;; esac

Invocarlo como
diasemana.sh N

donde N es cualquier nmero de 0 a 6, otro nmero, o una cadena cualquiera. Verificar el comportamiento. Crear el archivo estacion.sh con estas lneas:
# estacion.sh # indica la estacin del ao aproximada segn el mes # case $1 in diciembre|enero|febrero) echo Verano;; marzo|abril|mayo) echo Otoo;; junio|julio|agosto) echo Invierno;;

setiembre|octubre |noviembre) echo Primavera;; *) echo estacion.sh: debe invocarse como echo estacion.sh mes echo con el nombre del mes en minscula;; esac # fin estacion.sh

El valor $1 es el parmetro recibido en la lnea de comando. La opcin *) aparea con cualquier cadena, por lo que acta como "en otro caso"; es til para dar instrucciones sobre el uso del comando. En las opciones, | acta como OR; pueden usarse tambin comodines * y ?. Invocar el script:
bash estacion.sh octubre bash estacion.sh

Cmo podra modificarse el script anterior para que aceptara el mes en cualquier combinacin de maysculas y minsculas? while Este comando implementa una estructura repetitiva en la cual el conjunto de comandos se ejecuta mientras se mantenga vlida una condicin (while = mientras). La condicin se examina al principio y luego cada vez que se completa la secuencia de comandos. Si la condicin es falsa desde la primera vez, los comandos no se ejecutan nunca. Su sintaxis es
while condicin ; do comandos ; done

En el guin que sigue la expresin entre parntesis rectos es una forma de invocar el comando test, que realiza una prueba devolviendo cierto o falso. El operador -lt, "lower than", significa "menor que". Observar su sintaxis, sobre todo la posicin de los espacios en blanco, obligatorios.
# crear1.sh # crea archivos arch1....arch9, los lista y luego borra VAL=1 while [ $VAL -lt 10 ] # mientras $VAL < 10 do echo creando archivo arch$VAL touch arch$VAL VAL=`expr $VAL + 1` done ls -l arch[0-9] rm arch[0-9] # fin crear1.sh

until Este comando implementa una estructura repetitiva en la cual el conjunto de comando se ejecuta hasta que se cumpla una condicin. En cuanto la condicin se cumple, dejan de ejecutarse los comandos. La condicin se examina al principio; si es verdadera, los comandos no se ejecutan. Notar la diferencia con while. Su sintaxis es
until condicin ; do comandos ; done

Usando until, el script anterior se escribira


# crear2.sh # crea archivos arch1....arch9, los lista y luego borra VAL=1 until [ $VAL -eq 10 ] # hasta que $VAL = 10 do echo creando archivo arch$VAL touch arch$VAL VAL=`expr $VAL + 1` done ls -l arch[0-9] rm arch[0-9] # fin crear2.sh

exit Este comando se utiliza en programacin de shell para terminar inmediatamente un script y volver al shell original.
exit

en un script, termina inmediatamente el script; en la lnea de comando, termina la ejecucin del shell actual, y por lo tanto la sesin de UNIX.
exit 6

termina el script devolviendo el nmero indicado, lo que puede usarse para determinar condiciones de error.
exit 0

termina el script devolviendo 0, para indicar la finalizacin exitosa de tareas. Escribir slo exit tambin devuelve cdigo de error 0. El siguiente script ofrece un ejemplo de uso.
#!/bin/bash # exitar.sh: prueba valores de retorno de exit # clear echo "Prueba de valores de retorno" echo " Invocar con parmetros " echo " bien, error1, error2, cualquier cosa o nada" echo " Verificar valor de retorno con" echo ' echo $?' echo VALOR=$1 case $VALOR in bien) echo " -> Terminacin sin error." exit 0;; error1) echo " -> Terminacin con error 1." ; exit 1;; error2) echo " -> Terminacin con error 2." ; exit 2;; *)

echo " echo " exit 3;; esac

-> Terminacin con error 3." (invocado con parmetro no previsto o sin parmetro."

expr Este comando recibe nmeros y operadores aritmticos como argumentos, efecta los clculos indicados y devuelve el resultado. Cada argumento debe estar separado por blancos. Opera slo con nmeros enteros y realiza las operaciones suma (+), resta (-), multiplicacin (*), divisin entera (/), resto de divisin entera (%). Los smbolos * y / deben ser escapados escribiendo \* y \/, al igual que los parntesis, que deben escribirse \( y \).

El comando expr usa la convencin de C para cierto y falso: 0 es falso, y distinto de 0 es cierto. No confundir con la convencin que toma el shell en sus valores true y false, que es la contraria.
expr 4 + 5

devuelve 9 ( 4 + 5 = 9 ).
expr 3 \* 4 + 6 \/2

devuelve 15 ( 3 * 4 + 6 /2 = 15 ).
expr 3 \* \( 4 + 3 \) \/2

devuelve 10 ( 3 * (4 + 3) / 2 = 10 ).
expr tambin realiza operaciones lgicas de comparacin, aceptando los operadores =, !=, >, <, >= y <=. El operador != es "no igual"; el ! se usa para negar. Estos

caracteres tambin requieren ser escapados.


echo `expr 6 \< 10` devuelve 1, cierto para expr. echo `expr 6 \> 10` devuelve 0, falso para expr. echo `expr abc \< abd` devuelve 1, cierto para expr.

test Este comando prueba condiciones y devuelve valor cierto (0) o falso (distinto de 0) segn el criterio de cierto y falso del shell; esto lo hace apto para usar en la condicin de if. Tiene dos formas equivalentes
test expresin [ expresin ]

Los blancos entre la expresin y los parntesis rectos son necesarios.


test devuelve cierto ante una cadena no vaca, y falso ante una cadena vaca: if test "cadena" ; then echo Cierto ; else echo Falso; fi if test "" ; then echo Cierto ; else echo Falso ; fi if [ cadena ] ; then echo Cierto ; else echo Falso; fi if [ ] ; then echo Cierto ; else echo Falso ; fi test prueba una cantidad de condiciones y situaciones: if [ -f archivo ]; then echo "Existe archivo"; \ else echo "No existe archivo"; fi

La condicin [ -f archivo ] es cierta si archivo existe y es un archivo normal; anlogamente, -r comprueba si es legible, -w si puede escribirse, -x si es ejecutable, -d si es un directorio, -s si tiene tamao mayor que 0. Las condiciones
[ $DIR = $HOME ] [ $LOGNAME = "usuario1" ] [ $RESULTADO != "error" ]

comparan cadenas de caracteres; = para igualdad y != para desigualdad. La condicin


[ "$VAR1" ]

devuelve falso si la variable no est definida. Las comillas dan la cadena nula cuando VAR1 no est definida; sin comillas no habra cadena y dara error de sintaxis. La condicin
[ expnum1 -eq expnum2 ]

compara igualdad de expresiones que resultan en un nmero. Pueden ser expresiones numricas o lgicas, ya que stas tambin resultan en nmeros. Los operadores numricos derivan sus letras del ingls, y son -eq (igualdad), -neq (no igual, desigualdad), -lt (menor), -gt (mayor), -le (menor o igual), -ge (mayor o igual). El comando test se usa mucho para determinar si un comando se complet con xito, en cuyo caso el valor de retorno es 0. El siguiente script crea un archivo si no existe.
# nvoarch.sh # recibe un nombre y # si ya existe emite if [ -f $1 ] then echo El archivo $1 else touch $1 echo Fue creado el fi echo # fin nvoarch.sh

crea un archivo de ese nombre; un mensaje

ya existe

archivo $1

Para comprobar su accin,


bash nvoarch.sh nuevo1 ls -l nuevo1

crea el archivo; ls comprueba que existe;


bash nvoarch.sh nuevo1

da mensaje indicando que el archivo ya existe. Otros operadores aceptados por test son -a (AND) y -o (OR).
# rwsi.sh # indica si un archivo tiene permiso de lectura y escritura ARCH=$1 if [ -r $ARCH -a -w $ARCH ] then

echo El archivo $ARCH se puede leer y escribir else echo Al archivo $ARCH le falta algn permiso fi ls -l $ARCH # fin rwsi.sh

read Este comando tiene como propsito solicitar informacin al usuario. Su ejecucin captura las digitaciones del usuario, hasta obtener un caracter nueva lnea (techa Enter). El ejemplo siguiente obtiene datos del usuario, los repite en pantalla, solicita confirmacin y emite un mensaje en consecuencia.
# yo.sh: captura datos del usuario # clear echo "Datos del usuario." echo -n "Nombre y apellido: "; read NOMBRE echo -n "Cdula de identidad: "; read CEDULA echo echo "Ha ingresado los siguientes datos:" echo " Nombre y apellido: $NOMBRE" echo " Cdula de Identidad: $CEDULA" echo -n "Es correcto?(sN):"; read RESP if [ "$RESP" = "s" -o $RESP = "S" ] then echo "Fin de ingreso." else echo "Debe ingresar sus datos nuevamente." fi

Parmetros.
El siguiente programa muestra los parmetros que recibe al ser invocado:
# ecopars.sh # muestra los parmetros recibidos echo Cantidad de parmetros: $# for VAR in $* do echo $VAR done # fin ecopars.sh ecopars.sh Enero Febrero Marzo

muestra la cantidad y los parmetros recibidos. La variable $* contiene la lista de parmetros, y $# la cantidad. Dentro del script, los parmetros recibidos pueden referenciarse con $1, $2, $3, ..., $9, siendo $0 el nombre del propio programa. Debido a que se los reconoce por su ubicacin, se llaman parmetros posicionales. El siguiente programa se invoca con tres parmetros y muestra sus

valores:
# mostrar3.sh # se invoca con 3 parmetros y los muestra echo nombre del programa: $0 echo parmetros recibidos: echo $1; echo $2; echo $3 echo # fin mostrar3.sh

Cmo se podra verificar la invocacin con 3 parmetros, y emitir un mensaje de error en caso contrario (cuando el usuario ingresa menos de 3 parmetros)?

Depuracin.
Se llama depuracin ("debug") de un programa al proceso de verificar su funcionamiento en todos los casos posibles y corregir sus errores ("bugs", "pulgas"; del ingls, literalmente, "chinche"; por extensin, insecto pequeo).

Cuando se est escribiendo un script, puede convenir invocarlo de forma especial para generar informacin de comandos ejecutados y errores, para ayudar en la depuracin. Las salidas se imprimen en el error estndar, por lo que pueden direccionarse a un archivo sin mezclarse con la salida del comando.
bash -x ecopars.sh

imprime cada comando en la salida;


bash -v ecopars.sh

invoca el script obteniendo una salida verbosa con informacin sobre cada comando ejecutado.
bash -xv ecopars.sh 2>ecopars.err

rene las dos fuentes de informacin y direcciona el error estndar a un archivo.

Comandos de Usuario
Ultima revisin: Set 2001 Propsito Metalenguaje y convenciones Referencias Comandos:
apropos banner cal cat cd chmod clear cmp cp cut date diff echo env exit file head hostname id info less ln ls dir vdir mail man mesg mkdir more mv passwd pr printenv ps pwd rm rmdir tail talk touch umask wc whatis which who whoami

Propsito: Esta gua resume la sintaxis, opciones ms frecuentes y ejemplos de uso de los comandos UNIX de ms uso en la prctica. En descripcin se presenta nombre del comando, sintaxis resumida, accin principal, opciones ms usuales, ejemplos y observaciones, si las hay.

Esta gua no puede ni pretende sustituir la consulta de las pginas man.


Metalenguaje y convenciones:
... [] {A|B} TAB LF CR ESPACIO blanco UID GID (su) repeticin del ltimo item item opcional, puede estar o no item opcional obligatorio, debe tomarse A o B tecla o caracter tabulador caracter nueva lnea caracter retorno de carro caracter o tecla de barra espaciadora caracter TAB o ESPACIO, delimita palabras identificador de usuario (nmero) identificador de grupo (nmero) requiere permiso de supervisor

Los items en minsculas van tal cual, los items en MAYUSCULAS deben ser sustitudos por valores del usuario.

apropos
apropos [OPCIONES] PALABRA-CLAVE ...

busca entre las descripciones cortas de las pginas del manual la presencia de la palabra clave.

-r

interpreta cada nombre como una expresin regular

-w interpreta cada nombre como conteniendo caracteres comodines

apropos man apropos -w man*

banner
banner MENSAJE

Muestra el mensaje (cadena de caracteres) en letras grandes y girado 90; para imprimir carteles.

-wN

en un ancho de N columnas

banner -w 40 Hola!

banner a

cal
cal [OPCIONES] [[MES]AO]

Sin parmetros, muestra calendario del mes actual; el ao debe indicarse con centuria, 1-1999; el mes en nmero 1 a 12.

-j -y

da juliano, contado desde el 1 de enero calendario del ao en curso

cal cal 1998 cal 11 1997 cal 9 1752

muestra el mes del ao en que se saltearon 11 das para compensar aos bisiestos.

cat
cat [OPCIONES] [ARCHIVO ...]

Concatena los archivos indicados y los muestra en la salida estndar. Sin argumentos, recibe de la entrada estndar (-).

-A -b -E -n -s -t -v -T

equivalente a -vET numera las lneas que no estn en blanco muestra $ al final de cada lnea numera las lneas reemplaza varias lneas en blanco por una sola equivale a -vT muestra caracteres no imprimibles excepto LF y TAB muestra TAB como ^I

cat /etc/group cat cap1 cap2 cap3

muestra sucesivamente los archivos cap1, cap2 y cap3.


cat cap1 cap2 cap3 > libro

rene los archivos cap1, cap2 y cap3 en el archivo libro.


cat arch1 arch2 > arch1

hace perder los datos originales en arch1.

cd
cd [DIRECTORIO]

cambia directorio de trabajo; sin parmetros, cambia al directorio propio del usuario como aparece en $HOME. En Linux, es un comando interno del shell; ver bash(1).

cd /etc cd

chmod
chmod [OPCION] MODO ARCHIVO ...

cambia los permisos de acceso a los archivos indicados. No cambia los permisos de los enlaces simblicos.

-v -R

verboso, describe accin sobre cada archivo. recursivo, cambia permisos de subdirectorios y sus contenidos

chmod -R 0755 documentos/visibles chmod ug+rw-x,o+r-wx cap*.txt

clear
clear

borra la pantalla del terminal.

cmp
cmp [OPCIONES] ARCH1 ARCH2 [SALTEAR1 [SALTEAR2]]

compara dos archivos. Si son iguales, no dice nada; si difieren, marca el byte y el nmero de lnea de la primera diferencia.

-l

nmero de byte (decimal) y bytes diferentes (octal) para cada diferencia.

-s

devueve solamente un valor de retorno, sin escribir nada.

Los valores de retorno son 0 si los archivos son iguales, 1 si diferen, >1 si hubo un error. Los valores decimales SALTEAR1 y SALTEAR2 indican la posicin de byte donde comienza la comparacin en ARCH1 y ARCH2; puede expresarse en hexadecimal precediento el nmero con 0x, o en octal precediendo con 0.

cp
cp [OPCIONES] ARCH_ORIGEN ARCH_DESTINO cp [OPCIONES] ARCHIVO ... DIRECTORIO

copia ARCH_ORIGEN hacia ARCH_DESTINO; copia los archivos indicados hacia DIRECTORIO. Por defecto no copia directorios.

-d -f -i -l -p -s -R -v

copia enlaces simblicos como tales forzoso, sobreescribe archivos destino si existen avisa antes de sobreescribir archivos existentes crea enlaces hard en lugar de copiar los archivos preserva dueo, grupo, permiso y fecha crea enlaces simblicos en lugar de copiar los archivos recursivo, copia directorios y sus archivos verboso, escribe el nombre de cada archivo que copia

cp arch1 /dir1/arch1 cp -vi arch1 arch2 cp -dpRv dir1 /dir2/subdir2 dirtodo

mejor forma de copiar exactamente una estructura de directorios, recursivamente, conservando permisos y manteniendo enlaces simblicos; verboso puede omitirse.

cut
cut -f CAMPOS [-d DELIM][ARCHIVO ...] cut -c COLUMNAS [ARCHIVO ...]

extrae partes de cada lnea de los archivos indicados o de la entrada estndar. Los campos y columnas se indican con nmeros 1, 2,... o con intervalos n-m. Intervalos incompletos: -n es 1n, m- es m hasta el ltimo campo o columna.

-f -c -d -s

campos numerados, por defecto separados por TAB columnas, ubicacin posicional de caracteres en la lnea fija el caracter delimitador de campos, TAB por defecto con -f para no imprimir lneas que no contengan el delimitador

cat /etc/passwd | cut -d: -f1,3,5-6 cat /etc/passwd | cut -c1-15 ls -l | cut -c57-

corta slo el nombre del archivo, al final (puede requerir ajuste en el valor de columna).

date
date [OPCION] [+FORMATO]

muestra fecha y hora. Con +FORMATO la presenta segn el patrn indicado.

date [-u|--utc|--universal] [ MMDDHHmm [[CC]YY][.SS] ]

fija (su) fecha y hora.

-u --utc --universal

hora universal (GMT)

Formato para fijar la hora:


MM DD HH mm CC YY SS mes (01-12) da (01-31) hora (00-23) mminuto (00-59) centuria ao segundos (00-59)

Formato para presentar la fecha y la hora (+FORMATO): '%H' '%M' '%S' '%T' '%X' '%a' '%A' '%b' '%B' '%c' '%d' '%m' '%w' '%x' '%y' '%Y' hora (00-23) minuto (00-59) segundos (00-59) hora en 24 horas (hh:mm:ss) hora en representacin local (%H:%M:S) nombre local abreviado del da nombre local completo del da nombre local abreviado del mes nombre local completo del mes fecha y hora locales da del mes (01-31) mes (01-12) da de la semana (0-6), 0 es Domingo fecha local 2 dgitos del ao (00-99) 4 dgitos del ao (1970....)

diff
diff ARCHIVO1 ARCHIVO2

muestra las diferencias existentes entre dos archivos.

diff nota1 nota2

echo
echo [OPCIONES] MENSAJE ...

escribe en la salida estndar los mensajes, separados con un espacio y con LF al final. Muchos shells tienen un comando interno del mismo nombre; ste, fuera del shell, debe invocarse como /bin/echo.

-n -e \a \b \c \f \n \r \t \v \\

suprime LF al final interpreta estos caracteres especiales, dentro de " " campana retroceso suprime LF al final cambio de pgina nueva lnea (LF) retorno de carro (CR) tabulador horizontal tabulador vertical barra inversa

\nnn caracter ASCII nnn en octal

echo Hola Todos! echo -n Hola Todos! echo -e "\a" echo -e "\101"

muestra la letra A, que es 101 en octal.

env
env [OPCIONES][NOMBRE=VALOR]...[COMANDO [ARGUMENTO ...]]

Sin argumentos, muestra valores de variables de ambiente; con argumentos, corre el comando indicado con las variables de ambiente modificadas segn se indique.

-i comenzar con un ambiente virgen, ignorando el actual

env env DIR=/etc listadir1

lista el contenido del directorio /etc; listadir es un archivo ejecutable que contiene la lnea ls dir1, para listar contenido del directorio dir1.
echo Directorio $HOME ls -l $HOME

muestra el directorio propio del usuario, guardado en la variable de ambiente HOME.

exit
exit [N]

produce la salida del shell con estado de terminacin N (nmero); si no se indica retorna con 0.

file
file OPCIONES ARCHIVO

intenta determinar el tipo de archivo de que se trata: texto ASCII, cdigo C, script en diversos lenguajes, binario, otros.
-z examina archivos comprimidos file cati.c

este archivo contiene cdigo C.


file adduser

este archivo es un script en Perl.


file /bin/cat

es un ejecutable binario.

head
head [OPCIONES] ARCHIVO ...

muestra la primera parte de un archivo, por defecto 10 lneas. Si son varios archivos muestra un encabezado con el nombre de cada archivo.

-v -q -N

verboso, imprime encabezamiento con nombre del archivo silencioso, no imprime encabezado con nombre del archivo imprime primeras N lneas, por defecto 10

-n N imprime primeras N lneas

head -24 /etc/inetd.conf

hostname
hostname [NOMBRE]

sin argumentos, da el nombre de la mquina; con NOMBRE, fija el nombre de la mquina (su).

-h -f --fqdn -d --domain

ayuda nombre de mquina completo, con dominio DNS nombre de dominio DNS direccin (nmero IP)

-i --ip-address -a --alias -v

nombres de alias verboso

id
id [OPCIONES] [NOMBRE_USUARIO]

muestra informacin sobre un usuario. Muestra nombre, UID, grupo, GID y grupos suplementarios. Si el id real y el efectivo no corresponden muestra ambos. Las opciones limitan el despliegue.

-g -G -n

slo el grupo primario grupos suplementarios nombre en lugar de nmero; requiere -u, -g, o -G

-r -u

real en lugar de efectivo; requiere -u, -g o -G slo el nmero de usuario (UID)

id id webmaster

muestra datos del usuario webmaster.

info
info [NOMBRE]

sistema de informacin de GNU sobre UNIX.

info info

muestra informacin sobre info, con tutorial para aprender a manejar info.

less
less [OPCIONES] [ARCHIVO]

programa de paginado y bsqueda similar a more, con ms opciones y comandos. Permite movimiento hacia adelante y atrs, pero no lee todo el archivo al principio, por lo que es ms rpido. Sus comandos estn tomados de more y vi (ver more).
--help -? muestra ayuda sobre comandos internos

ln
ln [OPCIONES] ORIGEN [DESTINO] ln [OPCIONES] ORIGEN ... DIRECTORIO

si el ltimo argumento es un directorio, ln crea en ese directorio enlaces a todos los archivos origen con el mismo nombre; si slo se indica un nombre de archivo, crea un enlace hacia ese archivo en el directorio actual; si se indican dos archivos, crea un enlace con el primer nombre (archivo real) hacia el segundo (enlace). Por defecto, crea enlaces hard y no elimina archivos existentes.

-f

forzoso, elimina archivos destino existentes

-i -s -v

interactivo, pide confirmacin para eliminar archivos simblico, crea enlaces simblicos en lugar de hard verboso, da el nombre de cada enlace creado

ln nota nota.ln ln -s /etc/passwd ln -s datos.usuario datos.usu.ln ln -sv datos.usuario LEAME dir2

ls, dir, vdir


ls [OPCIONES] [NOMBRE]

Para cada nombre de directorio, lista contenido de directorio; para cada nombre de archivo, indica su nombre y datos. La salida est ordenada alfabticamente por defecto. Sin nombre, lista el directorio corriente. La opcin -l muestra, separados por espacios, los campos tipo archivo y permisos, cantidad de enlaces hard, dueo, grupo, tamao, mes, da, hora o ao, nombre.

-1 -a -c -C -d -F -i -k -l -r -R -s -t -u

un nombre de archivo por lnea todos los archivos, incluso no visibles comenzados por . ordenar por fecha de estado de ltimo cambio (ctime en inodo) salida en columnas con ordenamiento por columnas lista directorios como archivos, no su contenido indica tipo: / directorio, * ejecutable, @ enlace simblico inodo, nmero de ndice de cada archivo tamaos en KB listado en formato largo invertir ordenamiento listar recursivamente subdirectorios tamao en bloques de 1024 bytes ordenar por fecha de ltima modificacin (mtime en inodo) ordenar por fecha de ltimo acceso (atime en inodo)

-U -x

no ordenar salida en columnas con ordenamiento por filas

dir

equivale al ls -C.
vdir

equivale a ls -l.

mail
mail [OPCIONES] [DESTINO ...]

procesador de correo electrnico de UNIX. Sin argumentos, muestra lista de mensajes en la casilla de entrada y permite manipularlos. Si hay un destino, lee de la entrada estndar hasta un "." aislado en una lnea y enva lo ledo como mensaje a destino.

-v -s TEMA -c LISTA -b LISTA -f [ARCH]

verboso, muestra detalles de entrega especifica el tema (subject) del mensaje enva copias a LISTA de usuarios, separados por coma enva copia ciega a LISTA de usuarios lee contenido de archivo propio mbox o el indicado

-u USUARIO equivale a mail -f /var/spool/mail/USUARIO

Comandos internos de mail:


& ? d N q indicador de comandos de mail muestra lista de comandos para manejo de mensajes borra mensaje corriente, marcado con '>' muestra el mensaje nmero N sale del programa de correo

mail -s "Saludos para todos " -c pedro,mateo@nsk.com.uy juan

enva un mensaje al usuario juan, tema "Saludos para todos", con copia a usuarios pedro y mateo.

man
man [OPCIONES] [SECCION] NOMBRE ...

Da formato y muestra las pginas del manual en lnea. Si no se indica seccin, muestra slo la primera que encuentre; si se indica seccin como nmero 1-9, muestra la pgina que haya en la seccin indicada. Las pginas estn organizadas en secciones, reconocidas por un dgito, y eventualmente subsecciones indicadas por una o ms letras.

-a -d -f -h -k -w

muestra pginas en todas las secciones muestra informacin de depuracin propia de man equivalente a whatis muestra ayuda para man equivalente a apropos no imprime las pginas, sino las ubicaciones

Secciones del manual: 1 2 3 4 5 6 7 8 programas ejecutables y guiones (scripts) llamadas al sistema (funciones del ncleo) llamadas a biblioteca (funciones de biblioteca) archivos especiales (generalmente en /dev) formatos de archivos juegos paquetes de macros comandos de administracin (su)

man -h man man man -a man

mesg

mesg [y|n]

controla acceso de escritura a la terminal propia por otros usuarios, tpicamente con programas tales como talk y write. Sin parmetros, muestra el estado: is y si est habilitada escritura, is n si no est habilitada escritura.

y n

permite a otros escribir mensajes en la terminal no permite a otros escribir mensajes en la terminal

mesg mesg y mesg n

mkdir
mkdir [OPCIONES] [-m MODO] DIRECTORIO ...

crea los directorios indicados. Por defecto, el modo es 0777 menos los bits de umask.

-m MODO

permite fijar el modo para el nuevo directorio; el modo es simblico y usa el modo por defecto como partida.

-p

crea primero todos los directorios padre inexistentes, con el modo de umask modificado con u+wx

--verbose

informa sobre la creacin de directorios

mkdir dir1 dir2 mkdir -p ltr/jd/jan

crea la estructura de directorios ltr/jd/jan.

more
more [OPCIONES][-N][+/CADENA[-N] [ARCHIVO ...]

pagina el texto dividindolo en pantallas, presentando una por vez.

-N -d -s -u

fija tamao de pantalla en N lneas muestra mensajes de ayuda comprime en una varias lneas en blanco seguidas suprime subrayados busca la cadena antes de mostrar

+/cadena +N

comienza a mostrar a partir de la lnea N

Durante el despliegue, reconoce los comandos siguientes, algunos de los cuales pueden ir precedidos de un nmero multiplicador:
h ESPACIO ENTER f b ^L = /PATRON muestra resumen de estos comandos avanza una pantalla muestra siguiente lnea avanza una pantalla; ^F retrocede una pantalla; tambin ^B (Ctrl-L) redibuja la pantalla muestra nmero de lnea actual busca hacia adelante la expresin regular PATRON

?/PATRON busca hacia atrs la expresin regular PATRON n . q, Q repetir ltima bsqueda repetir el comando anterior ir a lugar de comienzo de ltima bsqueda sale

mv
mv [OPCIONES] ARCH_ORIGNEN ARCH_DESTINO mv [OPCIONES] ARCHIVO ... DIRECTORIO

cambia de nombre ARCH_ORIGEN, o mueve hacia ARCH_DESTINO si el archivo destino invoca otro directorio; mueve ARCHIVO y los siguientes archivos hacia DIRECTORIO. Entre sistemas de archivos slo puede mover archivos normales.

-f -i -v -u

forzoso, sobreescribe archivos destino si existen avisa antes de sobreescribir archivos existentes verboso, escribe el nombre de cada archivo que mueve no mover si existe archivo destino ms nuevo o de igual fecha

mv nota notanueva mv -vi LEAME LEAME2 mv -v arch1 notanueva LEAME /dir2/subdir2

passwd
passwd [OPCIONES] [NOMBRE]

cambia la contrasea del usuario. El superusuario puede cambiar las contraseas de otros usuarios. En general, las contraseas deben tener entre 6 y 8 caracteres, contener maysculas, minsculas, dgitos 0 a 9 o signos de puntuacin; no se admiten contraseas simples ni parecidas al nombre del usuario. Si el superusuario asigna contraseas poco seguras no hay advertencia.

-x M -n M -n M

mximo nmero de das de validez; luego pide cambiar mnimo nmero de das antes de poder cambiar nmero de das de advertencia antes de expirar

passwd

permite cambiar la contrasea del usuario invocante


passwd jperez

(su) cambia la contrasea del usuario jperez.

pr
pr [OPCIONES] ARCHIVO ...

escribe en salida estndar un texto con formato, paginado y opcionalmente en varias columnas.

+P1[:P2] -C -a -d -f -h -l -m -o -w

de pgina P1 a pgina P2

en C columnas escribe las columnas a travs y no hacia abajo a doble espacio separar pginas con salto de pgina reemplazar encabezado con el indicado largo de pgina en lneas; por defecto 66 escribir archivos en paralelo uno en cada columna margen izquierdo; se suma al ancho indicado por -w ancho de pgina en columnas; por defecto 72

pr -o8 -l23 -h "Lista de usuarios" /etc/passwd pr -o2 -l22 -h "Lista de servicios" /etc/services | more ls /etc | pr -2 -b -l23 | more ls /etc | pr -3 -b -l23 -a | more

printenv
printenv [VARIABLE] ...

muestra el valor de todas las variables de ambiente; si se indica un nombre de variable, puestra el valor de esa variable.

printenv TERM

ps
ps [OPCIONES] [PID] ...

informa sobre procesos en ejecucin. Para las opciones, no debe usarse -, aunque es aceptado.

l u j s a x w

formato largo formto usuario, muestra nombre, PID, hora inicio, estado formato trabajos, muestra PGID y SID formato seales mostrar tambin procesos de otros usuarios. mostrar tambin procesos sin terminal de control no truncar lneas para caber en un ancho de pgina; agregar una w para cada lnea ms

h r

sin encabezado slo procesos en ejecucin

ps auxwww | more

muestra todos los procesos en ejecucin, en formato usuario, an los sin terminal, admitiendo hasta 4 lneas por comando.

pwd
pwd

imprime toda la ruta del directorio corriente; todos los componentes mostrados sern los directorios reales, no enlaces simblicos. El shell tiene una versin interna de pwd, por lo que para ejecutar sta, que es externa, es preciso escribir

ls -l /var/spool/mail

muestra /var/spool/mail como enlace simblico a /var/mail (Debian).


cd /var/spool/mail pwd

versin interna del shell, muestra /var/spool/mail, el enlace simblico.


/bin/pwd

versin externa, muestra /var/mail, el directorio real.

rm
rm [OPCIONES] NOMBRE ...

elimina los archivos indicados; por defecto no elimina directorios.

-f -i -r, -R -v

ignora archivos inexistentes y nunca pide confirmacin interactivo, pregunta antes de eliminar cada archivo. recursivo, borra directorios y su contenido verboso, muestra nombre de cada archivo eliminado

rm arch1 arch2 dir1/arch3 rm -riv dir1/subdir1 rm -r *

elimina TODOS los archivos y subdirectorios; no avisa. Cuidado!

rmdir
rmdir [OPCIONES] DIRECTORIO ...

elimina directorios vacos.

-p

elimina directorios padre si quedan vacos

rmdir dir2 rmdir -p dir1/subdir11/subdir111

tail
tail [OPCIONES] ARCHIVO ...

muestra la ltima parte de un archivo, por defecto 10 lneas. Si son varios archivos muestra un encabezado con el nombre de cada archivo.

-f -v -q -N

contina tratando de leer; para archivos en crecimiento verboso, imprime encabezamiento con nombre del archivo silencioso, no imprime encabezado con nombre del archivo imprime ltimas N lneas

-n N idem

talk
talk USUARIO [TTY]

conversar con otro usuario. Si est en la misma mquina, alcanza con el nombre de login del usuario; si est en otra mquina, es preciso usar la forma usuario@maquina. Si el usuario tiene varias sesiones a la vez, puede indicarse la terminal, usualmente en la forma ttyXX.

touch
touch [OPCIONES] ARCHIVO ...

cambia fecha, hora de acceso y/o modificacin de los archivos indicados; les pone la fecha y hora actuales. Si los archivos no existen los crea vacos.

-a -c -m -r arch_ref

cambia slo fecha de acceso no crea el archivo si no existe cambiar slo fecha de modificacin fija la fecha segn fecha del archivo arch_ref

-t MMDDhhmm[[CC]YY][.ss] fija la fecha indicando mes MM, da DD, hora hh y minuto mm; puede agregarse tambin centuria CC y ao YY y segundos ss.

touch 01011200 dia1enero.h1 touch ahora.arc touch -r antes.arch arch1 arch2

umask
umask [-S] [MODO]

fija la mscara para permisos de creacin segn modo. Si modo se indica con nmero, es en octal; si no, es en modo simblico. En general, los permisos de creacin sern, para directorios, 0777 menos los bits de mscara; para archivos 0666 menos los bits de mscara. La mscara vigente es la fijada por defecto o la que se fije con este comando. Sin parmetros, umask muestra la mscara vigente. La mscara indica los permisos que se quitan al permiso fijado.

-S

muestra la mscara, sin fijarla (por defecto, sin parmetros)

umask

muestra la mscara vigente.


umask 022

fija los permisos de creacin de archivos en 0666 - 022, es decir, 0644; los de directorios en 2777 - 022, es decir, 2755 (Debian).

uname
uname [OPCIONES]

muestra informacin de la mquina y del sistema operativo:

-a -m -n -p -r -s -v

toda la informacin mquina, tipo de hardware nombre de mquina en la red tipo de procesador edicin (release) del sistema operativo nombre del sistema operativo versin del sistema operativo

wc
wc [OPCIONES] ARCHIVO ...

cuenta lneas, palabras y caracteres de los archivos indicados o de la entrada estndar. Si son varios los archivos, imprime una lnea por cada uno y un total.

-c -w -l

slo caracteres slo palabras slo lneas

man pwd | wc -l wc /etc/passwd /etc/group

whatis
whatis [OPCIONES] NOMBRE ...

muestra una descripcin corta de los comandos similares a nombre.

-r

interpreta cada nombre como una expresin regular

-w interpreta cada nombre como conteniendo caracteres comodines

whatis man whatis -w man*

which
which PROGRAMA ...

indica la ruta completa de PROGRAMA, si ste est accesible a travs de la variable PATH..

who
who [OPCIONES] [am i]

Quin est en el sistema. Muestra nombre de login, lnea de terminal, hora de ingreso, nombre de mquina remota o display X.

am i -H

mquina y nombre de login del usuario invocante muestra encabezado de columnas

-u -w -m

tiempo inactivo; "old" es >24 horas; "." activo reciente si el usuario recibe (+) o no (-) mensajes igual que 'who am i'

whoami
whoami

Muestra identificador del usuario efectivo actual. Si se ha usado su para adoptar otro usuario, whoami muestra el nombre asociado con el usuario adoptado.

Tutorial
Emulador de Terminal Ingreso al sistema (login) Directorios Listado de archivos Manual de UNIX Contenido de un archivo Crear y borrar un archivo Correo electrnico de UNIX Usuarios en el sistema Talk Cambio de contrasea Fin de Sesin Otros Bibliografa y Referencias

Emulador de Terminal.
Para ingresar a un sistema UNIX remoto desde un PC se usa habitualmente un "emulador de terminal". Este programa permite al PC comportarse como una terminal (teclado y pantalla, sin procesador) conectada directamente a la mquina UNIX. En el emulador de terminal se deben fijar los siguientes parmetros:

Nombre descriptivo de la conexin a establecer (arbitrario). Nombre en la red de la mquina a la que se quiere conectar. Tipo de terminal que se emular (VT100 es el ms conocido). Conexin va TCP/IP, protocolo de comunicacin en la red.

Ingreso al sistema (login).


login: id-usuario password:

id-usuario es el nombre identificador del usuario para ingreso al sistema, proceso que se denomina "login". Este nombre de usuario suele tener hasta 8 caracteres (letras, nmeros y algunos smbolos), debe comenzar con minscula. UNIX distingue entre maysculas y minsculas. En el ingreso al sistema, no se permiten correcciones.

<mensaje del da>

se despliega siempre despus del login, es puesto por el administrador del sistema para informacin o bienvenida.

<noticias>

aviso de noticias nuevas. Las noticias se usan para informaciones generales de mayor tiempo de validez. Las noticias no aparecen ms despus de haber sido ledas. Para leer las noticias debe digitarse el comando news.

You have mail

indica que hay mensajes de otros usuarios, o del sistema. El correo electrnico permite a cualquier usuario enviar y recibir mensajes.

es el indicador de comandos del sistema; indica que el sistema est listo y aguarda una orden del operador, que debe ser escrita a continuacin de $ y finalizada con la tecla <Enter>.

En los siguientes ejemplos debe escribirse el comando tal cual se muestra, digitando la tecla <Enter> al final.
date

comando que muestra la fecha y hora.

who

muestra los nombres de usuarios conectados al sistema en este momento.


hostname

muestra el nombre de la mquina UNIX.

Directorios.
Cada usuario tiene un directorio propio, llamado a veces "directorio home". Cuando el usuario ingresa al sistema ya est ubicado en su directorio propio. El comando
pwd

muestra el directorio actual.


cd /home

cambia hacia el directorio /home, lo que puede verificarse con el comando pwd.
cd

sin parmetros devuelve al usuario a su directorio propio, desde cualquier lugar donde est. Este comando es til cuando se han hecho varios cambios de directorio y se quiere retornar a una situacin conocida, ubicndose en el directorio propio.

Listado de archivos.
Ensayemos el comando ls:
ls

lista archivos del directorio actual.


ls -l /bin

lista archivos en el directorio /bin; aqu se encuentran los archivos de comandos ejecutables del sistema. No cambia de directorio; el directorio actual sigue siendo el mismo.
ls -l

lista archivos en formato largo, dando detalles. El -l se llama opcin o bandera; se lee "menos ele". La salida obtenida consta de renglones parecidos a
-rw-rw-rw- 1 esteban users 138 Apr 5 19:34 leame

y se interpretan as:

indica el tipo de archivo de que se trata, con esta convencin:


- archivo comn, d directorio, l enlace o referencia a otro archivo.

rw-rw-rw

son los permisos del archivo;


r (read) permiso para leer el archivo w (write) permiso para modificar o eliminar el archivo x (execute) si se trata de un archivo, permiso para ejecutarlo como programa; si se trata de un directorio, permiso para ingresar en l y recorrerlo.

Los tres grupos de 3 caracteres indican permisos para el dueo del archivo (esteban), su grupo (users) y el resto del mundo.

cantidad de enlaces, referencias a este archivo desde otros archivos ubicados en diferentes lugares.
esteban

nombre del usuario dueo del archivo.


users

nombre del grupo al que pertenece el archivo


138

tamao en bytes del archivo. Si se trata de un directorio, este nmero es de control del sistema, sin interpretacin inmediata para el usuario.

Apr 5 19:34

fecha y hora de ltima modificacin. Si no aparece el ao, se asume el ao corriente.

leame

nombre del archivo. Notar que el nombre del archivo est siempre al final.

ls -a

muestra tambin archivos ocultos, normalmente no visibles en el listado. Los archivos cuyo nombre empieza con un punto son ocultos, en este sentido. Las entradas . y .. representan el directorio actual y el directorio padre, respectivamente.
ls -la

formato largo y archivos ocultos.


ls -la /var

listado de archivos visibles y ocultos en formato largo del directorio /var.

Manual de UNIX.
UNIX dispone de un manual en lnea o "pginas man" con informacin sobre comandos, archivos y otros elementos del sistema operativo. Aunque muy tcnicas y a veces difciles de comprender, son una referencia obligada para operar con solvencia.
man ls

muestra la pgina man del comando ls, paginada para poder leer una pantalla por vez. Para salir antes de terminar, digitar 'q'.
man man

muestra la pgina man del propio comando man.


man man > man.txt

redirecciona la salida y graba el contenido de la pgina man en el archivo man.txt, lo que se puede verificar con ls.

Contenido de un archivo.
cat man.txt

muestra el contenido del archivo. El archivo man.txt, por provenir de una pgina man, contiene muchos caracteres de control para regular su despliegue en pantalla. El comando cat no intrepreta estos caracteres de control. El comando cat permite tambin concatenar archivos, segn se ver.
head man.txt

muestra las primeras 10 lneas de un archivo.


tail man.txt

muestra las 10 lneas finales de un archivo.


cat man.txt | more

lee una nota larga paginando; la salida de cat es tomada por more, que presenta la informacin pgina por pgina. Para interrumpir el paginado de more, digitar 'q'. La tecla espaciadora avanza una pantalla, la combinacin de teclas Ctrl-B retrocede una pantalla.
more man.txt

presenta la informacin de man.txt ya paginada.


ls -l /etc | more

muestra el extenso contenido del directorio /etc paginando la salida.

Crear y borrar un archivo.


touch nota.vacia

crea el archivo nota.vacia, sin contenido alguno.


ls -l nota.vacia

muestra datos del archivo creado.


cat nota.vacia

no muestra nada, el archivo est vaco.

touch .archivo_oculto

crea un archivo vaco y oculto.


ls

no muestra el archivo oculto creado, pero


ls -a

s lo muestra.
ls -la

muestra datos en formato largo del archivo oculto.

rm nota.vacia

borra el archivo nota.vacia. Como muchos comandos de UNIX, su nombre deriva de palabras inglesas: rm proviene de "remove", eliminar o borrar.

rm -i man.txt

borrado interactivo, pide confirmacin antes de actuar.

rm .archivo_oculto ls -la

borra el archivo oculto y verifica listando los archivos del directorio.

echo Mensaje en pantalla

muestra en la pantalla la leyenda indicada.


echo Este es el archivo mensaje1 > mensaje1

direcciona la salida del comando echo y graba la leyenda en el archivo mensaje1.


ls -l mensaje1 cat mensaje1

muestra datos del archivo y verifica su contenido.


echo Esta lnea es agregada >> mensaje1 echo Esta es otra lnea agregada >> mensaje1 cat mensaje1

redirecciona la salida de echo para agregar dos lneas ms al archivo ya existente mensaje1. Verifica el contenido con cat.

Correo electrnico de UNIX.


Para leer el correo, digitar
mail

Este comando ingresa al usuario en el sistema de correo electrnico de UNIX. Revisa la casilla de entrada de mensajes mostrando la lista de recibidos. De ahora en adelante, slo se aceptan los comandos propios de mail. El indicador de comandos de mail es
&

Comandos disponibles dentro del sistema de correo:


d borra mensaje corriente, marcado con '>' ? muestra lista de comandos para manejo de mensajes

5 muestra el mensaje 5 h muestra la lista de mensajes h 3 muestra la lista de mensajes comenzando en el 3 q sale del programa de correo

Para enviar un correo al usuario juan, desde la lnea de comando de UNIX digitar
mail juan

Escribir entonces el texto del mensaje. Antes de llegar al fin de la pantalla, digitar <Enter> para que cambie al otro rengln. El comando mail no es un editor: no arregla las lneas ni permite corregir lneas anteriores. Al finalizar de escribir el mensaje, digitar
.

(un punto solo en una lnea) y dar <Enter>. Un punto solo en la lnea termina el mensaje y devuelve al usuario a la lnea de comandos de UNIX. El usuario puede probar el correo envindose un mensaje a s mismo y luego leyndolo.

mail juan esteban

enva mensaje al usuario juan y al usuario esteban.


mail -s "Mensaje de prueba" juan

enva un mensaje de prueba al usuario juan con el ttulo "Mensaje de prueba". Es de cortesa indicar siempre el tema del mensaje, para que el destinatario sepa inmediatamente de qu se trata.

Existen en UNIX muchos programas para manejo de correo, ms potentes y sofisticados; aqu nos limitamos a mail como ejemplo de un comando de UNIX ms bien artesanal, pero siempre presente y til para mensajera sencilla.

Usuarios en el sistema.
who

muestra los usuarios que estn actualmente en el sistema. Indica identificador de usuario, terminal en que est conectado, fecha y hora de ingreso al sistema.
who am i

da informacin sobre el usuario que est trabajando, indicando su mquina y nombre de usuario, terminal, fecha y hora.
whoami

presenta slo el nombre del usuario que est operando.


id

proporciona la identificacin del usuario invocante, dando el nombre de usuario y su nmero (UID), nombre de grupo primario y su nmero (GID), nombres de otros grupos a los cuales pertenece (si los hay) y sus nmeros.
id jperez

proporciona datos de identificacin del usuario indicado (jperez).


finger

proporciona nombre del usuario en el sistema, nombre en la vida real y otros datos del usuario invocante, indicando si est en este momento en el sistema, y si tiene correo por leer.
finger jperez

proporciona informacin sobre el usuario indicado.

Talk.
Talk es un programa que permite a dos usuarios en el sistema comunicarse escribiendo en el teclado. Al invocar talk la pantalla se divide en dos partes, cada una correspondiente a uno de los usuarios. Ambos pueden escribir simultneamente, y ambos ven la salida en su parte correspondiente de la pantalla.
talk usuario1

solicita apertura de una sesin de talk al usuario1, que debe responder con otro comando similar cuando recibe el pedido. Para terminar la sesin de talk, cualquiera de los usuarios puede digitar Ctrl-C. El comando mesg permite regular si se desea recibir mensajes o no. Para evitar recibir mensajes de talk es posible bloquear a otros usuarios el acceso a la terminal donde uno est trabajando; quienes intenten iniciar una sesin recibirn un mensaje indicando que la terminal destino no est habilitada para recibir mensajes.
mesg n

deshabilita recepcin de mensajes,


mesg y

habilita recepcin de mensajes. mesg muestra el estado: si responde "y" est habilitada la recepcin, si responde "n" se rechazan los pedidos de conexin.

Cambio de contrasea.
passwd

pide la vieja contrasea y luego la nueva; la nueva contrasea deber ingresarse dos veces, para evitar posibles errores de digitacin. En sistemas con servicio de informacin de red (NIS), el comando es
yppasswd

El administrador del sistema indicar cul de estos comandos debe usar.

Fin de sesin.
exit

termina la sesin con UNIX, vuelve a presentar el mensaje inicial


login:

habilitando a un nuevo usuario a ingresar al sistema. Las teclas <Ctrl-D> tambin terminan la sesin.

Otros.
Las teclas Ctrl-C interrumpen la ejecucin de un comando. Las teclas Ctrl-D indican un fin de ingreso; si se dan en el indicador de comandos, termina la sesin UNIX. En UNIX no hay un caracter reservado para fin de archivo; Ctrl-D simplemente indica la terminacin de un flujo de datos.

En UNIX, la tecla <Enter> coloca un caracter nueva lnea, que en ASCII es <Ctrl-J>; con la tecla <Enter> DOS o MS-Windows colocan dos caracteres al final de una lnea: un nueva lnea <Ctrl-J> y un retorno <Ctrl-M>. Al mirar un archivo creado en DOS o MS-Windows con algunos programas UNIX se pueden llegar a ver caracteres '^M' al final por esta razn.
Algunas terminales adminten un control instantneo de la salida, con las teclas
<Ctrl-S> <Ctrl-Q> detiene despliegue. contina despliegue.

En las mquinas UNIX, el terminal de la propia mquina UNIX se denomina "consola"; se usa preferentemente para administracin del sistema. Todas las teclas de control funcionan bien en la consola; el funcionamiento en los emuladores de terminal depende de la construccin del programa de emulacin.

ADMINISTRACION UNIX
Polticas, Procedimientos, tica.
Polticas Procedimientos Etica y actitud

Polticas.
En la administracin de sistemas, la inmensa mayora de los especialistas aconsejan disponer de una poltica administrativa escrita y firmada. En muchos casos, las instituciones legales y sociales se encuentran muy atrasadas respecto a las implicancias de las nuevas tecnologas de comunicacin, dejando vacos en aspectos tales como privacidad, derechos de autor, propagacin de mensajes obscenos u ofensivos, etc. Las polticas y procedimientos de una institucin deben consignarse por escrito, someterse a la aprobacin de la direccin y a la verificacin del departamento legal. Las polticas definen los criterios por los que se rige la institucin. La documentacin de polticas debe incluir: servicios de administracin brindados o excludos; derechos y responsabilidades de los usuarios; derechos y responsabilidades de los administradores (usuarios con privilegios); acceso a personas invitadas.

Procedimientos.
Los procedimientos describen, en forma de lista o receta, la forma en que se realizan las diferentes tareas. Son tiles tanto para los administradores nuevos como para los experientes. Entre sus mltiples ventajas, se destacan: las tareas se realizan siempre del mismo modo; se reducen las probabilidades de error; es ms rpido trabajar siguiendo una receta; los cambios quedan documentados en el propio procedimiento; existe un estndar de correctitud definido. Las redes basadas en UNIX han ido sustituyendo los mainframe (computadoras de gran porte) para aplicaciones de misin crtica en el mundo corporativo, alcanzando proporciones considerables. En estos lugares los procedimientos son creados por un nivel de administracin por encima de quienes los ejecutan; se organizan en un libro que se mantiene impreso y en lnea. Deben existir procedimientos para las siguientes tareas: agregar, eliminar, bloquear una cuenta de usuario; agregar una mquina;

localizar una mquina; instalar "TCP wrappers" para registro y control de accesos va TCP (telnet, ftp, finger); instalar respaldos para una mquina nueva; configurar la seguridad de una mquina nueva; prever el rearranque de piezas complejas de software; revivir un sitio web que no responde o no sirve las pginas; destrabar y rearrancar una impresora; actualizar el sistema operativo; instalar un paquete de software; instalar software desde la red; actualizar paquetes crticos de software (sendmail, gcc, named, etc.); respaldar y restaurar archivos; definir condiciones y alcance en bajadas de emergencia. Algunas polticas surgen de manera forzosa por el entorno; otras deben manejarse en forma centralizada, como ser los nmeros IP, nombres de mquinas, UIDs, GIDs, nombres de grupos y de usuarios. Las cuentas compartidas son un inconveniente para el cumplimiento de las polticas, ya que las responsabilidades se diluyen. Es preferible disponer de un esquema de asignacin de cuentas ms liberal, limitando en horario, tiempo de conexin u otros. Otros aspectos, que pueden trascender del grupo local de administradores, incluyen: manejo de las violaciones de seguridad; control de exportacin de sistemas de archivos; criterios de seleccin de contraseas; bloqueo de cuentas por incumplimientos; uso de material protegido por derechos de autor (MP3s, DVDs); piratera de software. En un lugar grande, la comunicacin y coordinacin entre los distintos grupos de administradores es esencial.

Etica y actitud.
El administrador de sistemas es una persona con poder: dispone de la contrasea de supervisor, puede leer el correo de los usuarios, borrar o alterar sus archivos, distorsionar intencional o accidentalmente el sistema hasta dejarlo inutilizable, producir prdida de datos, trabajo y respeto por los individuos y la institucin. La persona elegida para administrar un sistema debe tener firmes convicciones ticas. Alguien con tendencia a presumir de su condicin privilegiada debe ser invitado prontamente a cambiar de ocupacin. Las condiciones de un buen administrador son un tanto contradictorias: debe ser innovador en la bsqueda de soluciones, pero cuidar de no arriesgar el sistema; debe ayudar a los usuarios pero sin resentir la atencin comunitaria; debe ser amable, pero firme en los momentos crticos. En algunas organizaciones, los administradores de sistemas son vistos como gente capaz, trabajadora, bien paga, orientada a brindar servicio. En otras, se los trata como peones informticos tiles para todo. Los

administradores maltratados desarrollan una oposicin no formulada, una actitud de agresividad pasiva muy inconveniente para la organizacin. Las tareas de administracin crecen muy rpidamente: en cuanto los usuarios descubren a alguien capaz de resolver problemas, los pedidos proliferan. Si la persona tiene otras tareas asignadas, debe pensar a dnde le llevar su nuevo rol. Puede ser muy difcil convencer a la gerencia sobre el tiempo, recursos y riesgos de la operacin del sistema. Los registros escritos de tareas y tiempos pueden ser una ayuda invalorable para solicitar recursos, colaboradores, cambios de funcin... o un traslado a otra seccin. El trabajo de administracin de sistemas implica ms cambios de tarea, y con mayores consecuencias, en un slo da, de lo que muchos trabajos requieren en un ao. No debe sorprender que estas personas parezcan a veces distradas o descorteses.

El sistema de archivos
Concepto Rutas y nombres Montaje Organizacin Tipos de archivo Permisos de un archivo Propiedad de un archivo Inodos Ejercicios e Investigacin.

Concepto.
Es frecuente decir que en UNIX "todo es un archivo". Efectivamente, programadores y desarrolladores han encontrado conveniente colocar en el espacio de nombres de archivo entidades que no son propiamente archivos de datos: puertos seriales, controladores de dispositivos, canales de comunicacin entre procesos, porciones de memoria compartida son vistos como archivos de datos, y en muchos casos manejados con los mismos comandos. La ventaja de este enfoque reside, entre otras cosas, en la posibilidad de usar llamadas al sistema uniformes cualquiera sea el dispositivo de entrada salida referido. La redireccin de entrada o salida de comandos es un ejemplo de esta capacidad. Una extensin en otro sentido permite integrar a ese mismo espacio de nombres unidades de almacenamiento masivo ubicadas en otras mquinas accesibles a travs de una red. Tradicionalmente, el sistema de archivos es una abstraccin usada por el kernel para representar y organizar el almacenamiento de datos. Los dispositivos de almacenamiento masivo de datos pueden ser de diferentes tipos: discos fijos, disquetes, discos compactos. Los diferentes medios se integran en una estructura jerrquica nica. Esta estructura arranca en un directorio raz designado con / y se extiende hacia abajo en diversos niveles de subdirectorios. Las entidades no propiamente archivos se integran en esta estructura jerrquica con naturalidad.

Un sistema de archivos comprende todas estas cosas: un espacio de nombres: una forma de identificar entidades y organizarlas en una estructura jerrquica; una interfaz de programacin de aplicaciones (API, Application Programming Interface): un conjunto de llamadas al sistema para recorrer y manipular los nodos de la estructura jerrquica. Una API es un conjunto de rutinas contenidas en una biblioteca, un sistema operativo o un paquete de software, disponibles para los programadores de aplicaciones a travs de llamadas de funcin. un modelo de seguridad: una forma de proteger, esconder, compartir informacin con quienes deban disponer de ella, y solo con ellos. una implementacin: una forma de soportar el modelo lgico (los datos) sobre el medio fsico (los discos). Los sistemas operativos actuales soportan diferentes formas de implementacin de sistemas de archivos, ya sea para leer y grabar en formatos propios de otros sistemas de archivos (DOS, Windows, otros UNIX), como para acceder a diferentes medios (discos compactos). La expresin sistema de archivos puede referirse tanto a la estructura jerrquica completa como a cada una de las partes de implementacin homognea que lo componen. El rbol de directorios est formado por una o ms de estas partes homogneas. En el caso de los discos, un sistema de archivos es una particin sobre la cual se ha creado la estructura (el sistema de archivos) necesaria para contener los archivos de datos.

Rutas y nombres.
La sucesin de directorios atravesados hasta alcanzar un nombre de archivo se denomina ruta o va (path). Ejemplo: /home/alberto/documentos/carta01.txt. Una ruta es absoluta cuando arranca del directorio raz: /bin/elvis. El directorio donde est trabajando un usuario en el momento se denomina directorio actual. Una ruta es relativa cuando arranca del directorio actual: documentos/carta01.txt. No existen limitaciones para dar nombre a los archivos, salvo no usar el carcter / o caracteres nulos. Para usar espacios en blanco, los nombres deben encerrarse entre comillas, ya que el espacio en blanco acta como separador en los comandos.
touch "nuevo archivo"

crea un archivo del nombre indicado, con un espacio en blanco entre las dos palabras. Para realizar cualquier operacin sobre este archivo ser necesario usar las comillas, o escapar el carcter en blanco usando \:
rm "nuevo archivo" rm nuevo\ archivo

Ambos comandos borran el archivo.

Montaje.
Un sistema de archivos contiene un directorio principal, subdirectorios y archivos soportados en un rea de disco. Pueden adjuntarse otros sistemas de archivos al rbol de

directorios principal aplicando sobre un directorio del rbol principal el directorio superior del sistema de archivos que se adjunta. El punto del rbol principal donde se "cuelga" el sistema de archivos adjuntado se llama punto de montaje. Este artificio permite disponer de un rbol nico de directorios formado por partes en distintos soportes locales o remotos. El comando mount habilita la operacin de "colgar" un sistema de archivos a un directorio del rbol principal.
mount /dev/sda0 /usuarios

coloca el sistema de archivos almacenado en el disco /dev/sda0 bajo el directorio /usuarios; para ver el contenido del sistema de archivos en disco, en lo sucesivo se har
ls /usuarios.

Un sistema de archivos se desvincula del rbol principal con el comando umount:


umount /usuarios

desmonta el sistema de archivos anterior del directorio /usuarios, impidiendo el acceso a los archivos contenidos en el disco. Para poder ejecutar umount no debe haber archivos abiertos, ni usuarios en directorios de la rama a desmontar, ni procesos corriendo cuyos ejecutables residan en l. En la extensin semntica ya indicada, el trmino sistema de archivos se emplea as para designar la totalidad del rbol de directorios, formado en realidad por partes de diferente organizacin lgica y naturaleza fsica. La lista de archivos montados en un sistema UNIX figura en el archivo /etc/fstab, /etc/vfstab o /etc/checklist segn la variedad de UNIX. Esto permite realizar tareas sobre todos los sistemas de archivos, generalmente en el momento del arranque:
fsck -p

verifica la integridad de todos los sistemas de archivos segn figuran en /etc/fstab (o su equivalente);
mount -a

monta todos los sistemas de archivos en /etc/fstab (o su equivalente). Si el intento de desmontar un sistema de archivos fracasa por encontrarse ste ocupado, el comando fuser indicar los nmeros de proceso y los nombres de usuario que lo ocupan. En FreeBSD, fstat hace algo similar.

Organizacin.
A travs de las diferentes versiones de UNIX ha habido cierta confusin en cuanto a la organizacin en directorios de los sistemas de archivos. No obstante, existen criterios ms o menos uniformes en cuanto a la ubicacin de cada cosa. Es preferible respetar las ubicaciones clsicas para evitar reconfigurar las aplicaciones.

Tipos de archivos.
Archivos comunes (regular files). Un archivo comn es una secuencia de bytes. Su contenido puede ser cualquiera: texto, imgenes, binarios ejecutables. UNIX no asigna estructura alguna a los archivos comunes, aunque soporta acceso secuencial y aleatorio. No hay caracter reservado para fin de archivo.

Directorios. Un directorio es un continente para nombres de archivos de cualquier tipo. Las entradas . y .. designan el directorio actual y el directorio padre, respectivamente; son visibles con ls -a. Un directorio se crea con mkdir; se borra con rmdir si est vaco, y con rm -r si est lleno. Un directorio puede contener dos nombres diferentes apuntando a la misma rea de datos, creando la ilusin de haber dos archivos cuando en realidad son solo uno con dos entradas en el directorio. Este tipo de enlace se denomina enlace hard, enlace duro o hard link, para distinguirlo del enlace simblico explicado ms adelante.
ln arch1 arch1.ln2

crea un segundo nombre arch1.ln2 dirigido a la misma rea de datos del archivo arch1.
rm arch1

borra la entrada de directorio arch1, pero no el rea de datos. Esta permanece mientras exista alguna entrada de directorio que la referencie.
rm arch1.ln2

borra la entrada de directorio arch1.ln2 y el rea de datos, ya que sta era la ltima referencia a ella. Los "enlaces duros"solo actan dentro de un mismo sistema de archivos. UNIX mantiene un conteo de enlaces duros para no eliminar el archivo hasta que ha desaparecido el ltimo enlace a l. Este nmero es visible en la salida de ls -l, despus de los permisos. Los enlaces hard no pueden hacerse sobre directorios, ni sobre otros sistemas de archivos locales o remotos (no atraviesan "fronteras fsicas"). Archivos de dispositivos de bloque y de caracter. UNIX se comunica con el hardware y sus perifricos mediante mdulos especializados en su manejo llamados controladores de dispositivos (device drivers). Un controlador de dispositivo es visto en el sistema como un archivo; esto provee una interfaz normalizada. Para dirigirse a un dispositivo de hardware, el kernel solo debe referenciar el archivo controlador de dispositivo correspondiente. Los controladores de dispositivos son de caracter cuando realizan por s mismos el manejo de emblocamiento (buffering). Los dispositivos de bloque manejan porciones mayores de datos, dejando al kernel el manejo de emblocamiento. Los discos y cintas pueden ser manejados por los dos tipos de controlador; un mismo dispositivo fsico puede tener as ms de un controlador, operando de diferente forma segn se lo solicite a travs de un controlador u otro. Puede haber varias instancias de un mismo dispositivo. Los archivos de dispositivo se definen a travs de dos nmeros un "mayor" para indicar el tipo de dispositivo, y un "menor" para indicar la unidad fsica referida. Un terminal, por ejemplo, puede tener mayor 12; entonces, ttya se describir por 12 0, y ttyb por 12 1. Algunos dispositivos usan el menor para indicar caractersticas del dispositivo. Un archivo de dispositivo se crea con mknod y se elimina con rm. Suele existir un script llamado MAKEDEV, usualmente en /dev, para crear los archivos de dispositivo correspondientes para dispositivos comunes de hardware. Leer cuidadosamente este script antes de invocarlo; no hacerlo si no se entiende bien como trabaja.

Sockets de dominio (BSD). Los "sockets" o "enchufes" permiten la comunicacin entre procesos, muchas veces a travs de la red. Los sockets de dominio son propios de una mquina; se los referencia como objetos de un sistema de archivos y no como puertos de red. Los archivos "socket" slo pueden ser ledos o escritos por los procesos involucrados en la comunicacin, aunque son visibles como entradas de directorio. Los sockets de dominio se crean con la llamada al sistema socket(); se eliminan con rm, o con la llamada al sistema unlink() si ya no tienen usuarios. Interconexiones nominadas ("Named pipes"). Al igual que los sockets de dominio, las "interconexiones nominadas" ("named pipes") permiten la comunicacin entre procesos no relacionados corriendo en la misma mquina. Las interconexiones nominadas se crean con mknod y se borran con rm. Enlaces simblicos. Los enlaces simblicos ("symbolic links", "symlinks") es el nombre de un puntero hacia un archivo. El enlace simblico contiene la ruta hacia el archivo; existe como tal, independiente del archivo al que apunta. Puede referenciar archivos en otro sistema de archivos, o an archivos inexistentes. Los enlaces simblicos pueden formar lazos, referencindose mutuamente. Un enlace simblico se crea con ln -s y se borra con rm.
ln -s carta.txt /grupos/trabajos/carta12.txt

crea en /grupos/trabajos un pequeo archivo llamado carta12.txt que solo apunta al archivo carta.txt en el directorio actual.
rm carta.txt

borra el archivo carta.txt; el enlace simblico carta12.txt queda apuntando al vaco.


rm /grupos/trabajos/carta12.txt

borra el archivo enlace simblico. Pueden crearse enlaces simblicos con rutas relativas; esto permite trasladar los directorios superiores sin alteraciones:
ln -s ../../ufs /usr/include/bsd/sys/ufs

permite trasladar /usr/include sin afectar el enlace simblico. Cuando se cambia a un directorio que es un enlace simblico, el comando pwd indica el nombre de directorio del enlace, pero /bin/pwd indica el nombre del directorio real. Los enlaces simblicos pueden referirse a archivos en otros sistemas de archivos, o a directorios.

Propiedad de archivos.
Todos los archivos estn asignados a un dueo y un grupo. El dueo de un archivo es el usuario que lo crea; el grupo de un archivo es el grupo primario al cual pertenece el usuario que lo crea. El comando para modificar el dueo de un archivo es chown (change owner). El comando para modificar el grupo asignado a un archivo es chgrp.

Permisos de archivo.
Los permisos de un archivo se refieren a la posibilidad de leer, escribir y ejecutar el archivo. Existen 9 bits de permiso, ms 3 que afectan el modo de operacin de los programas ejecutables. Este conjunto de 12 bits es el modo del archivo. El tipo de

archivo, fijado al momento de su creacin, ocupa 4 bits ms, completando una palabra de 16 bits. Los bits de modo se modifican con chmod; los permisos se visualizan con ls -l. Setuid, setgid. Los valores octales 4000 y 2000 son los bits setuid y setgid. El bit setuid permite ejecutar el programa con el dueo del archivo como propietario del proceso; el bit setgid permite ejecutarlo con el grupo dueo del archivo como grupo propietario del proceso. En algunos sistemas el bit setgid se usa en directorios para fijar el grupo dueo igual al del directorio cuando se crea un nuevo archivo. Sticky bit. El valor octal 1000 es el "sticky bit". Originalmente indicaba procesos que deban permanecer en memoria; actualmente se usa en algunos sistemas para conferir a los directorios compartidos la propiedad de impedir borrar archivos a otros que no sean el dueo del directorio, el dueo del archivo o el superusuario. Bits de permiso. Se agrupan en conjuntos de tres bits, representando permisos de lectura, escritura y ejecucin. Existen tres grupos de 3 bits, con los respectivos permisos para el usuario, el grupo y otros. El significado de los permisos vara segn se trate de un archivo o un directorio:

Permiso Smbolo Binario Archivo ninguno lectura r 000 100 010 001 ninguno ver contenido modificar contenido, permisos ejecutar el archivo como programa

Directorio ninguno ver nombres de archivos y subdirectorios crear y eliminar archivos y subdirectorios en el directorio acceder al directorio (posicionarse en l o invocar programas)

escritura w ejecucin x

El uso del sistema octal permite codificar el grupo de permisos de 3 bits en un nico dgito octal para todas las combinaciones posibles de permisos:

Octal Binario Permisos 0 1 2 3 4 5 6 7 000 001 010 011 100 101 110 111
----x -w-wx r-r-x rwrwx

Los permisos que recibe efectivamente un usuario se definen por uno de los tres conjuntos de permisos: se verifica primero su condicin de dueo (permisos de usuario, primer conjunto de 3 bits): si el usuario es el dueo, recibe los permisos de dueo; si no lo es, se examina su condicin de integrante del grupo al que est asignado el archivo o directorio (permisos de grupo, segundo conjunto de 3 bits); si el usuario pertenece al grupo del archivo o directorio, recibe los permisos de grupo; si no es dueo ni pertenece al grupo, recibe los permisos de otros (tercer conjunto de 3 bits). El cambio de permisos se hace mediante el comando chmod. Este comando acepta tanto la notacin en octal como la notacin simblica mediante letras. Solo el dueo o el superusuario pueden cambiar permisos. Es posible fijar permisos por defecto para nuevos archivos o directorios al momento de su creacin, mediante el comando umask. Este comando acepta 3 dgitos octales que representan los permisos a quitar. El valor por defecto suele ser 022: plenos permisos al dueo, prohibe escritura a grupo y otros. No es posible imponer una umask a los usuarios: stos siempre pueden cambiarla. Es posible colocar una umask por defecto inicial, en los archivos de inicializacin del intrprete de comandos, por ejemplo .cshrc o .profile. Permisos recibidos por cada nuevo archivo o directorio segn el valor de umask:

Octal Binario Permisos 0 1 2 3 4 5 6 7 000 001 010 011 100 101 110 111 rwx rwr-x r--wx -w--x ---

Inodos.

Parte rwxr-xr-x 1 root

Indica tipo de archivo permisos de dueo, grupo y otros cantidad de enlaces hard dueo

El ncleo mantiene la bin grupo informacin de archivos en 279352 tamao en bytes estructuras llamadas inodos. Mar 31 La tabla de inodos se crea fecha cuando se crea el 1997 sistema de archivos; su tamao y /bin/bash ruta y nombre ubicacin en el disco son fijos. Los items de mayor inters contenidos en un inodo son cuenta de enlaces, dueo, grupo, modo, tamao, fecha de ltimo acceso, fecha de ltima modificacin, tipo de archivo. Estos datos se hacen visibles con el comando ls -l. Una lnea tpica de salida para este comando podra ser:
-rwxr-xr-x 1 root bin 279352 Mar 31 1997 /bin/bash

El primer caracter, para tipo de archivo, admite los siguientes significados:

Tipo de archivo archivo regular directorio dispositivo de caracteres dispositivo de bloques socket enlace simblico

Smbolo Creado por d c b s l editores, copia, comando touch


mkdir mknod mknod socket mknod ln -s

Eliminado por
rm rmdir, rm -r rm rm rm rm rm

interconexin nominada (named pipe) p

En los bits de permisos, si el setuid est puesto, la x del dueo aparece como s; si el setgid est puesto, la x del grupo aparece como s; si el "sticky bit" est puesto, la x de otros aparece como t; si en algn caso el permiso x est ausente, se muestran como S o T, respectivamente, indicando la anomala. La salida del comando ls -l difiere cuando se trata de archivos de dispositivo; en este caso se indican los nmeros mayor y menor en lugar del tamao:
crw-rw-rw- 1 root tty 3, 176 May 20 1996 /dev/ttya0

La salida de ls -l para un enlace simblico tiene este aspecto:


lrwxrwxrwx 1 root root 279352 4 Aug 22 17:52 /bin/sh -> bash

El dueo se cambia con el comando chown, y el grupo con chgrp.

Manejo de discos.
UNIX maneja el espacio en disco en bloques; segn los sistemas, un bloque tiene tpicamente 512 bytes o 1024 bytes. Un mismo disco puede contener varios sistemas de archivos, incluso de distinto tipo, pero un mismo sistema de archivos no puede abarcar varios discos. UNIX hace este hecho transparente al usuario: la jerarqua de directorios

se ve como algo homogneo. La confiabilidad del sistema aumenta si se definen sistemas de archivos diferentes para /, /var, /usr, /home, /export:. el agotamiento de espacio en un sistema de archivos diferente de / no produce un error fatal. Especialmente /home y /var son propensos a llenarse. Es parte de las tareas rutinarias de administracin gestionar el espacio en disco. El espacio libre en disco puede monitorarse por el comando df. Este comando muestra el espacio utilizado y libre en cada sistema de archivos. Para determinar el espacio utilizado por archivos o directorios, se dispone del comando du. El siguiente comando permite encontrar los archivos mayores que 200 bloques:
find / -size +200 -exec ls -l {} \;

La falla de un comando o aplicacin genera un archivo denominado core. Estos archivos pueden ser grandes. Denotan algn tipo de error en el sistema; su ubicacin puede dar una pista del origen, pero en general no son tiles para el usuario no especializado. El siguiente comando lista los archivos core en el sistema:
find / -name core -print El comando siguiente los busca y borra sin preguntar nada: find / -name core -exe rm {} \;

Los archivos en /tmp pueden acumular espacio. Este directorio se reserva para archivos temporales; un usuario o una aplicacin no puede asumir la permanencia de estos archivos. El administrador puede, en forma manual o automtica, borrar los archivos con ms de cierta antigedad. El siguiente comando encuentra los archivos de /tmp modificados hace ms de 10 das:
find /tmp -mtime +10 -print

Ejercicios e Investigacin.
1. Si su sistema dispone de algn programa de administracin de archivos; explore con l los primeros niveles del sistema de archivos. Los comandos ls y cd bastan a este propsito. 2. Determine la situacin de montajes en su sistema, usando mount. 3. Estudie los tipos de sistema de archivos que soporta su versin de UNIX, en particular con soporte sobre disquete. Realice el montaje de un disquete sobre el punto /mnt u otro; verifique que puede acceder a los archivos; luego desmonte el disquete. 4. Con el comando ln, experimente la creacin de enlaces hard y simblicos, verificando con ls las caractersticas del enlace (ls -ld directorio) y su contenido (ls -l directorio). 5. Experimente cambiar permisos con el comando chmod, tanto usando notacin numrica como simblica.

6. Verifique el valor por defecto de umask. Cambie el valor de umask; verifique creando archivos con touch. 7. Con los comandos ls y cd, explorar el directorio /dev o su equivalente, buscando visualizar caractersticas de archivos de dispositivo. 8. Determine si su sistema soporta uso de sticky bit: cree un directorio, active el sticky bit, verifique luego si otros usuarios pueden crear y borrar archivos en ese directorio. 9. Estudiar los comandos df y du, sus opciones y la forma en que dan la salida (bloques o Kb). 10. Determine en qu archivo guarda sus sistema la lista de sistemas de archivos a montar (/etc/fstab, /etc/vfstab, /etc/checklist, otro). Visualice el archivo con more. Compare la situacin de montajes con el contenido de ese archivo. Puede interpretar todos sus campos? Busque una pgina man sobre la estructura interna de este archivo.

Superusuario y usuarios especiales.


Control admnistrativo del sistema Propiedad en UNIX Propiedad de archivos Propiedad de procesos El Superusuario Contrasea de root Acceso a root Usuarios especiales Ejercicios e investigacin

Control administrativo del sistema.


Salvo en los sistemas operativos para uso personal (MS-DOS, Windows, Macintosh), en todos los sistemas operativos el control administrativo del sistema est fuera de las posibilidades de acceso de los usuarios comunes. En los sistemas UNIX, una cuenta de usuario especial llamado "superusuario" tiene los privilegios necesarios para realizar tareas tales como control de procesos, creacin de usuarios, agregado de dispositivos, fijar permisos de acceso a la informacin y toda otra tarea que implique cambios en el sistema.

Propiedad en UNIX.
En UNIX, los procesos y archivos tienen asociado un usuario como dueo. El dueo de un archivo es el usuario que lo crea. Un proceso es un programa en ejecucin; el dueo del proceso es el usuario que lo arranca. Los derechos del dueo sobre sus archivos y procesos slo pueden ser subrrogados por el superusuario. Tanto para archivos como para procesos existe tambin un grupo al que ese proceso o archivo pertenece. Un grupo es un conjunto de usuarios; un usuario puede pertenecer a varios grupos. Un archivo o proceso pertenece al grupo primario o grupo principal del usuario que crea el archivo o arranca el proceso. Propiedad de archivos. Todo archivo tiene un usuario propietario y un grupo propietario. El propietario de un archivo puede controlar los permisos de su archivo. Existe un juego de permisos de usuario para el propietario de un archivo.

Todo archivo tiene tambin un grupo propietario. Existe un juego de permisos de grupo para el grupo propietario de un archivo. Cualquier usuario miembro del grupo puede realizar sobre el archivo las operaciones permitidas por los permisos de grupo asignados a ese archivo. Existe tambin un juego de permisos de otros para usuarios en general, que no sean dueos del archivo ni pertenezcan al grupo del archivo. El propietario y grupo de un archivo aparecen en la salida larga del comando ls:
ls -l .

muestra dueo, grupo, permisos y otros datos de archivos en el directorio actual. UNIX reconoce internamente a los usuarios y grupos mediante nmeros. El nmero idenfiticador de usuario se llama UID. La equivalencia entre UID y nombre de usuario consta en el archivo /etc/passwd, donde figura tambin el grupo primario al que pertenece el usuario. El grupo primario es el grupo al que se asigna al usuario en el momento de su creacin. El grupo primario es nico para cada usuario. El nmero identificador de grupo se llama GID. La equivalencia entre GID y nombre de grupo consta en el archivo /etc/group, donde figuran tambin los integrantes de cada grupo secundario. Los grupos secundarios son otros grupos a los que puede pertenecer el usuario adems de su grupo primario. Un usuario puede pertenecer a varios grupos secundarios.
Propiedad de procesos. El kernel (ncleo) de UNIX asocia a cada proceso cuatro nmeros: UID real, UID efectivo, GID real y GID efectivo. UID y GID reales se usan para fines contables; UID y GID efectivos para determinar permisos de acceso. Generalmente los nmeros reales y efectivos son los mismos. No obstante, cuando un proceso ejecuta un nuevo programa haciendo uso de alguna de las llamadas al sistema de la familia exec, el nuevo proceso generado puede correr con UID y GID del archivo, eventualmente diferentes del UID y GID del usuario que invoc el proceso original.

Los bits setgid y setuid fijados en los archivos permiten correr procesos con los permisos del dueo y grupo del archivo, y no de quien los invoca. Un ejemplo es el comando passwd: para cambiar una contrasea se requiere permiso de superusuario:
ls -l /usr/bin/passwd

muestra los siguientes permisos


-rwsr-xr-x 1 root root 28896 jul 17 1998 /usr/bin/passwd

Por tener fijado setuid, el proceso passwd correr con permiso real del usuario que lo invoca, pero con permiso efectivo de supervisor.

El Superusuario.
La administracin del sistema requiere desconocer las medidas de proteccin de UNIX. Para ello existe una cuenta especial con UID 0, por convencin asociada a una cuenta de usuario de nombre "root". El nombre puede ser cualquiera; lo decisivo es el UID 0.

El superusuario puede realizar cualquier operacin posible sobre archivos y procesos; muchas llamadas al sistema slo pueden ser realizadas por el superusuario o tienen opciones especiales para el superusuario no disponibles para los usuarios comunes. Las llamadas al sistema son formas de solicitar servicios al kernel.
Ejemplos de operaciones restringidas al superusuario: Montar y desmontar sistemas de archivos. Cambiar el directorio raz de un proceso con chroot. Crear archivos de dispositivos. Fijar la hora del sistema Cambiar propiedad de archivos. Fijar lmites al uso de recursos; fijar prioridades de procesos. Fijar el nombre propio de la mquina donde reside el sistema. Configurar interfaces de red. Cerrar el sistema. Como ejemplo, el programa login, antes de recibir nombre y contrasea del usuario, corre como root; una vez que el usuario es reconocido, el proceso cambia su UID y GID a los del usuario y arranca el intrprete de comandos (shell) del usuario. Una vez que un proceso adquiere UID y GID de usuario comn no puede ya retornar a sus privilegios anteriores.

Contrasea de root.
En la contrasea de root reside toda la seguridad del sistema. Debe elegirse una contrasea difcil de adivinar o descubrir. Una buena contrasea debe tener al menos 8 caracteres, mezclar letras con nmeros o smbolos, o combinar maysculas y minsculas. Sola recomendarse el uso de dos palabras al azar separadas por un smbolo como compromiso entre la seguridad y la memorizacin; actualmente este esquema no ofrece seguridad. La receta actual consiste en inventar una frase "de chocante sinsentido" fcil de recordar para el usuario y armar la contrasea con las primeras letras de cada palabra. Agregar algn nmero o carcter de puntuacin aumenta mucho la seguridad de este tipo de contraseas. Un ejemplo: "No Pagar Software En 2001" genera la contrasea "npse2k1", muy difcil de violar, aunque la

frase no es chocante ni sinsentido. Estas "cualidades" se recomiendan para facilitar el recuerdo de la frase. La contrasea de root debe cambiarse: al menos cada tres meses; cada vez que se retire alguien que la conoce; siempre que se sospeche una situacin de inseguridad. El olvido de la contrasea de root es un problema mayor: puede requerir ingresar al sistema va CD de instalacin o disquete de arranque. Esto implica, obviamente, bajar el sistema.

Acceso a root.
La forma ms inmediata de acceder a root es ingresar al sistema como el usuario root. Es mejor usar el comando su, que permite asumir la identidad de root luego de pedir contrasea, pero deja constancia del usuario que la asumi. Una buena medida de seguridad es deshabilitar el acceso directo a root desde todas las terminales excepto la consola. La forma segura de operar como root es ingresar al sistema como usuario comn, hacer su solo para realizar tareas administrativas, finalizando con exit enseguida de terminar, continuando la sesin como usuario comn. El comando su nombre_usuario permite asumir la identidad de cualquier usuario si se conoce su contrasea; si ya se es root no pide contrasea. El uso de su puede requerir pertenecer al grupo wheel, o estar limitado a ciertas terminales.

La sentencia sudo comando permite ejecutar el comando con privilegios de root, si el nombre del usuario figura en el archivo /etc/sudoers. Este archivo lista nombres de usuarios, comandos autorizados y mquinas donde pueden correrlos. Si estos datos validan, se pide al usuario su contrasea y el comando ejecuta con privilegios de supervisor.
# /etc/sudoers # # Alias para grupos de mquinas Host_Alias LABSOFT=pino,aromo,ceibo,acacia Host_Alias MEDIDAS=ombu,girasol,alamo # Alias para comandos de respaldo Cmd_Alias RESP=/usr/etc/dump, /usr/etc/restore # usuario, mquinas, comandos permitidos marcos LABSOFT=ALL,MEDIDAS=RESP edgard LABSOFT=/usr/local/bin/tcpdump mendez ALL=ALL

El archivo /etc/sudoers se modifica usando el comando visudo, capaz de validar la sintaxis antes de grabar los cambios. Los comandos ejecutados con sudo se registran va syslogd. Los comandos a ejecutar va sudo deben escribirse en /etc/sudoers con la ruta completa, para evitar una posible sustitucin fraudulenta. Ventajas de sudo: mejor contabilidad y registro; los operadores pueden trabajar sin privilegios ilimitados; la contrasea de root la conocen pocas personas; pueden revocarse privilegios sin cambiar contrasea de root; es ms rpido usar sudo que usar su o ingresar al sistema como root; existe una lista restringida de usuarios con privilegios; disminuye la probabilidad de dejar una sesin de root abierta; como depende de las mquinas, un slo archivo sirve para controlar el acceso en toda la red. Riesgos: la seguridad de un usuario puede comprometer la de root; sudo csh o sudo su evitan el registro de comandos; no deben habilitarse.

Usuarios especiales.
En UNIX existen cuentas de usuarios no humanos usadas por el sistema; suelen tener un asterisco * en el campo de la contrasea en el archivo /etc/passwd o /etc/shadow, lo que impide el ingreso por estas cuentas.

daemon: propietario de archivos y procesos propios del sistema operativo no privilegiados, que sera inseguro conceder a root. Con el mismo propsito existe un grupo daemon. bin: propietario de directorios de comandos y de muchos de los propios archivos de comandos. Actualmente existe la tendencia a dejar los archivos y directorios de comandos propiedad de root. sys: propietario de imgenes del kernel y la memoria, tales como /dev/kmem (espacio de direcciones del kernel), /dev/mem (memoria fsica del sistema), /dev/drum o /dev/swap (imagen del rea de intercambio del sistema). Los programas que acceden estos archivos lo hacen setuid a sys (corren con sys como dueo). nobody: UID -1 o -2; -1 puede aparecer como 32767, lo que confunde a los programas adduser cuando determinan el siguiente UID libre. En Linux la cuenta nobody tiene UID 65534. Este usuario sin privilegios es til para acceder archivos remotos va red usando NFS, el sistema de exportacin de archivos de UNIX, as como para correr otros comandos como finger donde sera riesgoso conceder privilegios an de usuario comn. Usuarios habilitados a hacer uso de algn servicio del sistema sin estar registrados en l, como en los servidores web, reciben la identidad nobody. La cuenta nobody no debe ser propietaria de ningn archivo.

Creacin de Usuarios
El archivo /etc/passwd El archivo /etc/shadow El archivo /etc/group Crear usuarios Edicin de archivos. Fijar contrasea inicial Directorio propio del usuario Copiar archivos de inicializacin Casilla de correo Editar /etc/group Informacin contable Tabla de usuarios y gua telefnica Fijar cuotas Verificar la nueva cuenta Eliminar usuarios Inhabilitar cuentas. Caducidad de contraseas. Pseudo-logins. Herramientas de administracin de usuarios Ejercicios e Investigacin. Bibliografa y referencias. La creacin y remocin de usuarios es una tarea de rutina en la administracin de sistemas. Suele ser realizada a travs de programas asistentes de administracin, usualmente de interface grfica, o a travs de scripts o guiones de comandos. Aqu se describen las tareas paso a paso en su realizacin manual. Finalmente se hace referencia a comandos existentes en algunos sistemas para facilitar y asegurar la ejecucin de estos procesos. El mantenimiento de usuarios es un tema de importancia para la seguridad del sistema; las cuentas poco usadas, o de contrasea trivial, son el blanco preferido de los violadores de sistemas.

Existen servicios especiales para el manejo de cuentas a nivel de red, simplificando la administracin y permitiendo el ingreso del usuario en cualquier mquina de la red.

Estas facilidades tienen sus propios problemas de seguridad; son un tema aparte; no se tratan aqu.

El archivo /etc/passwd.
El archivo /etc/passwd contiene la lista de usuarios en el sistema, una lnea por usuario. Es consultado cuando el usuario ingresa al sistema para determinar su UID; en muchos casos, contiene tambin la contrasea encriptada, aunque la tendencia actual es retener la contrasea encriptada en otro archivo, /etc/shadow, con permisos de acceso ms restringidos. En este ltimo caso, el proceso de login consulta ambos archivos, /etc/passwd y /etc/shadow.

Los campos de /etc/passwd y /etc/shadow estn separados por ":", al igual que la mayora de los archivos de configuracin en UNIX.
Ejemplo de entradas en /etc/passwd:
root:x:0:0::/root:/bin/bash bin:x:1:1:bin:/bin: ftp:x:404:1::/home/ftp:/bin/bash daemon:x:2:2:daemon:/sbin: adm:x:3:4:adm:/var/adm: lp:x:4:7:lp:/var/spool/lpd: mail:x:8:12:mail:/var/spool/mail: postmaster:x:14:12:postmaster:/var/spool/mail:/bin/bash news:x:9:13:news:/usr/lib/news: uucp:x:10:14:uucp:/var/spool/uucppublic: man:x:13:15:man:/usr/man: guest:x:405:100:guest:/dev/null:/dev/null nobody:x:65534:100:nobody:/dev/null: jperez:x:1000:100:Juan PEREZ,,,:/home/jperez:/bin/bash mmendez:x:1001:100:Mario MENDEZ,,,:/home/mmendez:/bin/bash gmartin:x:1002:100:Gerardo MARTIN,,,:/home/mmendez:/bin/bash

En su versin clsica, el archivo /etc/passwd contiene los siguientes campos:

nombre de login: nombre nico, no ms de 8 caracteres, sin signos de puntuacin; generalmente en minscula para compatibilidad con todos los agentes transporte de correo. Evitar nombres totalmente en maysculas, porque: el sistema asumir que el terminal no soporta minsculas y abrir una sesin totalmente en maysculas. El

nombre de login es un dato pblico; deben elegirse nombres que favorezcan el reconocimiento de los usuarios en la vida real. En el acceso a diferentes mquinas, es conveniente asignar a un mismo usuario el mismo nombre de login. Conviene asimismo evitar el uso del mismo nombre para usuarios diferentes en distintas mquinas; los agentes transporte de correo y los usuarios pueden caer en confusin. Tambin debe asegurarse no usar un nombre de login que sea a la vez un alias de correo para otro usuario. contrasea encriptada: la contrasea se encripta con un algoritmo llamado DES; debe ser fijada por el comando passwd (o yppasswd si se usa NIS), o copiar una contrasea ya encriptada de otra cuenta. Si este campo est en blanco, el acceso es sin contrasea; esto es una gran brecha de seguridad. Si se coloca un asterisco en este campo, la cuenta no puede accederse hasta que el supervisor asigne una contrasea (comando passwd, o yppasswd si se usa NIS). En sistemas que usan /etc/shadow, la contrasea se encuentra en este archivo y no en /etc/passwd. Los archivos /etc/passwd y /etc/shadow deben mantenerse consistentes; existen comandos que atienden esta situacin especficamente. nmero UID: nmero identificatorio del usuario, generalmente entre 0 y 32767 o 65535, segn se usen enteros con o sin signo. Muchos sistemas han pasado ya a nmeros de 32 bits. Debe ser nico en toda la red local. Los nmeros de 0 a 99 se reservan para usuarios no humanos; 0 para root, 1 para bin, 2 para daemon, etc. Debe evitarse la reutilizacin de nmeros de usuarios que han dejado la institucin, para evitar confusiones si han quedado archivos del usuario anterior en el sistema o al restaurar desde respaldo; recordar que los usuarios en el sistema son reconocidos por nmero y no por nombre. nmero GID por defecto: nmero identificatorio de grupo, tambin entre 0 y 32767 o 65535. Los nmeros bajos se reservan para grupos del sistema: 0 para el grupo root o wheel, 1 para el grupo daemon. Los grupos se definen en el archivo /etc/group. El nmero GID define el grupo de pertenencia de los archivos creados por el usuario, o de procesos iniciados por l. La pertenencia a grupo de un nuevo archivo es la del directorio donde se encuentra si ste directorio tiene fijado setgid. El uso de la opcin grpid en el comando mount tambin obliga a los archivos nuevos a tomar como grupo el del directorio donde son creados. El comando newgrp permite a un usuario cambiar su grupo primario hacia otro al cual tambin pertenezca; el comando sg permite ejecutar un comando como perteneciendo al grupo indicado en el propio comando. informacin de usuario (campo "GECOS"): histricamente usado para transferir trabajos en batch desde una mquina UNIX hacia un mainframe corriendo GECOS. Se usa ahora, sin una sintaxis fija, para contener informacin del usuario. El comando finger interpreta este campo como una lista separada por comas conteniendo: 1) nombre en la vida real, 2) edificio y nmero de oficina, 3) telfono interno, 4) telfono domiciliario. El comando chfn permite al usuario cambiar su informacin propia. directorio propio (home): cuando el usuario ingresa al sistema, es colocado en su directorio propio; si ste no existe, algunos sistemas impiden el ingreso; otros emiten un mensaje de error, aceptan el ingreso y colocan al usuario en el directorio raz. El directorio propio del usuario suele tener su mismo nombre de login; se ubica (o se monta) habitualmente bajo /home.

shell de login: al ingresar al sistema, el usuario dispone de un intrprete de comandos por defecto, generalmente /bin/sh o /bin/csh; tambin pueden ser /bin/bash, /bin/ksh, /bin/tcsh, u otros. El usuario puede cambiar su intrprete con el comando chsh, o a veces simplemente invocando el nuevo shell; el archivo /etc/shells contiene los intrpretes habilitados para eleccin de los usuarios con chsh. Al editar/etc/shells, en los nombres de invocacin de los shell debe figurar la va completa.

El archivo /etc/shadow.
El archivo /etc/passwd las contraseas encriptadas, una lnea por usuario; solo es visible al supervisor. Provee adems informacin relativa a cambio de contraseas y expiracin de la cuenta. Ejemplo de entradas en /etc/shadow:
root:1eklLr8RdBuao:10461:0::::: bin:*:9797:0::::: ftp:*:9797:0::::: daemon:*:9797:0::::: adm:*:9797:0::::: lp:*:9797:0::::: mail:*:9797:0::::: postmaster:*:9797:0::::: news:*:9797:0::::: uucp:*:9797:0::::: man:*:9797:0::::: guest:*:9797:0::::: nobody:*:9797:0::::: jperez:Uq54ay2A4F6MY:10461:0:99999:7::: mmendez:dp079LiquZhwo:10454:0:99999:7::: gmartin:Gr989KumerAdf:10231:0:99999:7:::

Contiene los siguientes campos:

nombre de login: el mismo nombre que en /etc/passwd; este nombre conecta las entradas en /etc/passwd y /etc/shadow. contrasea encriptada: bajo las mismas condiciones que en /etc/passswd; la contrasea encriptada es desplazada del /etc/passwd al /etc/shadow, dejando en /etc/passwd una x en este campo.

fecha de limo cambio de contrasea: registra la fecha en que el usuario cambi por ltima vez su contrasea. mnima cantidad de das entre cambios de contrasea: una vez cambiada una contrasea, el usuario no puede volver a cambiarla hasta que haya transcurrido esta cantidad de das como mnimo. No se recomienda fijar este valor; si ha habido una violacin de seguridad puede ser necesario cambiar la contrasea de inmediato, sin tener que esperar. mxima cantidad de das entre cambios de contrasea: obliga a los usuarios a cambiar su contrasea peridicamente. En Linux, este valor se suma al campo de inactividad antes de bloquear la cuenta. cantidad de das de adelanto para avisar expiracin de contrasea: avisa al usuario de la necesidad del cambio de contrasea, a partir de esta cantidad de das antes de la fecha lmite. cantidad de das de inactividad antes de expirar la cuenta: en Solaris, si pasa esta cantidad de das sin login del usuario se bloquea la cuenta; en Linux, son das de gracia despus del mximo sin cambiar contrasea y antes de bloquear la cuenta. fecha de expira de la contrasea: da contado a partir del 1-1-1970, en que la cuenta expirar. Si el campo est en blanco, la cuenta no expira nunca. Si ha transcurrido esta fecha, el campo debe ser repuesto por el administrador para rehabilitar la cuenta. banderas: reservado para usos futuros.

El archivo /etc/group.
El archivo /etc/group contiene los nombres de los grupos UNIX definidos en el sistema y una lista de sus miembros. Hay una lnea por cada grupo. Los campos estn separados por ":". Ejemplo de entradas en /etc/group:
root::0:root bin::1:root,bin,daemon daemon::2:root,bin,daemon sys::3:root,bin,adm adm::4:root,adm,daemon tty::5: disk::6:root,adm lp::7:lp mem::8: kmem::9:

wheel::10:root floppy::11:root mail::12:mail news::13:news uucp::14:uucp man::15:man usuarios::100:jperez,mmendez,gmartin nogroup::-2:

Cada lnea contiene:

nombre del grupo: algunos sistemas piden 8 caracteres o menos. contrasea encriptada: histrico, no se usa. El comando newgrp no cambia el grupo por defecto de un usuario si su nombre no est listado en el grupo al que quiere cambiar, an cuando este campo est en blanco (lo usual). nmero GID: nmero nico identificador del grupo. Para mantener coherencia en un sistema heterogneo es recomendable no usar como grupo por defecto de los usuarios un grupo del sistema o del proveedor (por ejemplo, users, o staff), sino un grupo creado por el administrador (por ejemplo, usuarios), ya que diferentes sistemas pueden asignar diferente GID a los mismos grupos del sistema. lista de integrantes: nombres de login de los integrantes del grupo separados por comas, sin blancos.

Crear usuarios.
Antes de abrir una cuenta a un nuevo usuario, ste debe fechar y firmar su conformidad con el documento descriptivo de poltica de uso del sistema local. La experiencia demuestra ser mucho ms difcil de conseguir una firma de conformidad despus de haber sido abierta y concedida la cuenta.

La creacin de usuarios se realiza en tres fases: dos para establecer el ambiente del usuario y una tercera para objetivos administrativos.
Requeridos: definir la cuenta del usuario, ingresndola en los archivos /etc/passwd y /etc/shadow; fijar una contrasea inicial; crear el directorio propio (home) del usuario. En beneficio del usuario:

copiar hacia el directorio personal del usuario archivos de inicializacin; fijar la casilla de correos del usuario y establecer alias de correo. Para administracin: agregar el usuario al archivo /etc/group; registrar informacin contable, si es necesario; ingresar al usuario en la base de datos global del sistema; ingresar informacin de contacto con el usuario (direccin, telfono); configurar cuotas de disco; verificar el establecimiento correcto de la cuenta. Edicin de archivos. Si estas herramientas existen en el sistema, la edicin de /etc/passwd debe hacerse con vipw, que bloquea el archivo para evitar interferencias si un usuario est cambiando su contrasea simultneamente. Con vipw -s se edita /etc/shadow. Se insiste en la necesidad absoluta de mantener coordinados los archivos /etc/shadow y /etc/passwd. La edicin de /etc/group se hace con vigr. Con vigr -s se edita /etc/shadow-group o /etc/gshadow, en caso de que exista un archivo shadow para grupos. Si el sistema provee scripts para crear, modificar o borrar usuarios, stos se ocupan de mantener la coherencia y bloquear los archivos antes de modificarlos. El siguiente anlisis de creacin manual de un usuario muestra el procedimiento subyacente en las herramientas habituales de adminstracin. Fijar contrasea inicial. El superusuario puede cambiar en cualquier momento la contrasea de cualquier usuario mediante el comando passwd nombre_usuario. Un usuario comn puede cambiar su propia contrasea digitando solamente passwd. El comando passwd suele exigir un mnimo de largo o uso de caracteres de puntuacin, nmeros, mezcla de maysculas y minsculas, para alcanzar un cierto nivel de inviolabilidad. No debe dejarse nunca una cuenta sin contrasea, especialmente en ambientes de red o con acceso a Internet. Crear directorio propio del usuario. La siguiente secuencia de comandos crea un directorio para el usuario jperez:
mkdir chown chgrp chmod /export/home/jperez jperez /export/home/jperez usuarios /export/home/jperez 700 /export/home/jperez

En ambientes menos restrictivos, los permisos de los directorios propios pueden ser 755, lo que permite a todos los usuarios del sistema ver los directorios personales. Los usuarios siempre pueden limitar el acceso sobre los subdirectorios contenidos en su directorio personal.
Copiar archivos de inicializacin. Algunos comandos y utilitarios admiten personalizacin colocando archivos en el directorio propio del usuario. Estos archivos generalmente empiezan con punto, lo que los hace

normalmente ocultos, y terminan con rc, por "run command". Siguen algunos ejemplos comunes:

Comando Archivo csh .login .cshrc .logout

Usos fija tipo de terminal, variables de ambiente, opciones para biff y mesg fija alias de comandos, rutas de bsqueda, valor de umask, cdpath para bsqueda de nombres de archivo; fija variables promtp, history, savehist imprime recordatorios, borra la pantalla fija tipo de terminal, variables de ambiente, opciones para biff y mesg; fija alias de comandos, rutas de bsqueda, valor de umask, cdpath para bsqueda de nombres de archivo, etc. opciones para el editor vi

sh

.profile

vi emacs mailx tin xrdb startx xdm

.exrc

.emacs_pro Opciones y asignacin de teclas para el editor emacs .mailrc .newsrc .Xdefaults .xinitrc .xsession aliases personales para correo, opciones para el lector de correo especifica grupos de inters para noticias fija configuracin de X11 (sistema de ventanas): tipos de letra, colores, etc. fija ambiente inicial para X11 fija ambiente inicial para X11

Suele haber un conjunto ya preparado de archivos de inicializacin, usualmente en /erc/skel; tambin pueden crearse, en /etc/skel o en /usr/local/lib/skel, editndolos para reflejar configuraciones tiles al usuario corriente. Se debe proveer un ambiente razonable para usuarios no calificados, sin "sobreproteccin": evitar cosas tales como crear alias de comandos para emular DOS, u obligar a uso interactivo en el borrado. La siguiente secuencia de comandos instala los archivos de inicializacin en el directorio propio del usuario:
cp /usr/local/lib/skel/.[a-zA-Z]* /export/home/jperez chmod 644 /export/home/.[a-zA-Z]* chown jperez /export/home/.[a-zA-Z]* chgrp usuarios /export/home/.[a-zA-Z]*

No es posible usar el comando


chown jperez /export/home/.*

ya que ello cambiara la propiedad del directorio padre, /export/home, dndosela al usuario jperez, debido a que el directorio padre ".." queda includo en ".*"; ste es un error comn y peligroso.

Casilla de correo. Es conveniente limitar la lectura de correo por parte de un usuario a una mquina nica, aquella en la cual habitualmente trabaja. Para ello, se crea en el archivo /etc/aliases una entrada que dirige el correo del usuario hacia una mquina especfica. Las lneas
jperez: jperez@alamo juanperez: jperez

redirigen el correo de jperez hacia la mquina alamo y fijan juanperez como alias de jperez. En ambientes de red suele resolverse este problema eligiendo una mquina como servidor de correo y montando el directorio /var/spool/mail de esta mquina va NFS en el /var/spool/mail de las restantes mquinas. Editar /etc/group. Si bien no es necesario asignar el usuario a su grupo por defecto en /etc/group, conviene igualmente hacerlo para tener actualizada la lista de integrantes del grupo. S debe editarse /etc/group para incluir al usuario en grupos secundarios. Algunos sistemas requieren que el usuario figure en el grupo wheel para poder hacer su. Informacin contable. Muchos sitios controlan o an facturan servicios informticos por uso. En estos casos, al crear un usuario debe registrarse la informacin pertinente, tal como nombre, nmero de cuenta, calendario de pago, direccin de cobro. Tabla de usuarios y gua telefnica. Es fcil crear una tabla de usuarios y nmeros telefnicos extrayendo la informacin del campo GECOS del archivo /etc/passwd, sobre todo si se tomaron en cuenta las recomendaciones para uso de comas en este campo. Esta tabla puede luego interrogarse con un script simple tal como:
#!/bin/sh # telefono: devuelve lnea con datos del usuario grep $1 /usr/local/pub/telefonos

que se invoca simplemente como


telefono jperez

y devuelve una lnea con los datos del usuario indicado en el parmetro. Fijar cuotas. Si en el sistema se utilizan cuotas para controlar el uso de disco, es preciso fijar la cuota para el nuevo usuario con el comando edquota. Este comando admite diversos parmetros para fijar lmites en el uso de disco, pero en la creacin de usuarios es ms frecuente usarlo en modo prototipo, copiando el perfil de cuota de algn usuario tomado como modelo: edquota -p usuario-modelonuevo-usuario Verificar la nueva cuenta. Para verificar la validez de la nueva cuenta, ingresar al sistema como el nuevo usuario y ejecutar los comandos
pwd ls -la para verificar la ubicacin inicial en el directorio propio y la existencia de los archivos de inicializacin.

El usuario debe ser notificado por algn medio seguro de su nombre de login y contrasea. Este momento es oportuno para entregarle documentacin descriptiva del sistema. Ya debe haber firmado su conformidad con el documento de recomendaciones de uso y comportamiento esperado; solo resta recordarle la necesidad de cambiar su contrasea en cuanto ingrese al sistema.

Eliminar usuarios.
Cuando un usuario abandona la institucin, su cuenta debe ser inmediatamente bloqueada. Se proceder luego a eliminar la cuenta de los archivos de contraseas y grupos, la casilla de correo, las referencias en la tabla de usuarios, listados telefnicos y otros, conservando los datos histricos que la institucin especifique. Los archivos podrn transferirse en propiedad a otro usuario o ser eliminados. En definitiva, todo rastro del nombre de login debe ser eliminado, pero debe recordarse la recomendacin de no reutilizar los nmeros UID. Una lista de control incluira: Fijar cuotas del usuario en 0, si se est usando cuotas; Eliminar al usuario de guas telefnicas, bases de datos o listas; Eliminar al usuario del archivo de aliases, o redirigir su correo a otra direccin; Eliminar el archivo de procesos diferidos (crontab) y trabajos pendientes con at. Eliminar procesos del usuario que se hallen an corriendo. Eliminar archivos temporales del usuario en /tmp y /var/tmp. Eliminar al usuario de los archivos passwd, shadow, group. Eliminar el directorio propio del usuario. Eliminar el archivo de distribucin de correo del usuario en /var/spool/mail.

Inhabilitar cuentas.
Cuando una cuenta debe ser temporalmente inhabilitada, por ejemplo por ausencia del titular, se sola colocar simplemente un asterisco en el lugar de la contrasea en /etc/passwd. En la era de las redes, esto no es suficiente; entonces, se sustituye el intrprete de comandos de login por un programa que imprime un mensaje indicando la inhabilitacin de la cuenta.

Caducidad de contraseas.
Los UNIX modernos disponen de una facilidad para obligar al usuario a cambiar su contrasea peridicamente. Esta prctica est un tanto cuestionada, ya que el usuario obligado a disponer de varias contraseas se ve fcilmente tentado hacia elecciones menos seguras. S se insiste o an obliga a los usuarios a cambiar su contrasea cuando han habido violaciones de seguridad o sospechas fundadas.

Pseudo logins.
Son cuentas de usuario que no corresponden a personas. Es el caso de bin y daemon. Es posible crear otras cuentas de pseudo login, como shutdown, halt, who; estas cuentas tienen como shell un programa que slo ejecuta el comando indicado.

Herramientas de administracin de usuarios.


useradd comando con opciones para agregar usuarios; modifica los archivos passwd y shadow coherentemente.

usermod comando con opciones para modificar diversos ajustes de una cuenta de usuario. userdel comando con opciones para eliminar un usuario. adduser es un script en Perl u otro lenguaje de scripting, ofrece opciones de men para facilitar el ingreso de datos y luego invoca el comando useradd con los parmetros ingresados. groupadd, groupmod, groupdel comandos con opciones para agregar, modificar o borrar un grupo del archivo de grupos; anlogos a sus contrapartidas para usuarios. Aunque tiles, estos comandos y scripts rara vez implementan todas las polticas de uso locales. Es aconsejable reescribir o adaptar los scripts adduser y rmuser para realizar va scripts todo el proceso de creacin y remocin de usuarios.

Ejercicios e investigacin.
1. Determine si su sistema dispone de herramientas de administracin para la creacin, modificacin y remocin de usuarios. Estudie la herramienta y prubela crticamente en todas sus posibilidades, asegurndose de su xito o anotando sus fallas o carencias.

2. Determine si su sistema usa el archivo shadow. Verifique si existen las herramientas vipw y vigr; estudie sus pginas man y prubelas con sumo cuidado, asegurando siempre el retorno a la situacin original y la coherencia entre /etc/passwd y /etc/shadow. 3. Construya un script para crear una lista de usuarios del sistema con sus datos personales que pueda actuar como listn telefnico. Construya luego un script que reciba como parmetro el nombre de usuario y responda con los datos personales adecuadamente presentados o con un mensaje que indique la inexistencia de tal usuario. Estudie la posibilidad de que esta lista se regenere automticamente. 4. Determine si en su institucin se respeta la "poltica de comas" para el campo GECOS de /etc/passwd. Verifique el comportamiento del comando finger en esta situacin. Evale la conveniencia de respetar o imponer dicha poltica. 5. Cree un usuario de prueba. Construya un script que emita un mensaje o realice alguna tarea sencilla. Asigne este script como shell por defecto en el usuario de prueba. Verifique los resultados.

Bibliografa y Referencias.
Comandos: vi (editor), passwd, yppasswd, newgrp, sg, chsh, chfn, useradd, userdel, usermod, adduser, groupadd, groupdel, groupmod, edquota, quot.

Archivos: /etc/passwd, /etc/shadow, /etc/group, /etc/shells.

Procesos.
Procesos Informacin almacenada por el kernel o IDentificadores Process ID (PID) Parent Process ID (PPID) UID y EUID GID y EGID o Informacin de ambiente Directorio actual Variables de ambiente globales. Variables de ambiente locales. Terminal de control. o Informacin de E/S o Espacio de direcciones virtual o Estado de un proceso Ciclo de vida de un proceso Threads Seales (signals) Prioridad de ejecucin y valor "nice" Supervisin de procesos o Averiguando qu pasa Comando ps (process status) Comando top Comando pstree Carga del sistema reportada por w o uptime Comando vmstat (virtual memory stats) o Tomando acciones Ejercicios e investigacin Bibliografa y Referencias

Procesos
Se le llama proceso en Unix a un programa en ejecucin y al objeto abstracto que crea el sistema operativo para manejar el acceso de ese programa a los recursos del sistema (memoria, CPU, dispositivos de E/S). Pueden coexistir varias instancias de un mismo programa ejecutando en forma simultnea. Cada una de ellas es un proceso diferente. Unix es un sistema multiproceso por tiempo compartido. A los ojos de un usuario en un

momento dado hay mltiples programas en ejecucin, cada uno de ellos avanzando en su tarea. Sin embargo en una mquina con un solo procesador hay en cada instante solamente un proceso ejecutando. Es el sistema operativo el que va rotando el uso del procesador a intervalos breves (alguna decena de milisegundos) entre los procesos definidos en el sistema de forma que se crea la ilusin que todos avanzan simultneamente. El administrador del sistema dispone de herramientas para supervisar el estado de los procesos y eventualmente tomar acciones para suspender o detener la ejecucin de un proceso o simplemente modificar su comportamiento.

Informacin almacenada por el kernel


Para cada proceso definido en el sistema, el kernel del sistema operativo almacena y mantiene al da varios tipos de informacin sobre el proceso. Esta informacin podemos ordenarla de la siguiente forma: * Informacin general. Identificadores de proceso, usuario y grupo * Ambiente (variables, directorio actual, etc.) * Informacin de E/S * Informacin de Estado * Espacio de direcciones del proceso. Areas de trabajo (cdigo ("text"), datos, stack)

IDentificadores
Process ID (PID)
Al crearse un nuevo proceso se le asigna un identificador de proceso nico. Este nmero debe utilizarse por el administrador para referirse a un proceso dado al ejecutar un comando. Los PID son asignados por el sistema a cada nuevo proceso en orden creciente comenzando desde cero. Si antes de un reboot del sistema se llega al nro. mximo, se vuelve a comenzar desde cero, salteando los procesos que an estn activos.

Parent Process ID (PPID)


La creacin de nuevos procesos en Unix se realiza por la va de duplicar un proceso existente invocando al comando fork(). Al proceso original se le llama "padre" y al nuevo proceso "hijo". El PPID de un proceso es el PID de su proceso padre. El mecanismo de creacin de nuevos procesos en Unix con el comando fork() se ve con ms detalle en el apartado "Ciclo de vida de un proceso".

UID y EUID
Normalmente estos dos identificadores coinciden pero hay excepciones. El User ID (UID) del proceso identifica al creador del proceso, esto es a la persona que lo lanz a correr. Este usuario y root son los nicos que pueden modificar al proceso. El UID se utiliza con fines de tarificacin o accounting. El sistema de accounting carga a la cuenta del usuario identificado por el UID del proceso por los recursos del sistema que el proceso utilice (tiempo de CPU, impresoras, terminales, etc.).

El Effective User ID (EUID) en cambio se utiliza para determinar si el proceso tiene permiso para acceder a archivos y otros recursos del sistema. La forma ms habitual de hacer que el EUID de un proceso sea el de un usuario diferente del que lanza a correr el programa es activando el flag setuid en el archivo del programa. Un ejemplo de esto son los comandos que permiten a un usuario modificar su password, en que se debe modificar el archivo passwd o equivalente del sistema sobre el cual el usuario obviamente no tiene permiso de escritura. Habitualmente ese comando es un archivo de root con setuid y el proceso corre con EUID de root.

GID y EGID
Es totalmente anlogo a los identificadores de usuario pero para grupos de usuarios. El GID se hereda del proceso padre. El EGID puede utilizarse igual que el EUID para controlar el acceso del proceso a archivos. En la mayora de los sabores actuales de Unix el proceso puede estar en varios grupos y se chequea contra toda la lista de grupos para definir si el proceso puede acceder o no a un recurso.

Informacin de ambiente
Directorio actual
El proceso mantiene actualizado cual es su directorio de trabajo.

Variables de ambiente globales.


Son heredadas por los procesos hijos.

Variables de ambiente locales.


Solamente existen en el proceso que las define.

Terminal de control.
En general los procesos estn asociados a una terminal de control. Esta terminal determina el valor por defecto de los archivos stdin, stdout y stderr del proceso. Una excepcin a esto son los procesos llamados daemons, que una vez lanzados se desvinculan de su terminal de control y siguen ejecutando inclusive despus de cerrada la sesin de usuario desde la cual se lanzaron a correr.

Informacin de E/S
El kernel mantiene descriptores de los archivos abiertos por el proceso. Estn siempre definidos los archivos de entrada, salida y error estndar (stdin, stdout y stderr). Por defecto estn asociados con el teclado y la pantalla del terminal de control del proceso pero pueden ser redireccionados a un archivo cualquiera. Todos los shells prevn un mecanismo para hacer este redireccionamiento en el momento de lanzar a correr un programa.

Espacio de direcciones virtual


En la mayora de los sistemas multiproceso como Unix, cada proceso tiene la ilusin de disponer para si el espacio de direcciones completo del procesador. En realidad el procesador ve un espacio de direcciones virtual. Este espacio est organizado en secciones para el cdigo (text), datos, stack y otras y generalmente est dividido en pginas. En un instante dado una pgina puede estar residiendo en la memoria fsica del procesador o puede estar almacenada en disco en un procedimiento llamado "swapping". El sistema operativo, con el auxilio del hardware, mantiene al da una tabla con el estado de cada pgina de memoria del proceso.

Estado de un proceso
Los estados bsicos en los que puede estar un proceso son los siguientes: * Durmiendo (asleep). En general a la espera de algn recurso compartido. * Listo para ejecutar (runnable). A la espera que le toque el turno en el uso de la CPU. * Ejecutando (running). Puede estar ejecutando en modo kernel o en modo usuario. A su vez el proceso (o partes del espacio de memoria virtual del proceso) puede estar cargado en memoria o "swapped" a disco.

Adems de estos estados bsicos un proceso puede estar detenido (stopped). En este caso se le prohibe ejecutar al proceso. Hay mecanismos para detener y rearrancar un proceso a travs de las seales STOP y CONT que veremos ms adelante. El estado stopped es el estado en que queda un proceso lanzado a correr desde un interprete de comandos (shell) cuando se presiona <Control-Z> o la tecla configurada como "suspend" en el terminal que estemos utilizando. Finalmente el otro estado en que a menudo un administrador encuentra a un proceso es el estado zombie o exiting. Un proceso en este estado est en proceso de terminacin. Este caso se discute ms en detalle en el apartado "Ciclo de vida de un proceso".

Ciclo de vida de un proceso


El mecanismo de creacin de un proceso en Unix es un poco peculiar. Un proceso se crea invocando a una funcin del sistema operativo llamada fork(). La funcin fork() crea una copia idntica del proceso que la invoca con excepcin de: * El nuevo proceso tiene un PID diferente * El PPID del nuevo proceso es el PID del proceso original * Se reinicia la informacin de tarificacin del proceso (uso de CPU, etc.) Al retorno de fork() se siguen ejecutando las siguientes sentencias del programa en

forma concurrente. Para distinguir entre los dos procesos la funcin fork() devuelve un cero al proceso hijo y el PID del nuevo proceso al proceso padre. Normalmente el proceso hijo lanza luego un nuevo programa ejecutando alguna variante de comando exec(). En el recuadro puede verse un ejemplo del uso de fork.
kidpid = fork() if (kidpid==0) { /* soy el hijo, p. ej. lanzo un nuevo prog. */ exec(...) } else{ /* soy el padre */ ... wait() /* espero exit() del hijo */ }

Si este es el mecanismo para crear un proceso, entonces quin lanza a correr el primer proceso? Luego del boot del sistema el kernel instala y deja corriendo un proceso llamado init con PID=1. Una de las funciones principales de init es lanzar mediante fork() intrpretes de comandos que a su vez lanzarn los scripts de inicializacin del sistema y los procesos de los usuarios. Adems de init el kernel lanza algunos procesos ms cuyo nombre y funcin vara en los diferentes sabores de Unix. A excepcin de estos procesos lanzados por el kernel al inicio, todos los dems son descendientes de init. Normalmente un proceso termina invocando a la funcin exit() pasando como parmetro un cdigo de salida o exit code. El destinatario de ese cdigo de salida es el proceso padre. El proceso padre puede esperar la terminacin de su proceso hijo invocando la funcin wait(). Esta funcin manda al padre a dormir hasta que el hijo ejecute su exit() y devuelve el exit code del proceso hijo. Cuando el proceso hijo termina antes que el padre, el kernel debe conservar el valor del exit code para pasarlo al padre cuando ejecute wait(). En esta situacin se dice que el proceso hijo est en el estado zombie. El kernel devuelve todas las reas de memoria solicitadas por el proceso pero debe mantener alguna informacin sobre el proceso (al menos su PID y el exit code). Cuando el proceso padre termina primero el kernel encarga a init la tarea de ejecutar el wait() necesario para terminar todo en forma ordenada. A menudo init falla en esta funcin y suelen quedar procesos en estado zombie hasta un nuevo reboot. Dado que un proceso zombie no consume recursos fuera de su PID, esto por lo general no provoca problemas.

Threads
Cambio de contexto entre procesos: * cdigo ("text") * datos * stack * tablas varias Varias secuencias de ejecucin (threads) pueden agruparse en un proceso y compartir algunos segmentos

Ventajas: * simplifica cambio de contexto y comunicacin * facilita el uso de mltiples procesadores Soportado por la mayora de los SO actuales (Digital Unix, DEC OSF/1, Solaris 2, AIX, HP-UX, SGI Irix, Linux) Posix standard Bibliotecas provistas por terceros

Seales (signals)
Las seales de Unix son un mecanismo para anunciar a un proceso que ha sucedido cierto evento que debe ser atendido. La lista de posibles seales a comunicar a los procesos est fija, con algunas variaciones de un sabor a otro de Unix. La recepcin de una seal en particular por parte de un proceso provoca que se ejecute una subrutina encargada de atenderla. A esa rutina se le llama el "manejador" de la seal (signal handler). Un proceso puede definir un manejador diferente para sus seales o dejar que el kernel tome las acciones predeterminadas para cada seal. Cuando un proceso define un manejador para cierta seal se dice que "captura" (catch) esa seal. Si se desea evitar que determinada seal sea recibida por un proceso se puede solicitar que dicha seal sea ignorada o bloqueada. Una seal ignorada simplemente se descarta sin ningn efecto posterior. Cuando alguien enva a cierto proceso una seal que est bloqueada la solicitud se mantiene encolada hasta que esa seal es explcitamente desbloqueada para ese proceso. Cuando la seal es desbloqueada la rutina de manejo de la seal es invocada una sola vez aunque la seal haya sido recibida ms de una vez mientras estaba bloqueada. Si bien un proceso tiene ciertas libertades para configurar como reacciona frente a una seal (capturando, bloqueando o ignorando la seal), el kernel se reserva ciertos derechos sobre algunas seales. As, las seales llamadas KILL y STOP no pueden ser capturadas, ni bloqueadas, ni ignoradas y la seal CONT no puede ser bloqueada. La seal KILL provoca la terminacin de un proceso. La seal STOP provoca la detencin del proceso que queda en el estado "stopped" hasta que alguien le enve la seal CONT. Una seal puede enviarse desde un programa utilizando llamadas al sistema operativo, o desde la lnea de comandos de un shell utilizando el comando kill. Al comando kill se le pasa como parmetro el nmero o nombre de la seal y el PID del proceso. El uso ms habitual del comando es para enviar una seal TERM o KILL para terminar un proceso, de ah su nombre. Para muchas de las seales la accin predeterminada consiste en terminar el proceso. En algunos casos se genera adems un core dump. Un core dump es un archivo con una imagen del estado del sistema que permite al desarrollador de un programa diagnosticar problemas con la ayuda de un debugger. Al usuario final de un programa esta imagen rara vez le sirve de ayuda. La lista de posibles seales puede obtenerse para cada sistema a travs del man del comando kill o de la funcin kill() del sistema operativo. En la tabla se listan las utilizadas ms a menudo por un administrador. ID Nombre 1 SIGHUP Uso habitual Usualmente para releer configuracin

9 SIGKILL El kernel destruye el proceso 15 SIGTERM Terminacin "elegante", en general termina envindose un KILLL a s mismo SIGSTOP El kernel pasa el proceso a stopped SIGCONT SIGUSR Definidas por el usuario o ms bien por quien program el proceso

Prioridad de ejecucin y valor "nice"


Cuando hay ms de un proceso en el estado "listo para ejecutar", el kernel le asigna el uso de la CPU al de mayor prioridad en ese momento. En el caso de Unix esta prioridad vara dinmicamente. Las diferentes versiones y sabores de Unix utilizan diferentes algoritmos de planificacin del uso de la CPU (algoritmos de scheduling), pero en todos los casos tienen caractersticas similares: - procuran ser justos con los diferentes procesos - procuran dar buena respuesta a programas interactivos Para eso los algoritmos consideran parmetros como cuanto uso de CPU ha hecho el proceso recientemente, si pasa mucho tiempo dormido a la espera de un evento de teclado (sera un proceso interactivo), etc.. El administrador del sistema o el usuario dueo de un proceso pueden influir en el algoritmo de scheduling a travs del llamado valor nice. Este es un nmero que se asigna a cada proceso e indica que tan "nice" es el proceso para con los dems. Este valor es considerado por el algoritmo de scheduling de manera que un proceso con valor nice alto estar en desventaja frente a otro con valor nice menor a la hora de decidir a quien asignar la CPU. Como ejemplo veamos el algoritmo utilizado por alguna versin de AIX: P = min + nice + (0.5 x recent) Donde P indica la prioridad dinmica (a menor P mayor prioridad) y recent es una medida de cuanto ha recibido la CPU el proceso recientemente. Recent se calcula de la siguiente forma: * Inicialmente vale 0 * Al final de cada time slice (aprox. 10 milisegundos) recent se incrementa en 1 para el proceso que est usando la CPU * Una vez por segundo se divide por dos el valor recent para todos los procesos Normalmente el valor nice se hereda del proceso padre. El dueo del proceso o el propio proceso pueden elevar su valor nice (menor prioridad). El superusuario puede modificar el valor nice de todos los procesos a gusto. En los sistemas "a la BSD" el valor del nmero nice puede variar entre -20 y +20, siendo por defecto 0. En System V en cambio los valores posibles van de 0 a 39, siendo 20 el valor por defecto. Se puede modificar el valor nice por defecto en el momento de lanzar un programa lanzndolo a correr con el comando nice, o posteriormente utilizando el comando renice.

Supervisin de procesos

Averiguando qu pasa
Comando ps (process status)
La herramienta bsica para diagnosticar problemas relacionados con procesos es el comando ps. Este comando genera un reporte de un rengln por cada proceso, brindando abundante informacin sobre cada uno. El comando ps en los dos sabores bsicos de Unix (BSD y System V) difiere en el nombre y funcin de los parmetros, en la informacin que brindan sobre cada proceso y en los criterios de ordenacin de los procesos. En ambos casos si ejecuto ps sin parmetros solamente se listar informacin bsica sobre los procesos que pertenecen a mi usuario. A travs del uso de parmetros adecuados puedo agregar ms columnas (ms informacin sobre cada proceso) o ms filas (ms procesos) al reporte. Un conjunto de parmetros que permite ver todos los procesos con un grado de detalle que en general es adecuado es: ps -uax (BSD) ps -elf (System V) Los campos de informacin ms importantes desplegados por ps para cada proceso son: * Usuario (USER) * Identificadores de proceso (PID, PPID) * Uso de recursos reciente y acumulado (%CPU, %MEM, TIME) * Estado del proceso (STAT, S) * comando invocado (COMMAND)

Comando top
El comando top actualiza un reporte similar al generado por ps a intervalos peridicos. Normalmente top ordena los procesos por uso de CPU en forma decreciente. Permite adems de manera amigable invocar los comandos kill y renice sobre el proceso.

Comando pstree
En algunos sistemas est disponible el comando pstree, que lista los procesos y sus descendientes en forma de rbol. Esto permite visualizar rpidamente los procesos que estn corriendo en el sistema.

Carga del sistema reportada por w o uptime


Los comandos w (who) y uptime reportan tres nmeros que indican la carga promedio del sistema en un intervalo de 1, 5 y 15 minutos respectivamente. Ms precisamente el parmetro reportado es el promedio de la cantidad de procesos listos para correr. Este valor es un indicador rpido de la actividad del sistema y suele vigilarse para detectar sobrecargas en el mismo, o registrarse peridicamente para un anlisis posterior en caso de problemas. La relacin entre este nmero y que tan "pesado" se vuelve el sistema para los usuarios vara fuertemente dependiendo de las caractersticas del sistema (de la cantidad de procesadores p. ej.) y de los procesos que se estn ejecutando.

Comando vmstat (virtual memory stats)


El comando vmstat reporta varias estadsticas que mantiene el kernel sobre los procesos, la memoria y otros recursos del sistema. Se puede tomar una instantnea de esas estadsticas o repetirlo cierta cantidad de veces a intervalos de algunos segundos. Alguna de la informacin reportada por vmstat es la siguiente: * Cantidad de procesos en diferentes estados (listo para correr, bloqueado, "swapeado" a disco. * Valores totales de memoria asignada a procesos y libre. * Estadsticas sobre paginado de memoria (page faults, paginas llevadas o tradas a disco, pginas liberadas) * Operaciones de disco * Uso de CPU reciente clasificado en inactivo, ejecutando en modo usuario y ejecutando en modo kernel

Tomando acciones
A menudo, por algn bug en el programa o por algn error de operacin, los procesos no terminan correctamente y es necesario terminarlos por algn mtodo ms violento. El procedimiento usual en estos casos es obtener el PID del proceso con la ayuda de ps y luego terminarlo con el comando kill. Ensearle a los usuarios a hacer estas operaciones con sus procesos colgados es una muy buena inversin de tiempo para un administrador de sistema. Tambin suele suceder que algn proceso quede fuera de control y comience a acaparar algn recurso del sistema (memoria, disco o CPU). Esto puede suceder por un error de programacin, por un error de configuracin, por intentar correr algn proceso que necesita ms recursos que los disponibles o directamente por mala intencin. Sea cual sea el caso se hace necesario que el dueo del proceso o el administrador del sistema tomen medidas para frenar o terminar a ese proceso. En general el primer sntoma es "el sistema est muy pesado" (o el telfono sonando con reclamos de los usuarios). El primer paso ser identificar a el o los procesos problemticos utilizando las herramientas ya vistas. Si la situacin es tan grave que dificulta la operacin del administrador, puede ser recomendable lanzar un shell de root con prioridad alta utilizando el comando nice. Si no est claro por qu el proceso puede estar acaparando recursos se puede intentar detenerlo con la seal STOP hasta ubicar al usuario dueo del proceso. Una vez ubicado al usuario si se considera necesario que el proceso contine se le puede bajar la prioridad de ejecucin con el comando renice. Las siguientes opciones son o bien pedirle al proceso que tenga a bien terminar con la seal TERM (kill -15 PID) o bien terminarlo por la fuerza con la seal KILL (kill -9 PID)

Ejercicios e investigacin
* Use el comando ps y analice la informacin obtenida. Experimente las diferentes opciones de ps en su sistema. * Experimente el comando kill. Ejecute comandos en background para tener "materia prima" con qu jugar. Utilice ps junto con grep para averiguar el PID

* Consulte el man para saber como reacciona algn proceso daemon (p. Ej. named) frente a diferentes signals

Bibliografa y Referencias
* man page de: * ps, top, kill, nice, renice, vmstat * Nemeth, "UNIX System Administration Handbook", cap 5. El libro rojo/violeta * Frisch, "Essential Unix Administration", cap. 7. El libro "de la mulita"

Syslog y Archivos de registro de eventos.


Syslog y Archivos de registro de eventos o Rotacin de archivos de log o Dnde estn los logfiles? o Algunos archivos importantes wtmp y el comando who messages o Syslog El daemon syslogd Configuracin de syslogd Limitaciones y depuracin de errores Ejercicios e Investigacin Referencias y Bibliografa

Syslog y Archivos de registro de eventos


Tanto el propio kernel del sistema operativo como los servicios de red o aplicaciones que estn corriendo en forma permanente en un sistema Unix mantienen archivos de registro de eventos (logfiles) para reportar sucesos relevantes. Estos registros son de gran utilidad para determinar a posteriori qu ha sucedido en un sistema en caso de un malfuncionamiento y para detectar en forma temprana eventuales fallas en el sistema. Forma parte de las tareas del administrador revisar peridicamente estos logs. Una particularidad comn a todos los archivos de registro de eventos es que crecen, lo que obliga a definir alguna poltica para el manejo de estos archivos para evitar que llenen el espacio en disco. La poltica a seguir puede variar de acuerdo al esfuerzo de administracin y la importancia que la organizacin preste a temas como la seguridad. Las polticas ms comunes son:
No almacenar Resetearlos peridicamente Rotarlos, manteniendo datos por un perodo fijo de tiempo hacia atrs Archivar en cinta u otro medio de respaldo toda la historia

El primer mtodo no es para nada recomendable dado que los logs son una de las principales herramientas para determinar la causa de un malfuncionamiento y para detectar algn acceso no autorizado al sistema. La poltica de borrar los archivos de log cada vez que toman un tamao que los hace molestos, si bien en la mayora de los casos nos permite disponer de informacin, no nos garantiza disponer de los registros de un tiempo hacia atrs. Por otra parte si el tamao de los logs crece excesivamente puede hacerse inmanejable extraer de ellos informacin o incluso pueden llegar a llenar el disco.

Rotacin de archivos de log


La prctica ms usual consiste en ir "rotando" los nombres de archivo diariamente o semanalmente, de manera de ir descartando los archivos ms antiguos y mantener informacin de una cantidad fija de das anteriores. Un ejemplo elemental de un script que se podra lanzar desde cron para realizar esto es el que sigue:
#!/bin/sh cd /var/log rm logfile.3 mv logfile.2 logfile.3 ... mv logfile logfile.0 cat /dev/null > logfile

La mayora de los sistemas Unix traen instalado alguna variante de un script como el de arriba para ser ejecutados desde el cron. Como habitualmente se utilizan para rotar los registros de eventos de syslog, el administrador de registros de eventos que estudiamos ms adelante en este documento, los scripts de este tipo suelen llevar por nombre newsyslog. Una versin ms compleja de este script es el comando newsyslog de FreeBSD o el comando logrotate de algunas versiones de Linux. Se describe a continuacin newsyslog, logrotate tiene prestaciones similares. Esta versin "potenciada" de newsyslog es lanzada peridicamente con cron y lee de un archivo de configuracin (/etc/newsyslog.conf) cules son los archivos que debe rotar. Para cada familia de archivos se configura si la rotacin se realiza cada un lapso fijo o cuando el archivo de log alcanza un determinado tamao. Un archivo no termina de desaparecer hasta que se cierran todas las referencias a l desde los procesos que estn corriendo. Si un programa abre el archivo de log al inicio y luego lo mantiene abierto, aunque borremos el archivo, la referencia que mantiene el programa sigue apuntando al antiguo archivo que ya no existe. Para instalar un nuevo logfile, dependiendo del programa, puede ser necesario enviarle algn signal en particular o matar al programa y volverlo a arrancar para lograr que el programa comience a escribir en el nuevo archivo de log (por ej. para syslogd es necesario hacer kill -1 pid). Algunos programas necesitan que el archivo al cual escriben est previamente creado. El comando newsyslog descripto anteriormente permite especificar un nombre de archivo del cual tomar un Process ID para enviar un kill -1 a ese proceso para que reabra los archivos de log luego de la rotacin. A menudo los archivos de log ms antiguos son poco consultados por lo que pueden comprimirse para ahorrar espacio en disco. Los programas de compresin ms comunmente

utilizados son compress y gzip. Un ejemplo tpico puede ser rotar los archivos diariamente, manteniendo los dos das anteriores sin comprimir y los siguientes comprimidos con gzip hasta completar una semana. Por motivos de auditora o seguridad algunas organizaciones optan por no destruir la informacin de los logs antiguos. En esos casos en general los archivos de cierta antigedad se almacenan en algn medio removible (cinta o CD) y se archivan por la eventualidad de que sean requeridos ms adelante.

Dnde estn los logfiles?


Dado que no existe un lugar fijo en el cual se creen los archivos de log, enfrentados a un sistema Unix que no conocemos no siempre es sencillo encontrarlos. Se enumeran a continuacin las situaciones ms frecuentes. Una buena parte de los programas manejan sus logs utilizando syslogd. A otros programas se les especifica con parmetros en la lnea de comando donde dejar los logs que generen durante su funcionamiento. En otros casos esto es una opcin de compilacin. Algunos sistemas como OSF/1 y AIX almacenan los errores del sistema en archivos binarios y proveen alguna herramienta para listarlos (comando uerf en OSF/1). En general estos comandos aceptan alguna opcin para filtrar u ordenar los mensajes con algn criterio. Cmo averiguar dnde estn los logs entonces?
en el archivo /etc/syslog.conf para ver donde se almacenan los mensajes reportados a syslogd. en los scripts de arranque para ver cmo son invocados los daemons que almacenan directamente los mensajes en archivos propios. en el man de los programas para ver donde almacenan los logs cuando no es esto una opcin de lnea de comando. Algunos de los lugares ms usuales son: /var/log /var/adm o /usr/adm /var/<nombre_de_daemon>/log /var/spool/<nombre_de_daemon>/log

Algunos archivos importantes


wtmp y el comando who
Para cada usuario del sistema Unix mantiene un registro en los archivos utmp y lastlog que indica entre otra informacin si est logueado en el sistema o no, y en caso

afirmativo en cul terminal y desde que fecha/hora. Estos archivos son actualizados en cada login y logout y consultados por ejemplo por los comandos w, who y lastlog. En cada login y logout adems de actualizarse el registro del usuario en el archivo utmp, se hace un append del mismo en un archivo llamado wtmp. Este archivo entonces es un registro histrico de los login y logout al sistema. Va creciendo con cada login y logout por lo que debe ser administrado con alguna de las polticas vistas. El archivo est en formato binario, pero puede observarse con el comando who. Este comando por defecto despliega los usuarios logueados al sistema consultando al archivo utmp, pero se le puede pasar como parmetro el nombre del archivo wtmp y en ese caso nos va a listar la secuencia de login y logout. La ubicacin de estos archivos vara de un sisetma a otro. El archivo utmp habitualmente est en el directorio /etc o /var/run, el archivo wtmp suele estar en /var/log o /var/adm. Si bien tienen algunas similitudes con los archivos de log, debe evitarse manipular los archivos utmp y lastlog. El archivo lastlog est indexado por UID. Si en la asignacin de UIDs a los usuarios del sistema se saltea algn intervalo, pueden quedar "huecos" en el archivo que nunca son escritos y a los que nunca se les llega a asignar sectores del disco. Algunos programas (ls -l) reportan el tamao completo del archivo, otros comandos (du) reportan solamente el tamao efectivamente utilizado por clusters asignados. Un problema que puede aparecer es que al copiar un archivo con huecos se le asigne lugar en disco para los registros correspondientes a los UID que no existen. Esto puede hacer que el archivo destino de la copia sea mucho mayor que lo esperado, eventualmente llenando el disco.

messages
Por lo general la mayora de los mensajes procesados por el daemon syslog que se ve ms adelante se almacenan en un archivo llamado messages, de modo que este archivo es uno de los primeros lugares a los que recurrir en busca de informacin cuando se ha detectado un problema.

Syslog
El syslog es un sistema que procura centralizar (y en buena medida lo logra) el manejo de los registros de eventos que generan los diversos programas que corren en una mquina Unix. Por un lado facilita a los desarrolladores de aplicaciones la generacin y el manejo de mensajes a registrar, y por otro lado facilita a los administradores de sistema el manejo en forma centralizada de los mensajes provenientes de diferentes aplicaciones. Permite, clasificando los mensajes por origen e importancia, enviarlos a diferentes destinos como archivos, a la terminal de un operador, o eventualmente a un comando que lo reenve a direcciones de correo electrnico o pagers. El syslog tiene adems capacidad para manejar mensajes originados en diferentes computadores en una red. Los componentes ms importantes de syslog son:
syslogd: el daemon que recibe los mensajes y los almacena de acuerdo a la configuracin almacenada en el archivo /etc/syslog.conf

openlog(), syslog() y closelog(): rutinas de la biblioteca C estndar para comunicarse con syslog desde un programa. logger: comando de usuario para agregar un mensaje a un log

El daemon syslogd
El daemon syslogd es uno de los primeros que se lanza a correr en los scripts de arranque del sistema. Una vez arrancado queda esperando recibir mensajes para procesarlos de acuerdo a la configuracin en /etc/syslog.conf. Syslogd reponde a la signal 1 (HUP) cerrando los logs, releyendo la configuracin y reiniciando la operacin. Es por eso que si realizamos algn cambio en la configuracin, o si rotamos o movemos los archivos de log, es necesario enviarle una seal HUP a syslogd. Para facilitar esto syslogd guarda al arrancar en un archivo de nombre predeterminado (/etc/syslog.pid) el PID que le toc en suerte, de manera que el siguiente comando rearranca a syslogd:
kill -1 `/bin/cat /etc/syslog.pid`

Configuracin de syslogd

La configuracin de syslogd se hace a travs del archivo de texto /etc/syslogd.conf. A travs de este archivo se especifica hacia dnde se deben enrutar los diferentes mensajes. Se pueden dejar lneas en blanco o comentar lneas enteras con el carcter "#" como primer carcter no blanco. Cada lnea tiene el siguiente formato: selector <Tab> action La accin especificada se aplicar a todos los mensajes que verifiquen las condiciones que se especifican con el selector. En algunos sistemas solamente puede utilizarse tabuladores como separador entre el selector y la accin, generndose un error muy difcil de descubrir si al editar el archivo syslog.conf se insertan espacios en lugar de tabuladores. El selector se especifica como un par facility.level. Cuando un programa enva un mensaje al syslog, lo hace especificando un valor de "facility" y un valor de "level". El campo facility procura identificar al programa que origin el mensaje, mientras que el campo level busca clasificar el nivel de importancia o severidad del mismo. Los valores posibles de facility estn prefijados en cada sistema. Bsicamente permiten identificar mensajes del kernel, de varios de los deaemons y servicios de mayor prosapia en Unix (mail, daemon, lpr, news, uucp, cron, syslog, ftp), mensajes que tienen que ver con seguridad y autenticacin de usuarios y una serie de valores que pueden ser usados con cierta libertad para diferentes aplicaciones (local0 a local7, user). Los valores posibles de level son en general 8 y van en orden de severidad creciente desde DEBUG hasta EMERG. La accin especificada se aplica a todos los mensajes del nivel especificado o mayor. Se puede combinar varios selectores en una lnea separndolos por el carcter punto y coma (";"). Se pueden especificar varias facilities para un mismo nivel separndolas con el carcter coma (","). La clave especial "*" puede utilizarse para especificar todos los niveles o todas las facilities (excepto la facility "mark"). La clave especial "none" en el campo level puede especificarse para excluir todos los

niveles de una cierta facility al combinar varios selectores. La facility "mark" recibe mensajes a intervalos de 20 minutos. Esto permite, en caso que el sistema se "cuelgue", determinar de manera bastante precisa la hora a la que sucedi el problema aunque esto haya sido a una hora de baja actividad en el syslog. La accin puede ser una de las siguientes:
guardar en un archivo. Es la accin ms habitual. El archivo debe estar creado de antemano. Se especifica simplemente escribiendo el nombre del archivo con su path completo. reenviar hacia el syslogd de otra mquina. Se especifica escribiendo @<nombre de mquina o direccin IP>. El nombre de la mquina origen se agrega al comienzo del mensaje junto con el timestamp, pero solamente se conserva por un salto. En el syslog original el nombre de la mquina que gener el mensaje no interviene en el selector, de manera que no es posible desencadenar diferentes acciones segn la mquina que origin el mensaje. Esto ltimo se ha modificado en versiones ms nuevas de syslog. reenviar a la terminal de un usuario si es que est logueado. Se puede especificar una lista de usuarios separados por el carcter coma (",") o un carcter "*" para especificar todos los usuarios logueados. en algunos sistemas es posible pasar el texto del mensaje como entrada estndar a un comando, escribiendo el comando precedido por el carcter pipe ("|"). Los siguientes ejemplos tomados del man de syslogd.conf ilustran la mayora de los casos.
# Log anything (except mail) of level info or higher. # Don't log private authentication messages! *.info;mail.none;authpriv.none /var/log/messages # Everybody gets emergency messages, plus log them on another # machine. *.emerg * *.emerg @arpa.berkeley.edu

El esquema descripto hasta ahora es estndar en la mayora de los syslog y permite con un esquema simple configurar el sistema para las necesidades de cada lugar. Para ello se utilizan en general los valores local0-7 de facility. Estos valores debern administrarse asignndolos a las diferentes fuentes de mensajes que no estn previstas en los daemons originales. Estos programas por lo general permiten configurar el valor de facility con el que etiquetan sus mensajes. As por ejemplo en un sitio podra asignarse el valor local0 a los mensajes del popper (consultas de casillas de correo electrnico con pop3) y el valor local1 para los mensajes de los routers de la red, dispositivos que por lo general no tienen disco y permiten ser configurados para enviar los mensajes al syslog de otra mquina. En un sistema grande puede llegar a agotarse los valores disponibles de facilities localx. Esto ha influido para que en nuevas versiones de syslog aparezcan extensiones que hagan ms flexible la especificacin de los selectores. En ese sentido algunas versiones de syslog identifican a la primera palabra en el texto del mensaje como el nombre del programa que lo origin, y permiten utilizar ese nombre de programa para seleccionar la accin a aplicar sobre el mensaje.

Para ello en el archivo syslog.conf se definen secciones especiales para cada programa que comienzan con una lnea de la forma #!programa o !programa. En los casos en que el syslog del sistema acepta estas extensiones hay que ser cuidadoso al agregar lneas al archivo syslog.conf para estar seguro que la lnea insertada no queda dentro del bloque definido para un programa en particular. Otra mejora introducida en nuevas versiones de syslog es que es posible agregar el modificador "=" al comienzo del nivel para especificar que el nivel de severidad sea igual estricto en lugar de mayor o igual al nivel especificado. En forma similar pueden usarse los modificadores "!" (diferente) y "-" (menor). Esto puede verse en el siguiente ejemplo:
# Log daemon messages at debug level only daemon.=debug /var/log/daemon.debug

Limitaciones y depuracin de errores

Luego de realizar alguna modificacin en el archivo syslog.conf y de enviar una seal HUP a syslogd para que relea la configuracin, debe testearse el funcionamiento enviando mensajes de test con el comando logger. Un error comn es olvidar enviar la seal HUP. Otro error bastante comn cuando la accin es guardar los mensajes en un archivo es no crear el archivo previamente. Si el archivo destino no est creado syslogd no lo crea. En la mayora de las implementaciones de sylog solamente se aceptan tabuladores como separador entre el selector y la accin. Algunas versiones ms nuevas permiten indistintamente espacios y tabuladores. Algunas versiones de syslog tienen limitado la cantidad de acciones a especificar en syslog.conf a un valor constante fijo NLOGS que usualmente era 20. En otras versiones hay una limitacin en la cantidad de usuarios a los que es posible reenviar los mensajes a la consola. Una herramienta bastante potente para depurar errores en la configuracin de syslog es ejecutarlo en modo debug con el flag -d (syslog -d). Ejecutado de este modo syslog despliega una tabla con una columna por cada facility y un rengln por cada accin. Los nmeros en la tabla indican a partir de cual nivel se aplica la accin para cada facility. En el ejemplo se muestran 4 acciones diferentes (desplegar en la consola, almacenar en el archivo /var/cron/log, reenviar a la mquina de nombre ohm, desplegar en el terminal en que est logueado el usuario root). En los sistemas que tienen limitado a NLOGS la cantidad de acciones, la tabla tiene NLOGS renglones y aparecen los ltimos con la accin UNUSED.
7 3 2 3 5 3 3 /dev/console X X X X X X X X X X X X X X 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 X X CONSOLE: X X 8 X X X X X X X X X X X X X X X FILE: /var/cron/log X X X X X X X X X X X X X X X X 8 X FORW: ohm 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 X USERS: root,

Cuando se ejecuta en modo debug syslogd no libera el terminal. Despus de desplegar la tabla con el resumen de acciones queda desplegando en pantalla cada mensaje que recibe y las acciones que se le aplican. Una precaucin a tener cuando se envan mensajes a la consola es que si alguien presiona la tecla de pausa del terminal (habitualmente <Control-S>), entonces cada intento de syslog de sacar un mensaje en consola queda bloquedo. Esto por lo general

produce el efecto de enlentecer violentamente el funcionamiento de la mquina, situacin que se revierte si desbloqueamos el terminal con <Control-Q>.

Ejercicios e Investigacin
Determine en su sistema donde estn los diferentes archivos de registro de eventos Averige quin y desde qu terminal trabajo en el sistema el da anterior Identifique que poltica de rotacin de archivos de tiene configurada su mquina (identifique el script peridico que se encarga de eso, si utiliza algn comando especial para eso (newsyslog p. ej.) lea el man de ese comando. Modifique /etc/syslog.conf para hacer que determinados mensajes se escriban tambin en la consola de su usuario. Prubelo usando el comando logger. Retorne luego a la configuracin inicial!!!

Referencias y Bibliografa
Nemeth, Evi, "UNIX System Administration Handbook", cap. 12 Comandos: who, wtmp, utmp, newsyslog, compress, gzip, syslogd, syslog.conf, logger.

Arranque y Detencin del Sistema. Estudio de caso: Linux Debian/GNU


Arranque y detencin "System V". Niveles de arranque: /etc/inittab. Algunos subdirectorios de /etc. Plantilla para script rc. Un script rc real: network. Bibliografa y Referencias.

Arranque y detencin "System V".


El esquema de arranque y detencin del sistema en Linux Debian/GNU es del tipo "system V". Todos los scripts que ejecutan tareas en el arranque o detencin del sistema se encuentran en el directorio /etc/init.d. Los directorios /etc/rcS.d, /etc/rc0.d, /etc/rc1.d, /etc/rc2.d y /etc/rc6.d corresponden a cada uno de los posibles niveles o estados de funcionamiento del sistema. Estos directorios slo contiene enlaces simblicos hacia los scripts en /etc/init.d. Los nombres de estos enlaces simblicos son significativos: la primera letra es S o K, luego sigue un nmero de 2 cifras, y finalmente el nombre de un script en /etc/init.d. Algunos ejemplos:
K18netbase S15netbase K20ppp S20exim K20exim S25nfs-server

Dentro de un directorio, los scripts K se ejecutan primero. La K (de "kill", matar) indica que el script correspondiente en /etc/init.d debe ejecutarse con la opcin de detencin, "stop". Luego de ejecutados todos los scripts K, se ejecutan los scripts S. La S (de "start", arrancar) indica que el script correspondiente en /etc/init.d debe ejecutarse con la opcin de arranque ("start"). El nmero de 2 dgitos regula el orden en que se ejecutan los distintos scripts; el nmero puede estar repetido, cuando importa la precedencia. Los distintos niveles en que puede funcionar el sistema se definen en el arthivo /etc/inittab.
Niveles de arranque: /etc/inittab. # /etc/inittab: init(8) configuration. # $Id: inittab,v 1.8 1998/05/10 10:37:50 miquels Exp $ # The default runlevel. id:2:initdefault: # Boot-time system configuration/initialization script. # This is run first except when booting in emergency (-b) mode. si::sysinit:/etc/init.d/rcS # What to do in single-user mode. ~~:S:wait:/sbin/sulogin # # # # # # # /etc/init.d executes the S and K scripts upon change of runlevel. Runlevel 0 is Runlevel 1 is Runlevels 2-5 Runlevel 6 is halt. single-user. are multi-user. reboot.

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 # Normally not reached, but fallthrough in case of emergency. z6:6:respawn:/sbin/sulogin # What to do when CTRL-ALT-DEL is pressed. ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now # Action on special keypress (ALT-UpArrow). kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work." # What to do when the power fails/returns. pf::powerwait:/etc/init.d/powerfail start pn::powerfailnow:/etc/init.d/powerfail now po::powerokwait:/etc/init.d/powerfail stop # /sbin/getty invocations for the runlevels. #

# The "id" field MUST be the same as the last # characters of the device (after "tty"). # # Format: # <id>:<runlevels>:<action>:<process> 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 # Example how to put a getty on a serial line (for a terminal) # #T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100 #T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100 # Example how to put a getty on a modem line. # #T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3

Algunos subdirectorios de /etc. init.d rc0.d rc1.d

rc2.d rc3.d

rc4.d rc5.d S40network S45mountnfs.sh S50hwclock.sh K20quota K25nfs-server K30netstd_misc K89atd K90sysklogd K20lprng K20ppp K20quota K25nfs-server S20ppp S20quota S25nfs-server S30netstd_misc K20quota K25nfs-server K30netstd_misc K89atd K90sysklogd

rc6.d rcS.d S55bootmisc.sh S55urandom S70nviboot S20sendsigs S25hwclock.sh S30urandom S40umountfs S90halt K30netstd_misc K89atd K90sysklogd S20single S89atd S89cron S99rmnologin S99xdm S20sendsigs S25hwclock.sh S30urandom S40umountfs S90reboot

Contenido de /etc/rcS.d: README S20modutils S05keymaps.sh S30checkfs.sh S10checkroot.sh S35mountall.sh S15isapnp S40hostname.sh Contenido de /etc/rc0.d: K01xdm K20gpm K11cron K20isdnutils K12kerneld K20logoutd K15netstd_init K20lprng K18netbase K20ppp K20exim Contenido de /etc/rc1.d: K01xdm K20exim K11cron K20gpm K12kerneld K20isdnutils K15netstd_init K20logoutd K18netbase Contenido de /etc/rc2.d: S10sysklogd S20gpm S12kerneld S20isdnutils S15netstd_init S20logoutd S18netbase S20lprng S20exim Contenido de /etc/rc6.d: K01xdm K20gpm K11cron K20isdnutils K12kerneld K20logoutd K15netstd_init K20lprng K18netbase K20ppp K20exim

Scripts en /etc/init.d: README hwclock.sh atd isapnp bootmisc.sh isdnutils checkfs.sh kerneld checkroot.sh keymaps.sh cron logoutd exim lprng gpm modutils halt mountall.sh hostname.sh mountnfs.sh

netbase netstd_init netstd_misc network nfs-server nviboot ppp quota rc rcS

reboot rmnologin sendsigs single skeleton sysklogd umountfs urandom xdm

Plantilla para script rc.


En la distribucin Debian se exige que todos los paquetes de software tengan un script rc con las opciones "start", "stop", "restart" y mensaje informativo de uso si no se dan opciones. Se provee una plantilla modelo para la creacin de estos scripts, a partir de la cual el responsable de cada paquete estructura el script rc, que residir en /etc/init.d, y con el cual se gobierna el paquete. #! /bin/sh
# # skeleton example file to build /etc/init.d/ scripts. # This file should be used to construct scripts for /etc/init.d. # # Written by Miquel van Smoorenburg <miquels@cistron.nl>. # Modified for Debian GNU/Linux # by Ian Murdock <imurdock@gnu.ai.mit.edu>. # # Version: @(#)skeleton 1.8 03-Mar-1998 miquels@cistron.nl # PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/sbin/daemon NAME=daemon DESC="some daemon" test -f $DAEMON || exit 0 set -e case "$1" in start) echo -n "Starting $DESC: " start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON echo "$NAME." ;; stop) echo -n "Stopping $DESC: " start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON echo "$NAME." ;; #reload) #

# If the daemon can reload its config files on the fly # for example by sending it SIGHUP, do it here. # # If the daemon responds to changes in its config file # directly anyway, make this a do-nothing entry. # # echo "Reloading $DESC configuration files." # start-stop-daemon --stop --signal 1 --quiet --pidfile \ # /var/run/$NAME.pid --exec $DAEMON #;; restart|force-reload) # # If the "reload" option is implemented, move the "forcereload" # option to the "reload" entry above. If not, "force-reload" is # just the same as "restart". # echo -n "Restarting $DESC: " start-stop-daemon --stop --quiet --pidfile \ /var/run/$NAME.pid --exec $DAEMON sleep 1 start-stop-daemon --start --quiet --pidfile \ /var/run/$NAME.pid --exec $DAEMON echo "$NAME." ;; *) N=/etc/init.d/$NAME # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2 echo "Usage: $N {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0

Un script rc real: network.


No todos los scripts rc requieren las opciones "start" y "stop"; algunos realizan tareas siempre requeridas para el funcionamiento del sistema. El script rc "network" inicializa la mquina para su entrada en la red
#! /bin/sh # # network # # Version: #

Establish the network connection. @(#)network 1.2 14-Nov-1996 miquels@cistron.nl

# Configure the loopback device. ifconfig lo 127.0.0.1 route add -net 127.0.0.0 dev lo # Configure the ethernet device IPADDR="192.168.1.1" NETMASK="255.255.255.0" NETWORK="192.168.1.0" BROADCAST="192.168.1.255" or start SLIP/PPP below. # Your IP address. # Your netmask. # Your network address. # Your broadcast address (blank if

none). GATEWAY=""

# Your gateway address.

/sbin/ifconfig eth0 ${IPADDR} netmask ${NETMASK} broadcast ${BROADCAST} /sbin/route add -net ${NETWORK} [ ! -z "$GATEWAY" ] && /sbin/route add default gw ${GATEWAY}

Bibliografa y Referencias.
Sistema instalado Linux Debian/GNU 2.1. Debian Policy Manual , http://www.debian.org/doc/debian-policy/ Pginas "Como" (HOWTO), en espaol, en el sitio web de Debian Argentina, http://www.debian.org.ar/. Una excelente fuente de informacin para mltiples aspectos de instalacin y configuracin, desde nivel elemental hasta nivel tcnico muy especializado.
Procesos Peridicos y Cron Estilos de cron Formato de archivos crontab Precauciones y errores comunes Aplicaciones ms usuales Limpieza de archivos (/tmp, core, otros) Accounting Manejo de archivos de registro de eventos (logs) Chequeos peridicos de seguridad y de disponibilidad de recursos de red Ejecucin de procesos pesados fuera de horario ms cargado Otros comandos Ejercicios e investigacin Comandos y archivos Bibliografa y referencias.

Procesos peridicos y cron


El "daemon" cron en Unix permite lanzar comandos de sh con un calendario predeterminado y es la herramienta estndar para el manejo de tareas peridicas. cron usualmente se lanza como un daemon en algn script de arranque del sistema. Para determinar qu comandos debe ejecutar y en que momento hacerlo, cron lee uno o varios archivos de configuracin denominados crontabs (de "cron table").

Estilos de cron
Existen dos estilos de implementar el cron originados en los dos "sabores" principales de Unix. En un cron "a la BSD" existe un crontab nico para todo el sistema, usualmente en /etc/crontab o en /usr/lib/crontab. Dado que el archivo es nico para todo el sistema debe ser administrado por el usuario

root editando el archivo crontab con un editor de texto. En este caso cada rengln del crontab, adems de indicar qu comando ejecutar y cundo hacerlo debe especificar a nombre de qu usuario debe ejecutarse el comando. Los cron "a la ATT" brindan una flexibilidad mayor al permitir que exista un archivo crontab diferente para cada usuario del sistema. De esta manera cada usuario puede configurar sus propias tareas repetitivas sin intervencin del administrador. Este puede todava controlar cuales usuarios pueden utilizar el cron a travs de dos archivos de configuracin adicionales: cron.allow y cron.deny. Normalmente los archivos crontab se encuentran bajo un directorio comn, y cada uno lleva como nombre de archivo el nombre del usuario. Para manejar estos archivos habitualmente se utiliza el comando crontab, que permite crear, examinar y editar el archivo de configuracin del usuario que lo invoca. La mayora de los Unix modernos, inclusive los de origen BSD, tienen un cron "a la AT&T". Algunos inclusive pueden manejar archivos crontab de los dos tipos simultneamente como es el caso del "vixie cron", un paquete independiente que puede instalarse en varias plataformas.

Formato de archivos crontab


Los archivos crontab son archivos de texto en que se lista una tarea repetitiva por cada rengln. Salvo pequeas diferencias como la necesidad o no de especificar el nombre de usuario, el formato es el mismo en todos los sistemas con los siguientes 7 campos:

minuto hora da mes da_de_la_semana [usuario] comando

Campo Minuto Hora Da Mes Dia_de_la_semana Minuto de la hora 0 a 59 Hora del da Da del mes Mes en el ao Da de la semana 0 a 23 1 a 31 1 a 12 1a7o0a6

Atencin!! con el campo da_de_la_semana no todos los cron se comportan igual: lunes siempre es el da 1 el domingo casi siempre es el dia 7, pero en algunos casos es el dia 0 (RTFM) algunos cron modernos (vixie cron) aceptan los dos valores (0 y 7) para especificar domingo

En todos los campos se puede especificar, adems de un valor exacto, rangos (separando con un guin ''), listas (separando con una coma ',') y un comodn con el carcter '*'. Por ejemplo, en la siguiente lnea: 30 07 * * 1-5 comando

Se indica que se ejecute 'comando' de lunes a viernes a las 7:30hs Si en una lnea se especifica tanto el campo da como el campo da_de_la_semana, entonces es suficiente con que se satisfaga una sola de las dos condiciones. Para mayor claridad, en el ejemplo: 0,15,30,45 * 13 * 2 comando se est especificando la ejecucin cada cuarto de hora en todos los das 13 y en todos los das martes. En los rangos y comodines tambin se puede especificar el paso de incremento, como en los siguientes ejemplos. # cada 15 minutos */15 * * * * comando1 # cada 2 horas entre las 8 y las 12, idem 8,10,12 * 8-12/2 * * * comando2

Precauciones y errores comunes


Un comando o script puesto a ejecutar automticamente por cron puede comportarse de manera diferente que cuando ejecutamos el mismo script desde una sesin interactiva de usuario. Hay que tener en cuenta varios aspectos: El comando va a ser lanzado por cron utilizando sh como interpretador de comandos. Debemos tener en cuenta esto si utilizamos habitualmente otro shell (csh, ksh, bash, tcsh) ya que presentan diferencias de sintaxis, variables de ambiente, etc.. No se ejecutan los scripts de inicializacin del shell (.login, .profile, .cshrc por ejemplo) que normalmente se ejecutan al iniciarse una sesin de usuario, por lo que no estarn inicializadas ciertas variables de ambiente. El caso ms comn de esto es la variable PATH: o bien debe inicializarse explcitamente o bien escribirse el camino completo en el sistema de archivos de cada comando que se utilice. Dado que un comando lanzado por cron no corre en un terminal, toda la salida estndar y la salida de error del comando se enva por e-mail al usuario. Es prctica usual redireccionar la salida a /dev/null una vez que han sido depurados los scripts utilizados. Un error habitual tiene que ver con que en las lneas del crontab no se especifica el ao. Es comn que se agende un comando para ejecutarse una sola vez pero luego se olvide borrar el comando del crontab. En esos casos el olvido suele notarse un ao ms tarde cuando vuelve a ejecutarse el comando. Otra opcin para agendar trabajos por una nica vez es utilizar el comando at.

Aplicaciones ms usuales
El grueso de las aplicaciones lanzadas desde cron tienen que ver la realizacin de tareas repetitivas de administracin. El agendar estas tareas para su realizacin automtica minimiza la probabilidad de

errores y olvidos y automatiza a favor del administrador algunas de las tareas ms tediosas. A continuacin se enumeran algunas de las aplicaciones ms habituales de cron.

Limpieza de archivos (/tmp, core, otros)


En los sistemas Unix (y tambin en otros sistemas) suelen generarse archivos que son de poca o ninguna utilidad para los usuarios y a menudo ocupan un rea del disco no despreciable. El caso ms notorio es el de los "core dumps" que se generan cuando un programa falla. Un core dump es un archivo que se guarda en el directorio actual del proceso que "hace crash" con el nombre de core, y contiene una copia de la memoria y el estado del procesador en el momento del "crash". Con la ayuda de un debugger, el archivo core permite al desarrollador del programa que falla reconstruir la situacin en el momento de la falla y detectar cual fue el problema. Para los usuarios finales sin embargo el archivo core solamente significa malgastar espacio en disco. Se utiliza el comando find para recorrer el sistema de archivos y borrar los archivos no deseados. En el siguiente ejemplo: find / -xdev -name core -atime +7 -exec rm -f {} \; se borran todos los archivos de nombre "core" que no han sido accedidos en los ltimos 7 das. El parmetro -xdev impide que la bsqueda se extienda ms alla del sistema de archivos donde se inicia la bsqueda. Por diversos problemas las aplicaciones suelen dejar sin borrar archivos temporales. El administrador debe estar atento a detectar situaciones de este tipo que se den en su sistema, identificar los nombres de los archivos a borrar y agregar una lnea similar en el crontab. Otros archivos candidatos a ser borrados peridicamente por el administrador son el contenido de /tmp o /var/tmp.

Accounting
Si se trabaja en un entorno en que se cobra a cada usuario por la utilizacin de los recursos, la informacin de accounting debe resumirse y archivarse peridicamente. Incluso en sistemas donde no se cobra por uso de recursos la informacin de accounting puede utilizarse para diagnosticar problemas o hacer previsiones de necesidades de ampliaciones del sistema.

Manejo de archivos de registro de eventos (logs)


La mayora de los servicios que corren en un sistema Unix dejan un registro de los eventos importantes que van sucediendo en archivos de texto. El tamao de estos archivos est siempre creciendo por lo que se deben tomar acciones para borrar o archivar los datos ms antiguos.

Chequeos peridicos de seguridad y de disponibilidad de recursos de red


Dependiendo de la importancia que tenga para la organizacin la seguridad, suelen ejecutarse chequeos diarios buscando posibles brechas en la seguridad del sistema. As por ejemplo puede mantenerse una lista de los archivos con setuid y en caso de detectar un cambio reportarlo va e-mail al administrador.

Otro chequeo peridico puede hacerse para generar alarmas en caso de detectar que un recurso en la red no est disponible. As por ejemplo puede hacerse ping a intervalos de 15 minutos hacia los servidores importantes de una organizacin y en caso de detectar una falla reportar una alarma a un pager.

Ejecucin de procesos pesados fuera de horario ms cargado


Un ejemplo de esto es la realizacin de respaldos durante la madrugada, en horarios de baja actividad del sistema de archivos. Otro ejemplo es agendar el download de algn archivo muy grande desde Internet para ser ejecutado en horarios en que la utilizacin del ancho de banda de los enlaces sea menor.

Otros comandos
Otros comandos que permiten lanzar un comando o programa automticamente son el comando at y el comando batch. El comando at permite agendar la ejecucin de una tarea para que sea realizada una nica vez. En la lnea de comando debe pasarse la fecha y hora a la que debe ser ejecutada la tarea. El uso del comando at es preferible frente al uso del cron cuando el comando se ejecutar solamente una vez. Tambin puede usarse at para poner a punto un comando que luego se va a incorporar al crontab para su ejecucin peridica. Por medio del comando batch se puede encargar la ejecucin de una tarea. En este caso no se especifica fecha y hora de ejecucin sino que la tarea ser atendida cuando el sistema se encuentre suficientemente descargado.

Ejercicios e investigacin
Determinar que estilo de cron est instalado en su sistema. Examinar el man del comando crontab e incluir un comando (p. ej. un mail a s mismo) para la siguiente noche. Ponerlo a punto utilizando el comando at. No olvidar quitar el comando del crontab al da siguiente

Comandos y archivos
/etc/crontab y /var/cron/tabs comandos cron y crontab at, batch

Respaldo.
El respaldo de datos Dispositivos y medios Rgimen de respaldo incremental

Respaldo de un sistema de archivos Niveles de respaldo incremental Esquema de respaldo Eleccin de un esquema Recomendaciones generales Restaurar archivos Restaurar sistemas de archivos Otros comandos de respaldo Amanda Ejercicios e Investigacin Bibliografa y referencias.

El respaldo de datos.
En la inmensa mayora de los sistema informticos, los datos almacenados en el sistema tienen mucho mayor costo y son mucho ms difciles de recuperar que el sistema en s. Entre los riegos de prdida de datos se cuentan los errores en el software, la falla de equipos, el error humano, el dao intencional, las catstrofes naturales. El respaldo de datos es la generacin de una copia, en un momento determinado, de los datos del sistema, con vistas a su eventual reposicin en caso de prdida. Todos los sistemas informticos deben respaldarse cuidadosamente, en momentos predeterminados, siguiendo un cronograma preestablecido.

Dispositivos y medios.
Las causas de prdida de datos generan los siguientes requisitos de respaldo: uso de un medio removible, utilizable en otra mquina; los daos o fallas pueden afectar varias partes de hardware al mismo tiempo, impidiendo la utilizacin de la mquina original. conservacin de los respaldos en un lugar fsico suficientemente apartado. Existen actualmente empresas para realizar respaldos va Internet, pero la mayora de las instituciones conservan sus respaldos localmente. La inmensa mayora de los dispositivos de respaldo son de tipo magntico. Esto los hace vulnerables a la proximidad de elementos generadores de campos magnticos. Los respaldos deben mantenerse apartados de dispositivos tales como parlantes de audio, transformadores de pared, acondicionadores de lnea, unidades de potencia ininterrumpida (UPSs), unidades de disco o disquetera no confinados en gabinetes metlicos, monitores an apagados, detectores de metales como los usados en los aeropuertos. El campo magntico terrestre termina, con el tiempo, afectando los medios magnticos de grabacin; esto limita la duracin efectiva de los

respaldos; para perodos largos, se aconseja usar medios pticos o regrabar peridicamente. Puede asumirse una duracin de 3 aos para los medios magnticos.

Muchos fabricantes de unidades de respaldo proveen compresin incorporada, citando el almacenamiento y la velocidad de transferencia en la presuncin optimista de un 2 a 1. En trminos reales slo puede asumirse la capacidad real en bytes de la cinta, y la velocidad de transferencia de esa misma cantidad de bytes. En principio no puede asegurarse compresin alguna sin conocimiento previo del tipo de datos. Caractersticas de los principales medios de respaldo, en orden de capacidades crecientes:

Medio

Capacidad Reuso

Acceso Comentarios aleatorio muy comn; poca capacidad, incmodo; poca duracin (2 aos); til para respaldo de archivos de configuracin o transferencia de archivos chicos; alto costo por MB bastante comn; varias interfaces de conexin; alto costo por MB muy comn; varias interfaces de conexin; menor duracin que CDs pregrabados, mucho mayor que los medios magnticos; buenos para datos permanentes, incmodo para respaldos regulares ventajas del CD-R; limitado en capacidad An poco comn; U$S 5 el de 4.7GB. discos removibles; buena velocidad de transferencia cinta video formato chico; las unidades suelen ser llamadas Exabyte DDS (Digital Data Storage) es similar al DAT (Digital Audio Tape) para audio; original 2 GB, DDS-4 en 20 GB; buena velocidad de transferencia; tamao reducido muy comn; excelente transferencia, bajo costo; apto para crear espejos de discos; menor transportabilidad

Disquete

1.44/2.8 MB

Zip

100/250 MB

CD-R

650 MB

No

CD-RW DVD-R Jaz, Orb

650 MB 4.7 a 17 GB ~2 GB

S No S S

S S S No

Cinta 8 mm 7 GB

Cinta 4 mm 20 GB DAT/DDS

No

Disco fijo

40 GB

Existen cintas de nueva tecnologa, con mejoras en capacidad, precio, transferencia o duracin: Travan (varios fabricantes), ADR (OnStream), DLT (Quantum), AIT (Sony), Mammoth (Exabyte); verificar soporte para el hardware en la versin de UNIX a utilizar. DAT y Exabyte son soluciones baratas para la mayora de las empresas chicas y medianas; DLT, AIT y Mammoth estn orientadas a grandes corporaciones o universidades. Existen diversos tipos de equipo para cambio automtico de volmenes, de alto costo y con software propio, en capacidades de terabytes. Una adecuada particin en sistemas de archivo, un cronograma adecuado y un poco de paciencia permiten respaldar un sistema con razonable esfuerzo.

Rgimen de respaldo incremental.


Los comandos tradicionales de respaldo y recuperacin son dump y restore. Segn los sistemas, pueden tener nombres similares (ufsdump, ufsrestore en Solaris). Otros comandos tambin tradicionales son tar y cpio, con mltiples opciones de control adaptables a variadas necesidades. Respaldo de un sistema de archivos. El comando dump recorre el sistema de archivos haciendo una lista de los archivos modificados o nuevos desde una corrida anterior de dump; luego empaqueta todos esos archivos en uno solo y lo vuelca en un dispositivo externo tal como una cinta. Exhibe estas caractersticas: soporta multivolumen; soporta todo tipo de archivo, incluso de dispositivos; conserva permisos, dueos y fecha de modificacin; maneja nombres largos y rutas de anidamiento profundo; maneja bien los archivos con huecos (bloques sin datos) producidos por algunos programas (bdm, nbdm); en una copia comn estos archivos se agrandan desmesuradamente; admite respaldo incremental.
dump maneja el sistema de archivos en crudo, leyendo la tabla de inodos para decidir qu

archivos deben respaldarse. Esto aumenta su eficiencia, pero obliga a manejar cada sistema de archivos en forma independiente, e impide el respaldo de sistemas de archivos remotos tipo NFS. No obstante, es posible respaldar un sistema de archivos sobre una unidad de respaldo remota usando rdump. Niveles de respaldo incremental. El respaldo incremental se implementa asignando un nivel a cada respaldo, de 0 a 9. Un respaldo nivel 0 copia todos los archivos; un respaldo nivel 1 copia slo los archivos modificados luego de la fecha del ltimo respaldo nivel 0; un respaldo nivel 7 copia slo los archivos modificados luego del ltimo respaldo nivel 6. La recuperacin de un sistema de archivos requiere reponer primero el respaldo nivel 0 y luego sucesivamente el ltimo nivel 1, el ltimo de nivel 2, y siguientes. Los nmeros de niveles pueden no ser contiguos: se toma el nivel anterior ms prximo existente como referencia. La informacin de dump se guarda en el archivo /etc/dumpdates; en caso necesario, este archivo puede ser editado manualmente.

dump 0uf /dev/st0 /usr

crea un respaldo nivel 0 del sistema de archivos /usr usando el dispositivo de cinta con rebobinado /dev/st0 (opcin f) actualizando /etc/dumpdates (opcin u).
dump 3uf /dev/st0 /usr

anlogo para un nivel 3.


dump 0uf /dev/nst0 /usr

crea un respaldo nivel 0 del sistema de archivos /usr usando el dispositivo de cinta no rebobinado /dev/nrst0, para reiterar el comando y colocar varios respaldos en una misma cinta. Los dispositivos de cinta suelen tener dos archivos de dispositivo, uno con rebobinado automtico (/dev/st0) y otro sin rebobinado (/dev/nst0); ambos se refieren al mismo dispositivo fsico. El manejo de la unidad de cinta se hace con el comando mt.
rdump 0uf pino:/dev/rtape /usr

crea un respaldo nivel 0 del sistema de archivos /usr usando el dispositivo remoto /dev/rtape en la mquina pino. El acceso a la cinta remota es controlado por el archivo .rhosts de la mquina remota. Si no se confa en la privacidad de la red puede convenir ms implementar un tnel seguro con ssh. El respaldo en cinta requiere conocer su tamao y caractersticas. El fin de cinta (EOT, End Of Tape) es generalmente detectado, para habilitar los respaldos multivolumen. Un error en el largo de cinta o en la eleccin de dispositivo rebobinado puede arruinar el respaldo.
dump 5usdf 60000 6250 /dev/st0 /trabajos

indica un largo de cinta ficticio de 60000 pies (opcin s, size), densidad de grabacin 6250 dpi (opcin d, densidad), para engaar una versin dump incapaz de reconocer cintas de ms de 1.5 GB (DAT DDS-1); como adems se comprime, se confa en la capacidad de dump para recibir la seal EOT en una cinta con capacidad en exceso.
ufsdump 0uf /dev/rmt2 /dev/rdsk/c0t3d0s5 crea un respaldo nivel 0 con el comando ufsdump (Solaris),

del sistema de archivos sobre el dispositivo crudo /dev/rdsk/c0t3d0s5; algunas versiones no aceptan el punto de montaje. Desgraciadamente, el comando dump en Solaris existe, pero su propsito es examinar archivos objeto, lo cual induce a error a muchos administradores honestos.

Esquemas de respaldo.
Los niveles de respaldo pueden elegirse arbitrariamente; slo tienen sentido respecto de un respaldo de nivel menor. Un esquema de respaldo se define en funcin de actividad de cada sistema de archivos; capacidad del dispositivo de respaldo; redundancia deseada; cantidad de volmenes; complejidad operativa. Si el sistema de archivos cabe en un volumen, puede hacerse un nivel 0 diario (o semanal), con un grupo de cintas que se va reutilizando; cada N das, la cinta se conserva. Este esquema presenta redundancia masiva y es fcil para restaurar

Un esquema ms optimizado consiste en realizar un nivel 9 diario (7 cintas), un nivel 5 semanal (5 cintas), un nivel 3 mensual (12 cintas), un nivel 0 cuando ya no alcanza un volumen o al menos una vez al ao. El esquema clsico ms completo de respaldo tiene conexin con el algoritmo matemtico de las Torres de Hanoi. Equilibra la aspiracin de retener la mayor informacin posible por el mayor tiempo posible con limitaciones prcticas como el nmero de cintas y el tiempo disponible. Emplea los 9 niveles, el 0 se conserva, y reitera el ciclo cada 45 das. Este esquema suele ser demasiado complicado an para sistemas grandes, aunque provee excelente redundancia; tambin es complicado restaurar.
>> 0 > 3 > 2 > 5 > 4 > 7 > 6 > 9 > 8 > 1A > 3 > 2 > 5 > 4 > 7 > 6 > 9 > 8 > 1B > 3 > 2 > 5 > 4 > 7 > 6 > 9 > 8 > 1C > 3 > 2 > 5 > 4 > 7 > 6 > 9 > 8 > 1D > 3 > 2 > 5 > 4 > 7 > 6 > 9 > 8

Eleccin de un esquema. Dado que una gran parte de los archivos no cambian, el esquema incremental ms simple ya elimina un gran volumen del respaldo diario. La insercin de niveles divide an ms finamente en grupos los archivos activos. El respaldo incremental permite respaldos ms frecuentes con menos cintas, ms alguna redundancia por repeticin de archivos. El esquema de respaldo elegido surge de evaluar estas condiciones.

Recomendaciones generales.
Las siguientes recomendaciones no son universales ni infalibles, pero surgen de la experiencia.

Respaldar todo desde la misma mquina: aunque es ms lento, la facilidad de administracin y la posibilidad de verificar la correccin del respaldo en todas las mquinas justifica su realizacin a travs de la red. Se corre rdump en la mquina remota a respaldar, va rsh, dirigiendo la salida hacia la unidad de respaldo en la mquina local. Al restaurar, deben tomarse en cuenta eventuales diferencias de sistema operativo; en algunos casos hay inversin de bytes, que pueden arreglarse con dd; esto no resuelve diferencias entre versiones de rdump. Etiquetar las cintas: fecha, hora, mquina, sistema de archivos, nmero serial constituyen el mnimo absoluto. Una cinta no identificada slo sirve para ser regrabada. Los sistemas de archivos / y /usr deben poder restaurarse sin referencia alguna a scripts o informacin en lnea; la sintaxis exacta de los comandos, densidades, opciones y otros valores deben figurar en la documentacin de la cinta. Un registro ms completo se hace imprescindible cuando se respaldan muchos sistemas de archivos en un mismo volumen. Intervalo de respaldos razonable: el sistema de archivos de usuarios puede respaldarse a diario en sistemas grandes, o semanalmente en sistemas chicos; la

frecuencia de respaldo para otros sistemas de archivos dependern del uso y la criticidad. El respaldo consume recursos y tiempo de operador; es responsabilidad del administrador del sistema balancear costos y riesgos al definir frecuencias de respaldo sobre cada sistema de archivos. Elegir sistemas de archivo: segn el movimiento, cada sistema de archivos puede tener un esquema diferente. Un grupo de archivos muy activo en un sistema de archivos inactivo puede copiarse diariamente hacia otro sistema de archivos con respaldo diario. Sistemas de archivos de noticias, o el sistema de archivos /tmp, no deben respaldarse; las noticias son efmeras, y /tmp no debe contener nada importante. Respados diarios en un solo volumen: buscar un esquema o un medio para que el respaldo diario quepa en un solo volumen; es la nica forma simple de realizar un respaldo diario, cargando la cinta a ltima hora y ejecutando el respaldo en cron. Recordar: el respaldo de varios sistemas de archivos en una cinta nica requiere usar el dispositivo no rebobinado y documentar bien las cintas. Crear sistemas de archivo acordes con el tamao del medio de respaldo: con las capacidades actuales, es posible crear sistemas de archivo de tamao razonable que quepan en una cinta. Debe haber una buena razn para crear sistemas de archivo muy grandes. Mantener las cintas fuera del lugar: pero realmente en otro lugar, apartado del lugar de la instalacin; hay innmeras historias sobre prdida de los respaldos conjuntamente con el sistema. El volumen actual de medios es suficientemente reducido como para trasladar un montn de informacin en un portafolios. Puede recurrirse a una institucin especializada en conservacin de datos o llevar las cintas a casa del gerente. Seguridad del respaldo: el robo de un respaldo equivale al robo de toda la informacin vital de una organizacin. Las precauciones de seguridad con los respaldos debe ser tanta como la dispensada al propio sistema, con el agravante de que es ms fcil llevarse unas cintas que la informacin en disco. Limitar la actividad durante dump: la actividad en los archivos mientras se ejecuta dump puede ocasionar confusin en el momento de restaurar. Esto no es tan crtico en niveles superiores, pero s en el nivel 0. Puede hacerse el respaldo en horas de escasa actividad, nocturnas o en fin de semana. Es preciso cuidar de no coincidir con los programas del sistema que modifican el sistema de archivos; ste debe permanecer estacionario mientras se realiza el respaldo. La solucin ms segura es hacer el respaldo en monousuario. En ocasiones especiales, como al encarar una actualizacin del sistema operativo, deber uno armarse de paciencia, bajar la mquina a monousuario y respaldar el sistema en nivel 0. Existen programas especiales (archivadores o "filers") capaces de tomar un registro peridico del estado del sistema y resincronizar el respaldo. Debe considerarse esta posibilidad cuando no sea posible reducir la actividad del sistema en ningn momento. Verificar el respaldo: hay tambin historias de respaldos tomados cuidadosamente que nunca pudieron restaurarse. Releer la cinta con restore para generar la tabla de contenido es una prueba razonable; probar recuperar un archivo en particular obliga a recorrer partes ms alejadas de la cinta, ofreciendo una comprobacin ms slida. Debe

verificarse tambin que es posible restaurar desde varias cintas, que se pueden leer cintas grabadas tiempo atrs, y que es posible leer en otras unidades adems de la habitual. Vida til de las cintas: como todo en el mundo, las cintas tienen una vida limitada, indicada por los fabricantes en cantidad de pasadas. Un respaldo, una restauracin o un salto de archivos representan, cada uno, una pasada. Crecimiento del sistema: el bajo precio de discos tiende a generar un aumento desordenado de la capacidad de almacenamiento. Imponer un criterio ordenado de crecimiento, con calificacin de datos por criticidad y actividad, su separacin racional en distintos sistemas de archivos, la concentracin de informacin vital en un servidor confiable, son algunas medidas coactivas para alcanzar un respaldo confiable y humanamente posible.

Restaurar archivos.
En este apartado se trata la restauracin de un archivo o un grupo de archivos, en contraposicin a la restauracin de un sistema de archivos completo.

1. Determinar en qu cinta se encuentran los archivos a restaurar. Los usuarios generalmente buscan la ltima versin del archivo, pero no siempre es as. La existencia y ubicacin del archivo dependen del esquema de respaldo empleado. Si se conservan catlogos (listas con todos los archivos respaldados en una fecha), la bsqueda se simplifica: basta con verificar si el archivo buscado se encuentra en el catlogo. Si no es as, se debern revisar las cintas ms probables segn la fecha indicada por el usuario, o recorrer todo el conjunto desde el respaldo nivel 0 inmediato anterior. 2. Crear un directorio donde recuperar los archivos. Muchas versiones de restore requieren reponer la ruta entera de directorios para recuperar el archivo. No usar /tmp; su contenido ser borrado en un rearranque imprevisto. 3. Si se han colocado varios archivos de respaldo en una misma cinta, se deber consultar la documentacin de ubicacin de cada uno, determinar el lugar en que se encuentra el de inters, y usar el comando mt para ubicar el comienzo del archivo de respaldo. 4. Restaurar el archivo. Usar el comando complementario del respaldo: si se us dump para respaldar, usar restore; si se us rdump, usar rrestore. 5. Entregar el archivo al usuario. Se puede copiar el archivo hacia el directorio del usuario, verificando que no exista ya un archivo con ese nombre. En ningn caso debe sobreescribirse un archivo de otro usuario. Otra alternativa es dejarlo en el lugar de recuperacin para que el usuario lo copie. En este caso, ser preciso limpiar regularmente el directorio de recuperacin. 6. Notificar al usuario. Ejemplo completo de recuperacin del archivo perdido.arch del usuario juanpe, con la cinta en la mquina roble:

Montar la cinta en la unidad de la mquina roble.


$ su

ingresa como supervisor, pide contrasea.


# cd /var/tmp

la recuperacin se har en el directorio /var/tmp.


# rsh roble mt -f /dev/nrst1 fsf 3

salta hasta el 4o. archivo de respaldo en la cinta.


# rrestore xf roble:/dev/nrst1 > /usr/users/juanpe/docs/perdido.arch

ejecuta el comando e imprime mensajes; observar continuacin del comando en la segunda lnea.
# ls /var/tmp/usr/users/juanpe/docs perdido.arch

muestra la presencia del archivo recuperado.


# ls /usr/users/juanpe/docs otro1.arch otro2.arch

verifica que el archivo recuperado no existe en el directorio propio del usuario, para no reescribirlo.
# cp -p /var/tmp/usr/users/juanpe/docs/perdido.arch /usr/users/juanpe/docs

copia el archivo recuperado hacia el directorio propio del usuario.


# mail -s "Archivo recuperado" juanpe Su archivo perdido.arch fue recuperado. Se encuentra en su directorio, bajo docs. Saludos, El Administrador. .

Enva correo al usuario avisando la recuperacin.


# exit $

Fin de la tarea.

restore

admite la opcin i, para uso interactivo: el comando lee el catlogo de la cinta; se recorren los archivos como si se tratara de un rbol de directorios comn, usando ls, cd y pwd; se van seleccionando los archivos a restaurar con add; cuando se han seleccionado todos, indicando extract se los recupera de la cinta. Ejemplo de recuperacin interactiva. El indicador de supervisor # cambia a restore> al operar dentro del comando.
# rrestore if roble:/dev/nrst1 restore> ls .: arnoldo/ beiro/ juanpe/ lost+found/ vega/ restore> cd juanpe restore> ls carta01.txt core docs/ mbox perdido.arch varios/ restore> add perdido.arch

El archivo se agrega a la lista de archivos a recuperar. Agregar un directorio agrega todo su contenido.
restore> ls carta01.txt core docs/ mbox perdido.arch* varios

El asterisco indica que est marcado para recuperar.


restore> extract

Muestra mensajes; si no se sabe en qu volumen est el archivo, debe comenzarse por el ltimo y proceder hacia el principio; aqu asumimos saber que est en el primer volumen.
Specify next volume #: 1

Se realiza la extraccin; pregunta si el directorio raz de la cinta debe intepretarse como directorio corriente; se usa slo al restaurar sistemas de archivo completos.
set owner mode for '.'? [yn] n #

Sale de restore, fin de la tarea.

Restaurar sistemas de archivos.

Antes de restaurar un sistema de archivos completo, se debe estar seguro de haber eliminado las causas que provocaron su destruccin. 1. Crear un sistema de archivos en la particin donde se va a restaurar; montarlo. 2. Cambiar al directorio raz (punto de montaje) del nuevo sistema de archivos. Montar la primera cinta del ltimo respaldo nivel 0. Arrancar la restauracin con restore r. El comando pedir las cintas sucesivas. 3. Al terminar de restaurar el nivel 0, continuar con los diferentes niveles en el mismo orden del esquema de respaldos empleado.

Ejemplo de restauracin de un sistema de archivos a partir de un respaldo de 3 niveles.


# newfs /dev/dsk/c201d6s0 QUANTUM_PD1050S # mount /dev/dsk/c201d6s0 /home # cd /home

Crea el sistema de archivos, lo monta y se posiciona en l. Montar ahora la cinta 1 del ltimo respaldo nivel 0 de /home.
# restore r

Montar las restantes cintas del respaldo nivel 0. Montar luego la primer cinta del respaldo nivel 1 siguiente.
# restore r

Montar las siguientes cintas del respaldo nivel 1. Montar luego la primer cinta del respaldo nivel 2 siguiente.
# restore r

Montar las siguientes cintas del respaldo nivel 2. Montar luego la primer cinta del respaldo nivel 3 siguiente.
# restore r

Esta secuencia repone el sistema de archivos a su estado original ms cercano al momento de prdida. En el esquema de respaldos empleado, la nica diferencia es la mgica aparicin de los archivos que fueron borrados. Hay versiones de restore que llevan registro de los archivos borrados. En una actualizacin del sistema operativo, debe hacerse un respaldo nivel 0 antes de la actualizacin, efectuar luego la actualizacin cuidando de reponer los archivos de configuracin necesarios en los sistemas de archivos afectados por la actualizacin. Una vez que todo est funcionando, realizar inmediatamente un nuevo respaldo nivel 0. Esto

es imprescindible para asegurar la coherencia de los siguientes niveles, ya que la actualizacin puede haber modificado fechas de archivos preexistentes.

Otros comandos de respaldo.


Los clsicos comandos tar (BSD) y cpio (System V) sirven para respaldar archivos, directorios y grupos diversos de archivos y directorios. Se usan frecuentemente para trasladar informacin, distribuir software o an copiar rboles de directorios dentro de un mismo sistema, sobre todo por su capacidad de conservar dueos, permisos y fechas, no siempre posible con cp.

Copia de un rbol de directorios usando tar:


tar cf - dir_origen | ( cd dir_destino ; tar xfp - )

Copia de un rbol de directorios usando cpio:


find dir_origen -depth -print | cpio -pdm dir_destino

Este comando es poco usado, habiendo cedido lugar a tar.

Al usar estos comandos verificar estas posibles limitaciones: soporte multivolumen, nombres de ruta largos, recuperacin de errores, fijacin de factor de bloqueo (20 por defecto). Muchas han sido levantadas, en particular en las versiones de GNU, pero conviene verificar en la documentacin y comprobar en la prctica. Cuando es preciso realizar transformaciones de datos es til el comando dd (data duplicator). Sin parmetros, este comando slo copia entrada en salida. Admite un cierto nmero de opciones que permiten cambiar formato de los datos o transferir entre distintos medios.
Copia de una cinta entre dos unidades:
dd if=/dev/rmt8 of =/dev/rmt9 cbs=16b

Copia de una cinta en una sola unidad:


dd if=/dev/rmt8 of =/tmp/cinta.archdev cbs=16b

cambiar la cinta;
dd if=/tmp/cinta.arch of =/dev/rmt8 cbs=16b

Conversin desde cinta con diferente orden de byte:


dd if=/dev/rst8 conv=swab | tar xf -

volcopy

permite realizar una copia exacta de un sistema de archivos completo hacia otro dispositivo, eventualmente con cambio en el bloqueo. Est disponible en Solaris, HP-UX y Linux. Para el control de la unidad de cinta, se usa el comando mt, especialmente til cuando se graba ms de un archivo en la misma cinta. Su sintaxis bsica es mt [-f dispositivo_cinta] comando [cantidad] Los comandos de respaldo en cinta graban una seal de fin de archivo (EOF, End Of File) al terminar de ejecutar; esto permite ubicar un respaldo en particular desplazndose en la cinta. Entre los comandos admitidos por mt se destacan: rew rebobinado de la cinta offline saca de lnea la unidad de cinta; en los modelos que lo permiten, eyecta el casete. status muestra informacin de la cinta. fsf [cantidad] avanza la cinta la cantidad de archivos indicada, 1 por defecto. bsf [cantidad] retrocede la cinta la cantidad de archivos indicada, 1 por defecto.

Amanda.
Amanda (Advanced Maryland Automatic Network Disk Archive) es un software para respaldo de red capaz de actuar en una LAN hacia una unidad de cinta ubicada en un servidor, cumpliento todas las exigencias deseables para un administrador. Usa dump y restore como comandos de base, pero tambin puede manejar tar de GNU y smbtar de Samba para respaldar datos de mquinas Windows. Corre en muchas versiones de UNIX, soporta extensa variedad de hardware, permite compresin sobre el cliente antes de la transferencia, graba registros completos del respaldo en la cinta. Amanda es software libre, escala bien, es muy configurable, evoluciona rpido; est siendo usado extensamente en todo el mundo.

Ejercicios e Investigacin.
1. Imagine la peor contingencia posible para su organizacin: la destruccin total del lugar. Considere su disponibilidad de respaldos: determine qu informacin puede recuperar, con qu esfuerzo, y en cunto tiempo podra tener el sistema de nuevo en marcha, incluyendo la necesidad eventual de adquirir hardware. Est satisfecho con las respuestas?

2. Estudie los comandos de respaldo disponibles en su sistema. Realice una prueba sobre la unidad de respaldo de que disponga. Si se dispone de un sistema de archivos separado para /var puede ser conveniente usarlo, sobre todo si no es muy grande. Restaure sobre un directorio borrador, cuidando no alterar el original. 3. Estudiar los comandos tar y/o cpio disponibles en su sistema. Estos comandos tienen muchas opciones, diferentes segn los sistemas. An la misma opcin puede actuar diferente en distintos sistemas. Probar con un grupo de archivos pequeo. No se requiere disponer de una unidad de cinta o especfica de respaldo, ya que se pueden usar archivos en disco o an la unidad de disquete. Asegurarse de poder respaldar, listar los archivos de un archivo de respaldo, recuperar todos o uno de los archivos contenidos en el archivo de respaldo.

4. Estudiar el comando dd y sus opciones de conversin. Probarlo para copiar un archivo, o para tranferirlo hacia una cinta o un disquete. 5. Disee una estrategia para implementar un esquema de respaldo incremental en base a tar o cpio. Algunos sistemas no disponen de dump/restore; en esos casos, tar y/o cpio ofrecen facilidades para implementar el respaldo incremental manualmente o a travs de scripts. Algunos sitios que disponen de dump/restore igualmente prefieren usar tar o cpio por la mayor tolerancia a actividad en el sistema

TCP/IP y Enrutamiento
TCP/IP Paquetes Direccionamiento de paquetes Direcciones en Internet ARP, RARP, BootP, DHCP - Relacin entre direcciones Enrutamiento Protocolos de enrutamiento Redirecciones ICMP Subredes CIDR: Classless Inter-Domain Routing Eleccin de una estrategia de enrutamiento Configuracin de una red Obtener y configurar las direcciones IP Configurar las interfaces de red: ifconfig Configurar rutas estticas: route Configuracin dinmica estndar: routed Configuracin para el arranque automtico Diagnstico de fallas de red Ver si las mquinas estn vivas: ping Estado de la red: netstat Encaminamiento de paquetes: traceroute

Monitores de trfico: tcpdump, snifit, snoop, etherfind. Inspeccin de tablas de ARP

TCP/IP y Enrutamiento
El TCP/IP es el software bsico de red utilizado en Internet y fue desarrollado en los primeros sistemas UNIX. Incluye bsicamente los siguientes componentes:
Internet Protocol (IP). Es el protocolo de capa de red (capa 3) y se encarga de transportar paquetes crudos de una mquina a otra. Internet Control Message Protocol (ICMP). Proporciona funciones de soporte de bajo nivel a IP, por ejemplo mensajes de error. Address Resolution Protocol (ARP). Relaciona direcciones de capa 2 y capa 3 en una LAN. User Datagram Protocol (UDP) y Transmission Control Protocol (TCP). Se usan para enviar datos desde un programa a otro utilizando IP. UDP es un servicio no confiable y sin conexin y TCP es un servicio confiable y orientado a conexin. Ambos son protocolos de capa de transporte (capa 4)

El TCP/IP provee un ambiente de programacin independiente del sistema que permite intercambiar informacin entre diferentes sistemas (UNIX y no UNIX). El conjunto de protocolos llamados TCP/IP corresponde con un modelo de capas como se indica en la siguiente tabla:

Capa Enlace de datos Red

Funcin Hardware de red y dispositivos de red Comunicacin bsica, direccionamiento y enrutamiento Comunicacin extremo a extremo entre programas Aplicaciones de usuario

Ejemplos ARP, PPP, SLIP

IP, ICMP

Transporte

TCP, UDP Telnet, ftp, nfs, dns

Aplicacin

La historia ha demostrado que el TCP/IP nacido desde el UNIX es el protocolo de redes ms difundido en la actualidad y que ha superado otras estructuras como el clsico modelo OSI de ISO.

Paquetes
El UNIX soporta variadas redes fsicas, por ejemplo Ethernet, token ring y sistemas basados en mdems. Las variedades de hardware son manejadas dentro de la capa de Enlace de Datos en el modelo TCP/IP y los protocolos de mayor nivel no se enteran de las caractersticas del hardware subyacente. Las conexiones con diferentes redes de una mquina UNIX se conocen como interfaces de red. Una mquina con ms de una interfaz puede transferir paquetes que llegan por una de esas interfaces y retransmitirla hacia otra interfaz, en ese caso se dice que la mquina acta como enrutador (o router). Los problemas ms complejos de redes estn asociados a problemas de enrutamiento. La informacin viaja por la red en forma de paquetes, los cuales tiene una carga y un encabezado. El encabezado dice de donde viene, hacia donde va, que protocolo, etc. y la carga son los datos tiles. A diferentes niveles de la estructura de capas estas unidades se conocen normalmente con diferentes nombres. A nivel de capa de enlace de datos se llaman tramas, a nivel de

red se llaman paquetes, a nivel de transporte se llaman segmentos y a nivel de aplicacin se llaman mensajes. A medida que la informacin pasa por la estructura de capas cada una de ellas le agrega informacin de cabecera e incluye la unidad de la capa superior dentro de la carga. Por ejemplo un segmento UDP se transmite en un medio Ethernet:

-----------------------------------

Segmento UDP (108 bytes) Paquete IP (128 bytes)

------------------------

Ethernet Header IP Header UDP Header Datos de la aplicacin Ethernet Trailer 14 Bytes 20 Bytes 8 Bytes 100 Bytes 4 Bytes

Trama Ethernet (146 bytes)

El tamao del paquete puede limitarse por causas de hardware o por convenciones del protocolo. Por ejemplo la carga de una trama Ethernet no puede ser superior a 1500 bytes, el largo mximo de un paquete IP es de 64 Kbytes pero en general hay limitaciones que no permiten ese tamao. La limitacin de una red o protocolo en el tamao del paquete se llama MTU (Maximun Transfer Unit). La capa IP es la responsable de fragmentar los paquetes para adecuarse a la MTU de una red en particular.

Direccionamiento de paquetes
Para que los paquetes lleguen a destino es necesario que contengan direcciones. Las direcciones existen a varios niveles en la estructura de capas. En el nivel de capa de enlace, existen direcciones Ethernet que son de 6 bytes, que estn pre-configuradas por el fabricante de la tarjeta y son nicas en el mundo. En Token Ring existen tambin direcciones de capa de enlace y en enlaces PPP y SLIP como son conexiones punto a punto no es necesario utilizar direcciones. En el nivel IP, existen direcciones IP que son cuatro bytes asignados a la interfaz de red, nicas en el mundo y no asociadas al dispositivo hardware. Son asignadas para permitir el encaminamiento de los paquetes de una mquina origen a otra destino. Son asignadas por InterNIC. La correlacin entre direcciones de capa de enlace y direcciones de capa de red es necesaria en las redes de difusin y para hacer esta relacin existe el protocolo arp. Este protocolo permite implementar esta correlacin en forma automtica o sea sin la

intervencin del administrador. Esto tiene importantes ventajas pues es posible cambiar la tarjeta de red a una computadora sin necesidad de configurar a mano el cambio de direccin de capa de enlace. Las direcciones IP se escriben por convencin de la forma: 164.73.224.40 y claramente no son fciles de recordar y por eso los sistemas UNIX permiten asociar nombres a las direcciones para poder referirse a mquinas por su nombre y no por su direccin. El UNIX posee varios mecanismos de implementar esa conversin de nombres a nmeros. La forma ms bsica es mediante el archivo /etc/hosts que tiene esa relacin y la ms usada en Internet es a travs del servicio de Servidor de Nombres DNS. Es de destacar que el software de red no conoce de nombres sin de direcciones y el servicio de relacin entre nmeros y nombres es una aplicacin de usuario y no parte del software de red. Las direcciones IP identifican mquinas pero no servicios dentro de esas mquinas. Para identificar servicios existe el concepto de PUERTOS que son las direcciones de capa de transporte. Los nmeros de puertos son de 2 bytes y hay un conjunto de puertos llamados "bien-conocidos" ("well-known ports") que se han estandarizado para los diferentes servicios. Por ejemplo el servidor de telnet atiende en el puerto 23, el servidor de correo electrnico en el puerto 25, etc. La asignacin de puertos puede verse en un archivo que relaciona nmeros con nombres de servicios y que se llama /etc/services.

Direcciones en Internet
Las direcciones Internet tienen cuatro bytes y se dividen en una parte de numeracin de red y otra de numeracin de mquina. En las decisiones de enrutamiento se utiliza esta divisin para saber si una mquina est en la propia red o por qu camino debe encaminarse para llegar a destino. Por convencin se anotan en decimal separados por puntos entre los 4 bytes. Ejemplo 164.73.224.40 Hay varias clases de direcciones IP. Difieren en como se asigna la frontera entre parte de red y parte de mquina.

Clase A B C D

Primer byte 1-126 128-191 192-223 224-239

Formato R.M.M.M R.R.M.M R.R.R.M -

Comentario

Normalmente con subredes

Multicast

240-254

Experimental

Si en los bits reservados para nmeros de mquina de una red colocamos ceros, entonces nos estaremos refiriendo a toda esa red. Es el nombre de la red y por lo tanto los ceros estn reservados a esta identificacin. Si todos los bits de la parte de mquina son unos, entonces se considera una direccin de broadcast dentro de esa red por lo que todas las mquinas de la red deben escuchar esa direccin. Si el primer byte de una direccin es el 127, se refiere a una red ficticia llamada "loopback" y que no se refiere a una interfaz fsica. Tiene sentido dentro de una misma mquina y los paquetes enviados a esa direccin no salen de la propia mquina, recorren la pila de protocolos del TCP/IP y vuelven a la mquina como si hubieran sido recibidos por sta a travs de alguna de las interfaces fsicas.

ARP- Relacin entre direcciones


Los paquetes IP se enrutan usando las direcciones IP, sin embargo, en redes de difusin (particularmente Ethernet) es necesario tener una relacin entre direcciones IP y direcciones de capa de enlace de datos. Este relacionamiento se realiza mediante el protocolo ARP. La idea es que si estoy en una red Ethernet y tengo que enviar un paquete IP a una mquina de mi misma red, debo enviar ese paquete encapsulado en una trama Ethenet. Para saber a que direccin de capa de enlace debo enviar dicha trama, tengo que averiguar cul es la direccin de capa de enlace que se corresponde con la direccin IP a la cual quiero enviar el paquete. El ARP mantiene una tabla en memoria con la correspondencia entre direcciones de capa de red y direcciones de capa de enlace de datos. Si ARP tiene en su tabla la direccin de capa de enlace asociada a la direccin IP a la cual quiero referirme, se forma una trama Ethernet con dicha direccin ethernet como destino. Si ARP no posee en su tabla dicha correspondencia, es el encargado de averiguarlo. A estos efectos genera una trama de difusin "Broadcast" de capa de enlace preguntando:
Quin tiene la direccin IP 22.22.22.22 ?

Ese broadcast de capa de enlace es obviamente escuchado por todas las mquinas de la red Ethernet y entonces aquella que tenga configurada esa direccin IP, responder diciendo:
Yo tengo esa direccin IP y mi direccin de capa de enlace es: 8:0:20:0:fb:6a

Ahora entonces la mquina que hizo la consulta ARP tiene la informacin de correspondencia para la direccin IP deseada y la puede agregar en su tabla y as generar la trama ethernet dirigida a la mquina deseada.

A su vez, la mquina que recibi la consulta original, tiene la correspondencia de la mquina origen y tambin la incluye en su tabla pues es altamente probable que deba dirigirse prximamente (para enviar una respuesta) a la mquina origen. La trama de broadcast con la pregunta original incluye la direccin de capa de enlace de la mquina origen, as como su direccin IP, por lo que terceras mquinas que no participen del dilogo, podran aprender de la pregunta la correspondencia de direcciones correspondiente a la mquina origen. En realidad solamente tienen en cuenta ese dato aquellas mquinas que ya tenan una entrada en su tabla referente a la mquina origen y lo que hacen es actualizarla con la nueva informacin. Esto es as para que las mquinas no agranden demasiado su tabla con informacin de mquinas con las cuales quiz no tengan que hablar. Las tablas adems tienen tiempo de expiracin con lo cual entradas no usadas van liberando espacio en la tabla. Existe en UNIX un comando arp que permite manejar el cache del protocolo ARP para debugging.

RARP, BootP, DHCP


A veces existe la necesidad de conocer a partir de una direccin ethernet la direccin IP asignada. Esto se utiliza en mquinas sin disco que arrancan cargando lo necesario de un servidor. Para que todas las mquinas en este modo puedan cargar la misma imagen del sistema operativo y no tener necesidad de disponer de una imagen por mquina, se utiliza el protocolo RARP que consulta un servidor al cual se le pregunta:
Que direccin IP corresponde a la direccin ethenet 8:0:20:0:fb:6a ?0

El servidor tiene una tabla de las direcciones IP asociadas a las diferentes mquinas segn su direccin de capa de enlace de datos y la mquina sin disco configura la imagen con la direccin IP brindada por el servidor. El protocolo RARP ha quedado obsoleto con el advenimiento del protocolo BOOTP (Boot Protocol) que brinda ms datos de configuracin adems de la direccin IP. En la actualidad el DHCP (Dynamic Host Configuration Protocol) permite a una mquina obtener toda la configuracin a partir de un servidor en su red de rea local.

Enrutamiento
Enrutamiento es el proceso de dirigir un paquete a travs de la red desde una mquina origen a otra destino. La idea es enviar los paquetes a algn sitio donde pueden tener ms informacin de cmo llegar al destino deseado. La informacin de enrutamiento se construye en una tabla de reglas del tipo:

Para ir a la red A (nmero de red y mscara), enve los paquetes a la mquina B, con un costo de 1 salto.

Asimismo existe una ruta por default donde se envan todos los paquetes destinados a redes para las cuales no tenemos rutas explcitas. La tabla de ruteo se recorre de lo ms especfico a lo ms general. Si no hay ruta especfica para dirigirse a un destino y no hay ruta default, el sistema enviar un mensaje de "network unreacheable". Esta especificidad se determina por el largo de la mscara. Cuanto ms cantidad de unos tenga la mscara, ms especfica ser la ruta. Desde el punto de vista del enrutamiento IP, toda la informacin necesaria se almacena en la tabla de ruteo, el problema es determinar si la tabla tiene la informacin adecuada. La tabla de ruteo de una mquina puede examinarse con el comando netstat. La opcin -r del mismo muestra la tabla de ruteo (la opcin -n es para no convertir nmeros en nombres). En un FreeBSD, por ejemplo la salida resumida del comando netstat -rn sera
# netstat -rn Routing tables Internet: Destination Expire default 127.0.0.1 ..... 164.73.224/25 164.73.224.1 ed1 1039 164.73.224.40 164.73.224.60 ed1 840 164.73.224.128 164.73.224.130 ..... Gateway 164.73.224.28 127.0.0.1 link#1 8:0:2b:14:a1:21 48:54:e8:26:db:69 0:0:21:95:90:34 164.73.224.60 164.73.224.60 Flags UGSc UH UC UHLW UHLW UHLW UGHD UGHD Refs 33 16 0 5 1 4 0 0 Use 36932 45450 0 198078 1908914 0 2 801 lo0 ed1 ed1 Netif ed1 lo0

En un Linux RedHat, por ejemplo la salida del comando netstat -rn sera de la forma:
17 ludmilla ~ >netstat -rn Kernel IP routing table Destination Gateway irtt Iface 164.73.224.76 0.0.0.0 0 eth0 164.73.224.0 0.0.0.0 0 eth0 127.0.0.0 0.0.0.0 0 lo 0.0.0.0 164.73.224.28 0 eth0

Genmask

Flags

MSS Window 0 0 0 0 0 0 0 0

255.255.255.255 UH 255.255.255.128 U 255.0.0.0 0.0.0.0 U UG

Las rutas pueden ser estticas o dinmicas. Las rutas estticas se establecen manualmente con el comando route, por ejemplo:
route add -net 222.222.222.0 164.73.224.28 1

Las rutas estticas son una solucin confiable en redes pequeas pero el administrador debe conocer la topologa de la red. Dinmicamente las rutas pueden modificarse a travs de un demonio que se comunican con otros enrutadores intercambindose informacin para actualizar las tablas. En UNIX est disponible el routed en forma estndar y existe tambin el gated que tiene ms potencia.
Protocolos de enrutamiento

Los protocolos de enrutamiento son el lenguaje en que los demonios de ruteo intercambian informacin acerca de la red. Se clasifican en protocolos de enrutamiento exterior (IGP) y protocolos de enrutamiento exterior (EGP). Los IGP se usan al interior de lo que se llaman sistemas autnomos que son un conjunto de mquinas administradas por una autoridad comn. Los EGP se usan entre sistemas autnomos. La diferencia es que los IGP tratan de optimizar el enrutamiento entre una red compleja con muchos caminos alternativos y los EGP tratan de optimizar el enrutamiento teniendo en cuenta que los caminos son normalmente pocos porque los sistemas autnomos se interconectan entre si con pocos enlaces. Los diferentes protocolos utilizan distintas mtricas para estimar el costo de cada ruta. Los costos pueden medirse en saltos, retardo, etc. Los EGP en general no toman demasiado en cuenta los costos porque normalmente no hay demasiadas rutas alternativas pero si tratan de optimizar la posibilidad de alcanzar una determinada red. Hay varios protocolos utilizados comunmente. Algunos de ellos son: RIP - Routing Information Protocol OSPF - Open Shortest Path First IGRP - Interior Gateway Routing Protocol EGP - Exterior Gateway Protocol BGP - Border Gateway Protocol RIP es el protocolo usado por el demonio routed estndar en UNIX. El costo de las rutas se mide en saltos, donde cada salto es un enrutador por el cual pasan los paquetes. Hay dos versiones: la 1 no tiene soporte para mscaras y la 2 s. OSPF funciona bien en redes grandes y es ms difcil de configurar. IGRP es un protocolo propietario de Cisco previo al OSPF.

El estndar actual de EGP es el protocolo BGP en su versin 4.


Redirecciones ICMP

Aunque IP no se encarga del manejo de la tabla de ruteo tiene algunas funciones para facilitar la configuracin de enrutamiento. Si un enrutador enva un paquete a una mquina cuya direccin IP de origen es de la misma red que el destino, es claro que algo no funciona muy bien, ya que la mquina origen podra haber enviado directamente el paquete a la mquina destino sin pasar por el enrutador. El enrutador puede concluir que las tablas de ruteo de la mquina origen no estn muy ajustadas. En este caso el enrutador puede notificar al originador de este problema mediante un paquete ICMP del tipo redirect. Ese paquete dice: "Para dirigir paquetes a la mquina XX, debera enviarlos a travs a router YY" Si el originador es bien comportado, debera introducir en sus tablas la informacin indicada, para que los prximos paquetes dirigidos hacia XX sean enviados por YY, es decir por el camino directo. Este sistema permite configurar las mquinas con solamente una ruta por defecto y dejar que por el mecanismo de los ICMP redirects vayan aprendiendo las rutas alternativas. Obviamente no es muy eficiente porque hay un trfico extra para transmitir la informacin de redireccin.
Subredes

Las clases A y B permiten respectivamente redes de 16 millones y 64 mil mquinas respectivamente, pero es muy raro que existan redes con esa cantidad de mquinas. Entonces se utiliza un mecanismo para dividirlas que se llama "subnetting". El mtodo consiste en pedir prestados bits de la parte correspondiente a la numeracin de mquina para extender la parte de numeracin de red. Para especificar hasta donde va la parte de red y cual es la parte de mquina, se utiliza la mscara de subred. La mscara son 32 bits que van en 1 los correspondientes a la parte de red y en 0 los de la parte de mquina. La configuracin de la mscara de red se utiliza en el momento de configurar la interfaz de red mediante el comando ifconfig. Si no ponemos mscara el sistema la toma segn las normas para las clases A, B o C. Si se especifica la mscara, se sobreescribe el valor por defecto. La ventaja es que para el resto de la red se sigue siendo por ejemplo una clase B y solamente al interior de la organizacin es necesario conocer como se llega a las diferentes subredes.

CIDR: Classless Inter-Domain Routing

Con el crecimiento de Internet, se produce el fenmeno que las tablas de ruteo a nivel del backbone, crecen mucho porque hay muchsimas clases C para cada una de las cuales se requiere una entrada en la tabla. La idea del CIDR es extender el concepto de mscara para agrupar ahora varias redes clase C por ejemplo en una sola entrada en la tabla de ruteo. La idea es que si por ejemplo las redes 199.128.0, 199.128.1, 199.128.2 y 199.128.3 se acceden por la misma salida, puedo poner una sola entrada para una red que tiene la primer parte igual o sea con una mscara FFFFFC00.
Eleccin de una estrategia de enrutamiento

Hay en principio cuatro estrategias de enrutamiento:


Ninguno Rutas estticas Rutas estticas pero escuchando mensajes de RIP Enrutamiento dinmico

La topologa de la red tiene una influencia muy importante en la estrategia a tomar. Las diferentes topologas tienen diferentes requerimientos. Las siguientes reglas pueden ayudar a tomar la decisin de qu estrategia seguir.
Una red aislada no requiere reglas de enrutamiento Si hay una sola salida de esa red al mundo, las mquinas pueden tener solamente una ruta por defecto hacia el enrutador que comunica la red con el mundo. Un enrutador con pocas redes hacia un lado y con una salida al mundo por otro, puede configurarse con rutas estticas, aunque si hay ms de una alternativa sera deseable que escuchara mensajes de enrutamiento dinmico. Aunque se utilice RIP, tratar de que no enve actualizaciones a intervalos muy cortos para reducir el trfico. El routed normalmente hace eso y es posible entonces utilizar gated al cual puede configurrsele que enve informacin a determinados enrutadores y no por difusin. Para que los clientes escuchen informacin de ruteo en forma pasiva (sin informar de sus rutas) puede usarse el routed con la opcin -q. Tambin puede configurarse el gated en esa modalidad. El routed cree todo lo que escucha, con lo cual es ms confiable usar gated configurado en forma ms controlada. El enrutamiento dinmico debe ser usado donde hay fronteras polticas o administrativas de la red.

Configuracin de una red


Para configurar una red se requieren los siguientes pasos:
Planificar la estructura fsica y lgica de la red

Asignacin de direcciones IP Instalacin del hardware de red Configurar los equipos para que reconozcan y configuren las conexiones de red en tiempo de arranque Configurar las rutas estticas necesarias o los demonios de enrutamiento

Se abarca la configuracin en una red ethernet. Los aspectos de las conexiones punto a punto quedan fuera de este tema. Se supondr que ya se tiene configurada la interfaz desde el punto de vista hardware y se har referencia a la configuracin desde el punto de vista lgico del sistema.
Obtener y configurar las direcciones IP

Las direcciones IP deben ser nicas en Internet, por lo que son asignadas por un organismo central llamado IANA (Internet Assigned Numbers Authority) normalmente a travs de un proveedor de servicio (ISP). Hay que tener en cuenta que las direcciones IP no se asignan a mquinas sino a interfaces, por lo que una mquina con varias interfaces requerir varias direcciones IP. Adems de asignarle una direccin IP es recomendable asignar un nombre y configurarlo por lo tanto en el DNS (Domain Name Server).
Configurar las interfaces de red: ifconfig

El comando ifconfig se utiliza para configurar las direcciones IP, mscaras y direcciones de difusin de las interfaces de red. Normalmente es ejecutado en tiempo de arranque pero puede ejecutarse a mano para hacer cambios al vuelo de la configuracin de las interfaces. La sintaxis ms comn es:
ifconfig interfaz [familia] direccion_ip opciones

por ejemplo:
ifconfig en0 128.138.240.1 netmask 255.255.255.0 broadcast 128.138.240.255

interfaz indica el nombre del driver asignado por el sistema operativo a la interfaz de red. Para determinar las interfaces presentes (detectadas) en una mquina puede utilizarse el comando netstat -i. familia indica el tipo de protocolo de red que queremos asociar a la interfaz. En general lo que nos interesa es el tipo IP por lo que se especifica inet como opcin. La mayora de los UNIX toman inet por defecto por lo que es comn no poner nada en el campo de familia.

direccion_ip es la direccin IP asociada. Puede ser un nombre o una direccin en la notacin de puntos de Internet (Ejemplo: 128.138.240.1). Se recomienda poner las direcciones como nmero para evitar que la mquina no arranque por no poder averiguar la correspondencia entre nombre y nmero. opciones ms comunes:
netmask Para especificar la mscara de la red. Puede ser notacin decimal o hexadecimal.

broadcast Para indicar la direccin IP de difusin, normalmente el default es todos 1 en la parte de mquina de la direccin IP de acuerdo a la mscara. Puede ser notacin decimal o hexadecimal. ifconfig interfaz Presenta la configuracin actual de la interfaz. En muchos sistemas tambin ifconfig -amuestra la configuracin de todas las interfaces.
Configurar rutas estticas: route

Para configurar rutas estticas se utiliza el comando route que permite agregar y borrar rutas. Adems de las rutas agregadas a mano en la tabla de ruteo, puede estar corriendo algn demonio para mantener rutas dinmicas. Normalmente hay una red que siempre hay que configurar a mano y es la ruta por defecto. El comando route tiene la siguiente sintaxis simplificada:
route operacin [tipo] destino enrutador saltos

El argumento operacin dice que estamos haciendo (add, delete), el destino es el nmero de una red o una mquina o la palabra default. El enrutador es la mquina a la que hay que enviarle los paquetes dirigidos a esa red o mquina destino. Los saltos es la cantidad de saltos necesarios para llegar al destino. El tipo es para decir que tipo es el destino. Puede ser una red o una mquina. En algunas mquinas el tipo se indica con las palabras clave net o host y en otras con -net y -host. Hay otra opcin que es para borrar la tabla de ruteo que segn el sistema puede ser route -f o route flush. La configuracin actual de la tabla de ruteo puede verse con el comando netstat -rn.
Configuracin dinmica estndar: routed

El demonio routed es el estndar en UNIX como demonio de ruteo dinmico. Es muy simple pero es consumidor de recursos. La tendencia debera ser a pasarse al gated pero no todos los sistemas lo traen aunque est disponible en forma pblica para la mayor parte de las plataformas.

El routed solo sabe hablar RIP que es un protocolo simple que usa los saltos como mtrica para medir el costo de las diferentes rutas. Es un protocolo que funciona enviando paquetes de difusin "broadcast" cada 30 segundos publicando las rutas que conoce. La informacin que recibe de sus vecinos, la junta con las que posee y con las tablas de ruteo del kernel. El routed puede funcionar en modo servidor (invocado con -s) o en modo "quiet" (invocado con -q). En ambos modos escucha la informacin de RIP que le llega pero solo en modo servidor informa de las rutas que posee hacia los dems enrutadores. Si la mquina tiene ms de una interfaz, por defecto funciona en modo servidor y si tiene una sola por defecto funciona en modo "quiet". El routed no requiere configuracin y dinmicamente escucha RIP y actualiza las tablas de ruteo. Si se tiene solo un camino para salir al mundo puede ejecutarse con la opcin g para que propague la ruta hacia el mundo como ruta por defecto. Se puede usar el archivo /etc/gateways cuando se tiene ms de una salida. El archivo tiene lneas similares a comandos route.
Configuracin para el arranque automtico

En los sistemas ms viejos, la configuracin de la red se haca directamente modificando los archivos bsicos de arranque (/etc./rc o /etc./rc.local), actualmente casi todos los sistemas tienden a que no se modifiquen los scripts de arranque sino que se modifiquen algunos archivos de los cuales los scripts de arranque toman variables. En todos los sistemas se llaman diferente los archivos de configuracin o los scripts donde se encuentran las configuraciones de red.

Diagnstico de fallas de red


Hay muchas herramientas para determinar problemas de red TCP/IP en UNIX. En general la informacin que brindan es de bajo nivel por lo que es necesario saber como funciona el TCP/IP y como se realiza el enrutamiento.
Ver si las mquinas estn vivas: ping

El comando ping utiliza el mensaje ECHO_REQUEST del protocolo ICMP para pedir a una mquina que responda con un mensaje ECHO_REPLY del mismo protocolo para verificar que dicha mquina esta viva. Esto es solo una funcin de bajo nivel que no requiere procesamiento en la mquina destino. Sirve para probar:
Que la mquina este encendida Que tenga configurado el protocolo TCP/IP Que existan rutas para llegar desde la mquina origen a la destino y de la mquina destino a la origen.

Si alguna de estas condiciones no se cumple el comando ping informar que la mquina no responde. A su vez, que el comando ping informe que una mquina est viva solamente indica que se cumplen las condiciones establecidas pero no indica que funcionen o no otros protocolos de nivel superior u otros servicios que esa mquina deba o pueda brindar. Hay una versin ms vieja del comando ping que solamente dice si la mquina est viva o no. Las versiones ms modernas, quedan en un loop infinito hasta que se presione Control-C. En la versin vieja es posible que exista alguna opcin para entregar una salida extendida modo loop. Ejemplo ping -s (SunOS) o ping -l (Ultrix). Las salidas de la vieja versin del ping (Ejemplo en SunOS) son del tipo:
# ping ampere ampere.iie.edu.uy is alive #

En la versin moderna del ping, las salidas son del tipo:


# ping maxwell PING maxwell.iie.edu.uy (164.73.224.30): 56 data bytes 64 bytes from 164.73.224.30: icmp_seq=0 ttl=255 time=0.614 64 bytes from 164.73.224.30: icmp_seq=1 ttl=255 time=0.568 64 bytes from 164.73.224.30: icmp_seq=2 ttl=255 time=0.573 64 bytes from 164.73.224.30: icmp_seq=3 ttl=255 time=0.570 ^C --- maxwell.iie.edu.uy ping statistics --4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.568/0.581/0.614/0.019 ms #

ms ms ms ms

Cuando la mquina destino no responde, el reporte de las dos versiones del ping se pueden ver en los siguientes ejemplos
# ping acer no answer from acer.iie.edu.uy # # ping acer PING acer.iie.edu.uy (164.73.224.3): 56 data bytes ping: sendto: Host is down ping: sendto: Host is down ping: sendto: Host is down ping: sendto: Host is down ping: sendto: Host is down ping: sendto: Host is down ^C --- acer.iie.edu.uy ping statistics --7 packets transmitted, 0 packets received, 100% packet loss #

La salida detallada en caso de xito, contiene la direccin IP de la mquina destino, la secuencia de los paquetes ICMP y el tiempo de ida y vuelta de las respuestas.

Adems, luego del Control-C da las estadsticas de paquetes enviados y respuestas recibidas. Es interesante notar que si bien el IP no garantiza entrega de paquetes, normalmente a menos que la red est muy cargada, todos los paquetes deberan llegar a destino. Si se pierden paquetes puede ser por exceso de carga y es posible que los protocolos de mayor nivel igual funcionen aunque debern utilizar retransmisiones haciendo que las cosas funcionen ms lentamente. En caso de paquetes perdidos es importante tratar de detectar el motivo ya que puede deberse a problemas fsicos en la red y sera deseable poder solucionarlos.
Estado de la red: netstat

El comando netstat despliega informaciones varias sobre el estado de la red. En realidad de acuerdo a las opciones con que se invoque brinda informacin de diferentes aspectos de la red. Veremos los cuatro usos ms frecuentes del netstat.
Estado de las conexiones de red Configuracin de las interfaces de red Estado de la tabla de ruteo Estadsticas de los diferentes protocolos de red

Estado de las conexiones de red Sin argumentos el comando netstat despliega el estado de los puertos TCP y UDP activos (Con la opcin -a) despliega adems los inactivos. La salida es algo del estilo:
FreeBSD # netstat Active Internet connections Proto Recv-Q Send-Q Local Address Address (state) tcp 0 0 ampere.1946 obelix.unicamp.b.http ESTABLISHED tcp 0 0 ampere.3128 plata.1116 ESTABLISHED tcp 0 0 ampere.1945 obelix.unicamp.b.http ESTABLISHED tcp 0 0 ampere.1944 obelix.unicamp.b.http ESTABLISHED tcp 0 0 ampere.pop3 chui.1065 TIME_WAIT .... .... Linux RedHat # netstat

Foreign

Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 252 ludmilla.iie.edu.uy:ssh ampere.iie.edu.uy:3690 ESTABLISHED tcp 1 0 ludmilla.iie.edu.u:1431 ampere.iie.edu.uy:3128 CLOSE_WAIT tcp 1 0 ludmilla.iie.edu.u:1430 ampere.iie.edu.uy:3128 CLOSE_WAIT tcp 0 0 ludmilla.ii:netbios-ssn cachimba.iie.edu.u:1135 ESTABLISHED

Las direcciones son indicadas en la modalidad mquina:puerto. Los nombres de mquinas se obtienen a partir del Servidor de Nombres (DNS) y los nombres de puertos a partir del archivo /etc/services. Si se especifica al netstat la opcin -n no se hace la traduccin de nmeros a nombres ni de las mquinas ni de los puertos. Recv-Q y Send-Q son los tamaos de las colas para dicha conexin en la mquina local. Deberan tender a 0. El estado de la conexin solo tiene sentido para TCP puesto que UDP es un protocolo no orientado a conexin. Los estados posibles son: ESTABLISHED (conexin establecida), LISTENING (para servicios que estn esperando por conexiones, normalmente no aparecen a menos que usemos la bandera -a) o TIME_WAIT (para conexiones en proceso de cierre). Hay otros estados posibles en caso de fallas, como por ejemplo SYN_SENT que significa que estamos tratando de establecer una conexin con una mquina que seguramente no responde. Configuracin de las interfaces de red Invocado con la opcin -i el comando netstat muestra la informacin de las interfaces de red. Ejemplos:
FreeBSD # netstat -i Name Mtu Network Address Opkts Oerrs Coll ed1 1500 <Link> 48.54.e8.26.db.69 8972011 2 269894 ed1 1500 164.73.224/25 ampere 8972011 2 269894 lp0* 1500 <Link> 0 0 0 tun0* 1500 <Link> 0 0 0 sl0* 552 <Link> 0 0 0 ppp0* 1500 <Link> 159304 0 0 lo0 16384 <Link> 3857677 0 0 lo0 16384 your-net localhost 3857677 0 0

Ipkts Ierrs 9665343 9665343 0 0 0 155934 3857677 3857677 525 525 0 0 0 1719 0 0

# Linux RedHat # netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OVR Flg eth0 1500 0 2450985 0 0 0 0 BRU lo 3924 0 148 0 0 0 0 LRU

TX-OK TX-ERR TX-DRP 1969656 148 0 0 0 0

Las direcciones se brindan en formato simblico (nombres) a menos que usemos la opcin -n. Las colisiones indican estado de carga de la red (deberan ser menores de un 3% de los paquetes procesados en una red poco cargada). Los Ierrs y Oerrs se deben normalmente a problemas de cables. Las interfaces indicadas con un asterisco (*) despus de su nombre indican que no estn configuradas. Si se especifica un nmero luego del netstat -i nmero se brinda la estadstica en el nmero de segundos indicado de los paquetes entrantes, salientes, colisiones y errores. Se puede hacer que la salida refiera solamente a una interfaz de red utilizando la bandera -I interfaz. Estado de la tabla de ruteo El comando netstat -r brinda informacin de la tabla de ruteo del kernel. El siguiente ejemplo muestra la salida en un FreeBSD, ejecutado con la opcin -n para que brinde la salida en forma numrica.
# netstat -rn Routing tables Internet: Destination Expire default 127.0.0.1 164.73.224/25 164.73.224.28 ed1 864 164.73.224.29 164.73.224.30 ed1 1121 164.73.224.40 164.73.224.60 ed1 952 164.73.224.127 164.73.224.130 164.73.224.255 .... Gateway 164.73.224.28 127.0.0.1 link#1 0:40:95:15:89:d link#1 8:0:2b:bc:f2:2a 48:54:e8:26:db:69 0:0:21:95:90:34 ff:ff:ff:ff:ff:ff 164.73.224.60 164.73.224.60 Flags UGSc UH UC UHLW UHLW UHLW UHLW UHLW UHLWb UGHD UGHD Refs 19 13 0 20 1 4 1 2 1 0 1 Use 29342 9712 0 33 3081 32305 2164094 0 3291 524 2009 lo0 ed1 ed1 ed1 Netif ed1 lo0

Los destinos (destination) y enrutadores (gateway) se indican en nmeros IP o nombres segn se utilice la opcin -n o no. Las banderas (Flags) caracterizan la ruta y sus significados son:
U - (Up) Activa

G - (Gateway) El destino es un enrutador H - (Host) El destino es una mquina. D - Resultado de un ICMP Redirect G y H juntas significa que es una ruta a una mquina pasando por un enrutador. El campo Refs es el nmero de conexiones TCP que estn usando esa ruta. El campo Use es el nmero de paquetes enviados por esa conexin. El campo Netif o If es la interfaz usada para esa ruta. En la implementacin del FreeBSD pueden observarse entradas asociadas con direcciones de capa de enlace de datos. Esto es porque el sistema usa la misma tabla para almacenar la informacin de ruteo y la tabla de ARP. Estadsticas de los diferentes protocolos de red El comando netstat -s muestra estadsticas de diferentes protocolos IP, ICMP, TCP y UDP desplegando los valores de algunos contadores existentes en el cdigo de los protocols de red. Ejemplo OSF/1 3.2c:
# netstat -s ip: 152480 total packets received 0 bad header checksums 0 with size smaller than minimum 0 with data size < data length 0 with header length < data size 0 with data length < header length 1356 fragments received 0 fragments dropped (dup or out of space) 4 fragments dropped after timeout 0 packets forwarded 722 packets not forwardable 0 redirects sent icmp: 11 calls to icmp_error 0 errors not generated 'cuz old message was icmp Output histogram: echo reply: 2

destination unreachable: 11 0 messages with bad code fields 0 messages < minimum length 0 bad checksums 0 messages with bad length Input histogram: destination unreachable: 84 source quench: 1 routing redirect: 3 echo: 2 time exceeded: 3 address mask request: 3 2 message responses generated igmp: 0 0 0 0 0 0 0 0 0 tcp: 78664 packets sent 67591 data packets (20378697 bytes) 1005 data packets (1073929 bytes) retransmitted 8432 ack-only packets (8247 delayed) 0 URG only packets 3 window probe packets 1489 window update packets 144 control packets 76819 packets received 51806 acks (for 20382773 bytes) 2125 duplicate acks 0 acks for unsent data 55295 packets (7943243 bytes) received in-sequence 92 completely duplicate packets (4815 bytes) 56 packets with some dup. data (249 bytes duped) 172 out-of-order packets (22545 bytes) 0 packets (0 bytes) of data after window 0 window probes 618 window update packets 3 packets received after close 0 discarded for bad checksums 0 discarded for bad header offset fields 0 discarded because packet too short 29 connection requests 91 connection accepts 120 connections established (including accepts) 131 connections closed (including 13 drops) 3 embryonic connections dropped 48215 segments updated rtt (of 49036 attempts) 484 retransmit timeouts 0 connections dropped by rexmit timeout 2 persist timeouts 0 keepalive timeouts 0 keepalive probes sent 0 connections dropped by keepalive udp: 61324 packets sent messages received messages received with too few bytes messages received with bad checksum membership queries received membership queries received with invalid field(s) membership reports received membership reports received with invalid field(s) membership reports received for groups to which we belong membership reports sent

73826 packets received 0 incomplete headers 0 bad data length fields 0 bad checksums 0 full sockets 5082 for no port (5071 broadcasts, 0 multicasts)

Encaminamiento de paquetes: traceroute

El comando traceroute permite ver la secuencia de enrutadores por los que pasa un paquete IP para alcanzar un determinado destino. Hay muchas mquinas que lo brindan como herramienta en el sistema operativo (IRIX, OSF/1, BSDi, FreeBSD) pero existen fuentes disponibles para muchos sistemas. La instalacin puede requerir una modificacin del ncleo. La sintaxis es:
traceroute mquina

La mquina puede estar indicada mediante su nmero IP o su nombre. Es posible adems incorporar la opcin -n en la lnea de comando con la cual no se hace la correspondencia entre nombres y nmeros IP de las mquinas involucradas. Hay adems otra cantidad de opciones de uso menos frecuente. La salida del traceroute es algo del estilo:
# traceroute seciu.edu.uy traceroute to seciu.edu.uy (164.73.128.5), 30 hops max, 40 byte packets 1 IIE-FING-GW (164.73.224.28) 1.720 ms 1.812 ms 1.630 ms 2 FING-RAU-GW.fing.edu.uy (164.73.32.121) 3.643 ms 3.627 ms 3.726 ms 3 164.73.162.113 (164.73.162.113) 286.303 ms 111.015 ms 28.714 ms 4 seciu.uy (164.73.128.5) 33.604 ms 26.355 ms 33.572 ms

En la salida se observa por un lado los nombres y direcciones IP de los enrutadores por los que pasa un paquete originado en la mquina que corre el tcpdump y el destino especificado en la lnea de comandos. Adems de nombres y direcciones IP, aparecen tres valores del tiempo de ida y vuelta (round-trip time, RTT) para alcanzar los enrutadores de la lista. El comando funciona enviando un paquete a destino con un tiempo de vida de 1 salto. Al llegar al primer enrutador, este deber descartarlo y enviar un mensaje ICMP al origen indicando que este paquete fue descartado. De esta forma el originador obtiene la direccin IP del primer salto. Ahora construye un paquete con tiempo de vida 2 que ser descartado por el segundo enrutador y as sucesivamente. Para cada salto, el traceroute envia 3 paquetes y da el tiempo de ida y vuelta de cada uno (ver ejemplo). Si algn enrutador no responde igual puede seguir al siguiente salto y pone asteriscos. Si los 3 paquetes vuelven de diferentes enrutadores, se despliegan las direcciones de cada uno de ellos.

Monitores de trfico: tcpdump, snifit, snoop, etherfind, etherreal.

Estos programas son conocidos como espas de red y lo que hacen es mirar los paquetes que pasan por una conexin IP. Se pueden establecer criterios de inspeccin basados en mquinas, protocolos, servicios, etc. El tcpdump es una herramienta muy potente disponible en casi todas las variedades de sistemas BSD y es distribuido dentro del sistema en varios UNIX. El etherfind es un comando disponible en SunOS y la versin de solaris es el snoop. Ambos son similares al tcpdump. Como los espas deben poder ver los paquetes dirigidos a otras mquinas de la red el sistema de base debe dar los mecanismos para que esto pueda realizarse. Para esto debe existir la posibilidad que el hardware de red pueda ver todos los paquetes. Esto, en un medio de difusin tipo Ethernet es posible. Otro mecanismo adicional que debe proveer el sistema es el pasaje de los paquetes que no estn dirigidos a la mquina a las capas superiores de la red. Normalmente una mquina define a nivel de hardware si los paquetes son para ella o no (contienen su direccin IP o son broadcasts) y si no lo son los descarta. Para que el tcpdump pueda acceder a todos los paquetes de la red, es necesario que la interfaz de red se configure en modo promiscuo lo cual significa que pasar a las capas superiores los paquetes destinados a ella as como los que no estn destinados a ella de forma tal que el tcpdump pueda verlos. Estas herramientas son muy tiles para detectar problemas en la red.
Inspeccin de tablas de ARP

El comando arp permite ver la tabla de correspondencia del kernel del protocolo ARP. Estas tablas se actualizan automticamente. Opciones:
arp -a permite ver la totalidad de la tabla.

arp -d mquina borra la entrada de una mquina. arp -s mquina direccin agrega una entrada en la tabla. arp -f archivo agrega entradas desde un archivo de configuracin. arp mquina muestra la entrada para esa mquina. En general en una Ethernet no tiene demasiada utilidad para detectar problemas, pero si puede ayudar en caso de tarjetas de red con problemas.

Distribucin de archivos - NIS.


Administracin de mquinas en red Archivos de configuracin Distribucin de archivos rdist rsync expect NIS, servicio de informacin de red Netgroups NIS y archivos locales Ventajas y desventajas de NIS Funcionamiento de NIS Comandos y demonios de NIS Implantacin de un domino NIS NIS+ LDAP Ejercicios e Investigacin Bibliografa y referencias.

Administracin de mquinas en red.


La configuracin de una mquina UNIX depende de un cierto nmero de archivos de texto. Mantener la configuracin de un sistema formado por una red de mquinas UNIX equivale a mantener coordinados los ajustes de estos archivos de configuracin en todas las mquinas. En cuanto el nmero de mquinas involucradas aumenta un poco la tarea empieza a hacerse difcil. En organizciones medianas o grandes suele haber grupos de mquinas de configuracin similar, lo cual permite usar archivos de configuracin similares entre mquinas del mismo grupo.

Existen dos enfoques bsicos para manener la configuracin de mquinas en una red:
instalar una copia maestra de los archivos de configuracin en una mquina y distriburla hacia las otras por copia. Esto es simple y funciona en todos los sistemas, pero es preciso distribuir los archivos peridicamente o ante cada modificacin.

prescindir de los archivos de configuracin locales e implementar un servidor central de configuraciones al cual se referirn todas las mquinas. No es una solucin simple, pero no hay problemas de actualizacin, ya que todas las mquinas toman su configuracin del servidor central. En contrapartida, el mal funcionamiento del servidor central puede colgar toda la red. Han habido mltiples intentos de crear bases de datos para la administracin de mquinas en una red. Ninguna es an completamente satisfactoria: cuando son seguras y escalables resultan difciles de implementar; las soluciones simples no ofrecen buena seguridad y tienen un alcance limitado.

Archivos de configuracin.
De la multiplicidad de archivos de configuracin existentes en una mquina UNIX, slo pueden ser compartidos entre diferentes mquinas algunos de ellos. Los archivos ms comnmente compartidos son:

Archivo
/etc/passwd /etc/shadow1 /etc/group /etc/hosts

Funcin base de datos de informacin de cuentas de usuarios contraseas encriptadas de usuarios, caducidad de contraseas definicin de grupos UNIX mapeo de nombres a direcciones IP de mquinas

/etc/networks1 asocia nombres en texto con direcciones de red IP /etc/services lista los nmeros de puerto para servicios de red bien conocidos /etc/protocols mapeo de nombres en texto a nmeros de protocolos /etc/ethers1 /etc/aliases

mapeo entre direcciones Ethernet y nombres de mquinas nombres usados como alias para correo electrnico lista los nmeros de identificacin de servicios RPC (Remote Procedure Control)

/etc/rpc

/etc/netgroup1 define colecciones de usuarios, mquinas y redes /etc/printcap base de datos de informacin de impresoras /etc/termcap

base de datos de tipos de terminal

1. No usado en todos los sistemas.

El uso de estos archivos se implementa a travs de funciones definidas en la biblioteca estndar de C. El archivo /etc/passwd es accedido por las funciones getpwuid, getpwnam, getpwent; estas funciones manejan el archivo /etc/passwd devolviendo al programa de usuario la informacin solicitada. Para pasar de un sistema de consulta directa de archivos a una base de datos compartida alcanza con modificar estas rutinas de la biblioteca.

Distribucin de archivos.
La solucin de copiar los archivos de configuracin a todas las mquinas puede no ser elegante, pero es simple, funciona en todo tipo de mquinas, es fcil de implementar y mantener, minimiza la interdependencia entre mquinas, se adapta bien a grupos de mquinas de configuracin similar (secciones, departamentos, institutos). Cuando un problema puede resolverse de manera simple debe haber buenas razones para implementar una solucin compleja.

El procedimiento de distribucin consiste en copiar peridicamente los archivos de configuracin desde un servidor maestro hacia todas las dems mquinas. Existen dos esquemas posibles:
por empuje (push): el servidor maestro copia peridicamente los archivos modificados hacia las restantes mquinas, lo quieran stas o no. Mantiene los archivos en un slo lugar, permitiendo un buen control de su contenido. Las mquinas cliente deben permitir al servidor maestro el acceso; esto deja una brecha de seguridad. por descarga (pull): las mquinas cliente se actualizan a voluntad desde el servidor maestro. Es menos centralizado, pero es ms seguro y funciona an a travs de fronteras con diferentes polticas o autoridades administrativas.
rdist

El comando rdist funciona en base a un archivo de texto donde se establecen los archivos a distribuir; la ejecucin de rdist copia hacia los destinatarios los archivos desactualizados, optimizando la transferencia y conservando los atributos. Permite incluso ejecutar comandos en la mquina remota para activar los cambios includos en el archivo recientemente copiado.
rdist

ofrece problemas de seguridad: corre sobre rsh, confiando en su esquema de autenticacin. Debe implementarse, al menos, un "TCP wrapper", para limitar el contacto con rlogind a una lista de mquinas. rlogind es el servidor para rsh, rcp y rlogin, necesario tambin para rdist. Correr rlogind abre las mquinas a diversos tipos de ataque. En Linux es posible sustituir rsh por ssh, aunque corriendo sin contrasea; no es lo mejor, pero ofrece dos ventajas: ssh usa criptografa de clave pblica para autenticar el anfitrin maestro, y encripta todo el intercambio realizado por rdist, eliminando la posibilidad de espionaje sobre la transferencia. Ejemplo de archivo de distribucin:

# definicin de variables ARCH_SIST = (/etc/passwd /etc/group /etc/mail/aliases) MAQS_TODO = (alamo pino baobab) MAQS_ALGO = (gingko arauca) # mquinas que reciben todos los archivos todo: {$ARCH_SIST} -> ${MAQS_TODO} notify jperez; special /etc/mail/aliases "/usr/bin/newaliases"; # mquinas que reciben algunos archivos algo: {$ARCH_SIST} -> ${MAQS_ALGO} except /etc/mail/aliases notify mlopez@alamo;

Bajo el rtulo todo se indica copiar los archivos en ARCH_SIST hacia las mquinas MAQS_TODO, notificando por correo electrnico a jperez en las mquinas destino, y ejecutando luego el comando /usr/bin/newaliases. Bajo el rtulo algo se copian los archivos en ARCH_SIST menos /etc/mail/aliases, y se notifica al usuario mlopez en la mquina alamo.
rsync rsync es una versin potenciada de rcp capaz de conservar enlaces, permisos y fechas de

modificacin. Es ms seguro que rdist: permite restringir acceso remoto a ciertos directorios, y exigir al maestro una contrasea; puede correrse desde inetd, o tambin usando ssh. Por ejemplo, el comando
rsync -gopt --passwdord-file=/etc/rsync.pwd \ /etc/passwd gingko::/etc

transfiere el archivo /etc/passwd a la mquina gingko conservando permisos, dueo y fechas de modificacin (-gopt); el doble :: en gingko::/etc obliga a contactar a rsync en el servidor remoto directamente en el puerto 873 en lugar de usar rsh; la conexin se autentica por la contrasea contenida en el archivo /etc/rsync.pwd.

La configuracin de rsync demanda varias tareas, tanto en servidores como en clientes. En Linux viene con la distribucin; los fuentes pueden bajarse de rsync.samba.org.
expect

Un sistema de actualizacin por parte del cliente puede implementarse colocando los archivos en un directorio accesible va ftp y empleando el comando expect para automatizar el proceso. expect es un conjunto de extensiones para el lenguaje de scripts Tcl (Tool Command Language), de sintaxis relativamente simple; no se requiere mucho conocimiento de Tcl para usar expect.

Ejemplo de srcript Tcl para expect:


spawn /usr/bin/ftp servidor_red while 1 { expect { "Name: " {send "cliente_red\r"} "Password: " {send "cliente_contrasea\r"} "ftp> " {break} "failed" {send_user "Login rechazado.\r"; exit 1}

timeout {send_user "Tiempo inactivo.\r"; exit 2} }} send "lcd /etc\r" expect "ftp> " {send "cd pub/sisarchs\r"} expect "ftp> " {send "get passwd\r"} expect "ftp> " {send "quit\r"; send_user "\r"} exit 0

El script arranca un proceso ftp sobre el servidor de red, iniciando el login de un cliente con contrasea; se capturan e informan errores de login e inactividad; finalmente, se emiten comandos ftp uno a uno hasta cerrar la sesin. Los fuentes de expect estn disponibles en expect.nist.gov.

NIS, servicio de informacin de red.


NIS fue la primera base de datos administrativa para sistemas informticos. Lanzado por Sun en los '80 con el nombre de Yellow Pages (pginas amarillas, en anlogo con las de la gua telefnica), hubo de cambiar este nombre por ser marca registrada en Inglaterra, pero muchos comandos siguen comenzando por yp. A comienzos de los '90 Sun implement NIS+ como sustituto de NIS, agregando mayor seguridad. No obstante la similitud de nombres, se trata de dos sistemas totalmente diferentes, incompatibles entre s. NIS+ puede dar servicio limitado a clientes NIS si se le indica, aunque se pierde la seguridad intrnseca de NIS+. Linux y FreeBSD no soportan NIS+; Solaris y HP-UX soportan NIS+; todos soportan NIS.

NIS proporciona el mismo nivel de control que la copia de archivos. Se designa una mquina como servidor maestro NIS. All se mantienen como copias autoritativas los archivos de configuracin, en el mismo formato y lugar, editndolos con un editor de texto como habitualmente.Un proceso servidor hace disponibles el contenido de estos archivos hacia la red. El conjunto de un servidor maestro NIS y sus clientes se denomina un "dominio NIS". No debe confundirse con el "dominio DNS", algo totalmente distinto, y menos con el concepto de dominio en Windows NT/2000. Para mejorar la eficiencia en las bsquedas, los mapas NIS son preprocesados por las rutinas de "hashing" ndbm (gdbm en GNU): luego de editar los archivos en el servidor maestro, NIS los convierte al formado ndbm; esto se hace invocando make en el directorio de NIS, o un script llamado ypmake en algunos UNIX. El formato ndbm admite slo una clave para cada entrada, por lo que un archivo de sistema puede dar lugar a varios mapas NIS: el archivo /etc/passwd genera los mapas passwd.byuid, ordenada por uid, y passwd.byname, ordenada por nombre de usuario. NIS permite replicar sus mapas en uno o ms servidores esclavos. Esto aligera la tarea del servidor maestro y mantiene la red en funcionamiento cuando el servidor maestro no est disponible. Cuando se modifican los mapas en el servidor maestro, stos son empujados hacia los servidores esclavos. Para el cliente, un servidor esclavo es indistinguible de un servidor maestro. Los clientes ubican los servidores NIS por difusin. Debe haber un servidor NIS por cada subred. Si no hay servidor NIS activo en una red, los clientes pueden quedar colgados. El comando ypset permite apuntar un cliente hacia un servidor especfico.

Grupos de red ("netgroups"). Los grupos de red, "netgroups" o "netgrupos" son una forma abreviada de designar un conjunto de usuarios, mquinas y redes para su referencia en otros archivos del sistema. Se definen en /etc/netgroup; son compartidos como un mapa NIS de prioridad global. El formato de una entrada en /etc/netgroup es nombre_grupo lista_miembros La lista de miembros es un conjunto de tradas (mquina, usuario, dominio) separadas por espacios; la ausencia de mquina, usuario o dominio implica todos; un signo - indica ninguno. La situacin tpica en la realidad es definir los grupos por mquinas:
oficina15 oficina17 servidores admins (valizas,,) (lantis2,,) (colorado,,) (ampere,,) (maxwell,,) (gauss,,) (ohm,,) oficina15 oficina17

Los netgrupos pueden usarse en /etc/exports, /etc/hosts.equiv y .rhosts; en /etc/passwd puede usarse incluyendo +@netgrupo en una lnea aislada. Colocar + en /etc/hosts.equiv es una enorme brecha de seguridad, como puede tambin serlo el uso de netgrupos en este archivo y en .rhosts. El uso ms frecuente es en /etc/exports, para definir conjuntos de mquinas habilitadas para montar recursos va NFS. NIS y archivos locales. En la mayora de los sistemas NIS puede ser suplementado por la informacin local del cliente, al menos para algunos archivos. El enfoque tradicional admite dos tipos de situacin: prioridad local: los archivos locales tienen precedencia sobre NIS; prioridad global: NIS tiene precedencia sobre los archivos locales. Usualmente, slo /etc/passwd y /etc/group tienen precedencia sobre NIS. En estos casos, el contenido de los mapas NIS para usuarios y grupos debe ser includos en los archivos locales a travs de una convencin: un signo + aislado en una lnea de /etc/passwd o /etc/group incorpora todo el mapa NIS a los usuarios o grupos locales; una lnea con +@netgroup incorpora solo ese netgroup; una lnea con +nombre incorpora slo ese nombre. El archivo /etc/hosts es consultado en el arranque, cuando todava no hay NIS activo. Los restantes archivos locales son ignorados por NIS.

La tendencia actual es definir en un archivo centralizado, /etc/nsswitch.conf, las fuentes de informacin para cada tipo de entidad, con entradas tales como
passwd: files nis hosts: files dns group: files

donde las fuentes se prueban en orden hasta la primera que valida el pedido. Segn estas lneas, un login de usuario se contrasta primero contra /etc/passwd y luego, si stos no contienen al usuario, contra el mapa NIS correspondiente; un nombre de mquina se busca primero en /etc/hosts, y si este fracasa se interroga al servicio DNS. El archivo nsswitch.conf permite configurar acciones en casos de falla: continuar buscando en la siguiente fuente (continue) o retornar en falta (return) si la fuente presente no

responde en algunas de las opciones previstas: UNAVAIL (fuene no disponible o baja), NOTFOUND (la fuente no reconoce el pedido), TRYAGAIN (fuente ocupada), SUCCESS (el pedido fue contestado). Ejemplo:
hosts: files dns [NOTFOUND=return] nisplus

busca en /etc/hosts, si ste falla busca en DNS, si ste falla vuelve sin reconocer el pedido, ni buscar en NIS+. Este archivo es una forma segura y prolija de controlar las fuentes de validacin.

Ventajas y desventajas de NIS.


es entendible por humanos: se siguen editando los mismos viejos archivos, slo hay que aprender unos comandos nuevos, no requiere conocer la estructura interna de los mapas. no admite enlace de dominios: una red grande puede dividirse en dominios, pero cada uno debe ser administrado separadamente. NIS consume un cierto ancho de banda: no tiene capacidad de cache, toda consulta debe realizarse a un servidor; los mapas modificados deben distriburse. un servidor esclavo fuera de servicio puede perder una actualizacin; debe implementarse una rutina de control de actualizacin; an as, dos versiones diferentes de un mapa pueden estar siendo servidas al mismo tiempo, con los clientes viendo una u otra aleatoriamente. NIS no es seguro: cualquier mquina puede manifestarse como servidor de un dominio, cualquier usuario puede leer los mapas NIS.

Funcionamiento de NIS.
Los mapas de NIS estn contenidos habitualmente en /var/yp, donde se crea un directorio con el nombre del dominio NIS para contener los archivos. Cada mapa NIS comprende dos archivos, uno de extensin .dir y el otro de extensin .pag. En el dominio instituto los archivos ndbm para /etc/passwd seran
/var/yp/instituto/passwd.byname.dir /var/yp/instituto/passwd.byname.pag /var/yp/instituto/passwd.byuid.dir /var/yp/instituto/passwd.byuid.pag

Para crear estos archivos ndbm, generalmente basta con los comandos
cd /var/yp make

que invoca un archivo Makefile. Los archivos ndbm contienen "agujeros"; pueden expandirse significativamente al ser copiados. Esquema de consulta NIS:

Comandos y demonios de NIS


M: servidor NIS maestro; S: servidor NIS esclavo; C: cliente NIS Programa
ypserv

En MS

Descripcin demonio servidor NIS, se activa en el arranque de la mquina; recibe y contesta consultas de clientes

ypbind

demonio cliente NIS, se activa en el arranque de la mquina; consultado por la biblioteca C para ubicar un servidor NIS en el dominio; la bilioteca MSC contacta luego ypserv directamente; las mquinas se mantienen fieles al primer servidor ubicado fija el nombre de dominio NIS en que se encuentra la mquina; corre en el arranque baja mapa desde el servidor maestro; slo si est desactualizado demonio en el servidor maestro que atiende ypxfr avisa a los servidores esclavos que deben actualizarse ejecutando ypxfr crea mapa ndbm desde archivo llano; corrido por make reconstruye mapas ndbm de los archivos modificados; en otras versiones,

domainname MSC ypxfr ypxfrd yppush makedbm ypmake

S M M M M

se debe invocar make en el directorio NIS


ypinit ypset ypwhich yppoll ypcat ypmatch yppasswd ypchfn ypchsh

MS configura una mquina para ser servidor maestro o esclavo MSC hace que ypbind se conecte a un servidor NIS especfico MSC determina qu servidor NIS est usando la mquina local MS determina la versin de un mapa que est usando un servidor MSC muestra valores contenidos en un mapa NIS MSC muestra entradas para una clave indicada en un mapa NIS MSC cambia la contrasea de usuario en el servidor maestro NIS MSC cambia informacin de usuario en el servidor maestro NIS MSC cambia shell de login de usuario en el servidor maestro NIS

yppasswdd MSC servidor para yppasswd, ypchfn, ypchsh ypupdate

MS servidor para actualizar mapas NIS, manejado por inetd

El mapa especial ypservers es construdo automticamente al implantarse el dominio; sirve para conocer los servidores esclavos a los que deben distriburse los mapas.

Implantacin de un dominio NIS.


NIS debe iniciarse en el servidor maestro, luego en cada servidor esclavo. El nombre de dominio NIS debe fijarse en todas las mquinas, as como ajustar el archivo nsswitch.conf para consultar los mapas. Configuracin de servidor NIS. Para configurar el servidor NIS, ejecutar los comandos
cd /var/yp domainname iie-nis ypinit -m ypserv # # # # directorio NIS fija el nombre de dominio NIS inicializa como servidor maestro arranca servidor NIS

Al inicializar el servidor maestro con ypinit -m, ya pide la lista de servidores esclavos que incluir en el archivo ypservers.
Iniciar servidores esclavos. En los servidores esclavos, ejecutar los comandos
cd /var/yp ypinit -s ampere ypserv # directorio NIS # fija servidor maestro, obtiene mapas # arranca servidor esclavo NIS

En cada esclavo deben ingresarse entradas en crontab para obtener copias actualizadas de los mapas del servidor maestro. Como no todos los mapas cambian con la misma frecuencia, si se quiere preservar el ancho de banda, debe implementarse una agenda diferencial. Este script trasfiere todos los mapas:
#!/bin/csh -f set eldominio = `/usr/bin/domainname` cd /var/yp/$eldominio foreach map (`/bin/ls`) /usr/lib/yp/ypxfr $map end

Algunos sistemas proveen scripts tales como ypxfr_1perday, ypxfr_2perday, ypxfr_1perhour para transferir mapas NIS a diferentes intervalos. Para permitir a los usuarios cambiar sus contraseas NIS con yppasswd debe correrse el demonio yppasswd en el servidor maestro del dominio.
Configuracin de Cliente NIS. Los servidores de un dominio generalmente son tambin clientes; el dominio NIS se fija u obtiene con el comando domainname. Todos los clientes deben disponer de una versin mnima de los archivos passwd, group y hosts con los usuarios y grupos habituales; hosts debe existir para el arranque, cuando an no hay NIS ni DNS. Todos los clientes deben asimismo tener una configuracin adecuada en nsswitch.conf, para saber qu deben consultar al validar, o en su defecto contener las entradas con + en passwd y group. El servidor maestro del dominio no debe contener entradas con +.

El arranque manual de un cliente NIS puede hacerse con los comandos


domainname iie-nis ypbind # fija el nombre de dominio NIS # arranca demonio cliente NIS

Para el arranque automtico, las mquinas deben ser informadas que pertenecen a un dominio NIS. Esto puede hacerse con el comando domainname o nisdomainname corrido desde algn script de arranque. Algunas versiones verifican la existencia del archivo /etc/defaultdomain; si existe toman el nombre de dominio desde l. La forma de arranque de NIS vara entre sistemas. Las lneas siguientes proveen un ejemplo de comandos a incluir en un script de arranque; el nombre del dominio ya fue fijado para esta mquina; se obtiene con el comando domainname.
# verificar si esta mquina sirve el dominio if [ -f /usr/sbin/ypserv -a -d /var/yp/`domainname`]; then /usr/sbin/ypserv; (echo -n ' ypserv') > /dev/console fi # arrancar ypbind if [ -f /usr/sbin/ypbind ]; then /usr/sbin/ypbind; (echo -n ' ypbind') > /dev/console fi

NIS+.
NIS+ corrige algunas deficiencias de NIS y agrega otras propias. Est orientado a redes grandes, implementa seguridad, maneja eficientemente las actualizaciones, permite administrar diversos dominios desde cualquier punto de la red. Es una base de datos distribuda de alta complejidad, difcil de administrar, soportada por algunos proveedores mayores; no ha migrado hacia las versiones de dominio pblico. An organizaciones grandes evitan usarlo.

Caractersticas de NIS+:
emplea un sistema jerrquico de dominios y subdominios, permitiendo delegar autoridad administrativa. Una mquina pertenece a un dominio, pero puede obtener informacin de mquinas en otros dominios. emplea "tablas" en lugar de "mapas", permitiendo bsquedas por diferentes campos; por cada archivo de sistema se genera slo una tabla. no emplea archivos llanos; una vez transferidos los archivos al formato NIS+, los cambios en los archivos llanos no tienen influencia; es preciso editar las tablas de NIS+ con comandos especiales. maneja mejor los servidores esclavos, llamados rplicas; las rplicas son actualizadas en forma incremental, con un esquema autenticacin similar al de login para entrar en contacto con el servidor maestro. se basa en el RPC seguro de Sun: autentica en base al encriptado de claves pblicas. Los objetos NIS+ pueden ser tablas, columnas o entradas; todos los objetos tienen dueo y grupo; los permisos se fijan para el dueo, el grupo, el mundo y la categora especial "nobody" para quienes no pueden exhibir credenciales, como ser clientes NIS. Tanto los usuarios como las mquinas pueden ser "principales RPC", entidades capaces de exhibir credenciales. Al acceder a NIS+ como root, se usan las credenciales de la mquina en lugar de las personales. Desde el punto de vista del cliente, NIS+ se comporta como es habitual en UNIX, sin transparentar su complejidad. Aunque no es lo mismo, NIS+ se parece mucho a DNS, con quien comparte la organizacin jerrquica en dominios. Los nombres de dominio NIS+ y DNS suelen ser el mismo; esto aumenta la confusin entre ambos. Un dominio NIS+ es un directorio con subdirectorios org_dir y groups_dir; en org_dir van las tablas administrativas y en groups_dir las credenciales de los principales del dominio.

LDAP.
Adems de los archivos del sistema existe otro tipo de informacin cuya distribucin debe ser amplia: guas telefnicas, direcciones de correo electrnico, informacin a compartir con el mundo exterior. Estas necesidades pueden ser respondidas por un servicio general de directorios; ste debe ser capaz de asimilar cualquier conjunto de datos con ciertas caractersticas: objetos de datos relativamente chicos; extensa replicacin y almacenamiento en cach; informacin basada en atributos; lectura frecuente, modificacin escasa;

la bsqueda como operacin frecuente y preferente. El procotolo LDAP (Lightweight Directory Access Protocol), otrora parte del conjunto de protocolos de red de OSI, est siendo promovido como servicio de directorios. Actualmente (ao 2000) en su versin 3 experimental, est lejos an de proveer universalidad suficiente. Las aplicaciones reales son todava escasas como para recomendar su instalacin en produccin. No obstante, existe considerable trabajo de investigacin y desarrollo en torno a este tema; en el futuro puede llegar a sustitur con ventaja los modos tradicionales de compartir archivos.

Ejercicios e investigacin.
1. Analice la necesidad de compartir archivos de configuracin en su red. Cuntos servidores tiene? Los usuarios deben ingresar a todos? Sera posible el mantenimento manual? Qu riesgos se corren?

2. Estudie y proponga un esquema de copia de archivos con comandos habituales de UNIX, incluyendo una actualizacin peridica. Analcelo luego crticamente, atendiendo especialmente a la posibilidad de mantener versiones desactualizadas, complejidad de administracin, consumo de ancho de banda. 3. Reconsidere la situacin anterior estudiando las prestaciones ofrecidas por los comandos rdist, rsync, expect o similares existentes en su sistema. 4. Estudie los scripts de arranque de su mquina. Es posible que encuentre en ellos, comentadas, las sentencias para arrancar la mquina como servidor NIS y como cliente NIS. Esto no es suficiente para implantar un dominio NIS. Determine las acciones complementarias. 5. Suponga que implementa un dominio NIS en su sistema. Qu informacin debe hacer llegar a los usuarios para su mejor conocimiento y uso? Qu precauciones de seguridad tiene que tomar como administrador? 6. Si su sistema soporta NIS+, es posible que cuente con scripts para realizar la mayor parte de las tareas de administracin. Investigue la existencia de dichos scripts, su forma de uso individual y el esquema de aplicacin para la implantacin de un dominio. 7. Si dispone de un programa administrador para la creacin de usuarios, investigue si actualiza automticamente las tablas de NIS (NIS+). Si tiene su dominio NIS ( NIS+) activo, verifque la actualizacin de los mapas NIS (tablas NIS+) al crear usuarios. Si la herramienta administrativa no contempla el servicio, defina los procedimientos complementarios para actualizar las tablas o mapas. 8. Investigue la situacin anterior para el caso de la incorporacin de mquinas. 9. Estudie en su sistema la relacin entre NIS (NIS+) y DNS. Cul tiene precedencia? Es posible controlar esto? Recuerde que los dominios NIS y DNS son conceptualmente distintos.

Bibliografa y Referencias.
Comandos: rdist, rsync, expect, ypserv, ypbind, domainname, ypinit,
ypxfr, yppush, yppoll, ypset, ypcat, yppasswd, ypwhich, ypmatch, ypchfn, ypchsh, ypupdate.

Network File System (Sistema de archivos de red)

Introduccin
El "Sistema de Archivos de Red" (NFS) es un protocolo para compartir archivos a travs de una red TCP/IP. Este sistema, originalmente introducido por Sun Microsystems en 1985, es el protocolo ms utilizado por mquinas UNIX para la comparticin de archivos, y practicamente todos los sistemas modermos lo proveen. NFS es casi transparente para los usuarios, y es un protocolo "sin estado", en el sentido que si un servidor NFS se cuelga, no se pierde informacin. Los clientes pueden esperar a que el servidor retorne y continuar trabajando como si nada hubiera sucedido. NFS consta de varios componentes, incluyendo un protocolo de montaje y su correspondiente servidor, un protocolo de "locking" de archivos y su correspondiente servidor, y daemons que coordinan el servicio de archivos bsico. NFS utiliza los servicios RPC de Sun ("Remote Procedure Call", llamada a procedimientos remotos)

NFS desde el lado del servidor


Bajo BSD, se dice que un servidor "exporta" un filesystem cuando lo hace disponible para su uso por parte de otras mquinas. En ATT se dice que lo "comparte". Un cliente NFS debe explicitamente "montar" un filesystem antes de utilizarlo. El servidor examina el pedido para asegurarse que el cliente tiene la autorizacin correcta, y luego le da al cliente una "magic cookie" (un nmero aleatorio) que el cliente deber utilizar para obtener acceso en el futuro. El esquema de "magic cookies" permite que el servidor funcione "sin estado", ya que no precisa mantener informacin de qu clientes han sido autorizados. Usualmente, desmontar y volver a montar un filesystem cambia la cookie. Como un caso especial, las cookies se mantienen en un reboot para que un servidor que se cuelga pueda volver a su anterior estado (siempre y cuando no se haya pasado por single-user y modificado los filesystems). Una vez que un cliente tiene una "magic cookie", utiliza RPC para solicitar operaciones sobre el filesystem como crear un archivo o leer un bloque de datos. Como el protocolo es sin estado, el servidor no se preocupa de recordar qu operaciones realiza un cliente. Es responsabilidad del cliente asegurarse que el servidor de su confirmacin en las operaciones de escritura antes de borrar su copia de los datos.

RPC y el proceso portmap: mapeo de servicios. RPC de Sun es un conjunto de protocolos para ejecutar servicios remotamente. Los distintos servicios disponibles se distinguen por un nmero de servicio y un nmero de versin. Para evitar tener que asignar un puerto TCP o UDP fijo a cada servicio, se utiliza el programa portmap (a veces rpc.portmap) para mapear los nmeros de servicio a puertos en el servidor. Esto permite que a cada servicio se le asigne un puerto arbitrario en el servidor (aunque normalmente NFS utiliza el puerto 2049). Por supuesto, portmap requiere que se le asigne un puerto bien conocido (sunrpc/111). Antes de contactar cualquier servicio RPC, los clientes deben consultar al servicio portmap en qu puerto est escuchando el servicio dado. Cuando arrancan los dems programas (nfsd, mountd, etc.), se registran con portmap para poder ser accesibles desde la red. En versiones nuevas de solaris, este proceso se llama rpcbind El proceso mountd: respuesta a pedidos de montar filesystems. Los pedidos para montar filesystems son atendidos por el demonio mountd (a veces llamado rpc.mountd). En los sistemas BSD (y muchos que no lo son, por ejemplo Linux), mountd lee el archivo /etc/exports para obtener informacin de las mquinas que tienen acceso a cada filesystem, y las restricciones que puedan tener. El archivo exports contiene una lista de los directorios exportados y sus correspondientes opciones y atributos. Cada lnea en el archivo exports especifica un directorio exportado, los permisos para los distintos clientes que puedan utilizar este filesystem, y la descripcin de que mquinas pueden usarlo.

P. Ej: /discos/users -maproot=root maquina1.iie.edu.uy /discos/man -ro maquinasunix_iie Permite que /discos/users sea montado desde maquina1.iie.edu.uy, permitiendo el acceso de root (por defecto, los accesos de root via NFS se realizan como si el usuario que estuviera realizando el acceso fuera nobody), y el acceso de solo lectura a /discos/man de las mquinas en el "netgroup" maquinasunix_iie (asumiendo que este es un netgroup). NFS se maneja con la vision lgica de los filesystems, no con la capa fsica. Se puede exportar cualquier subdirectorio, aunque no sea la raiz de un filesystem. Sin embargo, por razones de seguridad, NFS requiere que cada dispositivo sea exportado independientemente, por ejemplo en una mquina con una particion montada como /users, el directorio / se puede exportar sin que se brinde acceso a /users. El formato y los atributos que pueden ser especificados en /etc/exports varian entre sistemas. En la tabla se muestran los atributos para algunos sistemas.

Lista los hosts que pueden montar el filesystem (dados como una lista de access=lista mquinas y netgroups separados por :)

-ro -rw (=lista)

Especifica que solo se debe permitir el acceso de lectura, no de escritura. Lista especiffica los hosts que pueden montar el filesystem con permiso de escritura, los dems solo lo pueden montar read-only lista de hosts a los que se les permite acceder al filesystem como root (para los demas, el acceso como root se mapea al acceso del usuario nobody) Especifica el uid (nmero de usuario) que debe utilizarse para los pedidos provenientes de un usuario desconocido. (Por defecto, es nobody)

-root=lista

-anon=n

Si no se especifica que hosts pueden montar el filesystem, TODAS las maquinas pueden hacerlo. Esto puede ser un grave problema de seguridad, y debe evitarse en lo posible. Despus de modificar /etc/exports, se le debe decir al demonio mountd que lo relea. Algunos sistemas proveen un comando llamado exportfs que cumple esta funcin (con la flag -a, o la flag -r en algunas versiones de Linux), mientras que en otros hay que enviarle la seal SIGHUP al demonio mountd (mediante kill). En Linux, las opciones con las cuales se exporta un filesistem se especifican entre parntesis DESPUS de la especificacin del equipo o equipos que pueden montar el filesystem.

P. Ej. # sample /etc/exports file / master(rw) trusty(rw,no_root_squash) /projects proj*.local.domain(rw) /usr *.local.domain(ro) @trusted(rw) /home/joe pc001(rw,all_squash,anonuid=150,anongid=100) /pub (ro,insecure,all_squash) Por el detalle de las distintas opciones, ver man exports.
Solaris Solaris sustituy el archivo /etc/exports con el archivo /etc/dfs/dfstab, el cual es un script de shell que ejecuta el comando share para cada uno de los filesystems exportados.

Por ejemplo: share -F nfs -o rw=maq:fing:ferrari,root=ferrari /export/home comparte el directorio /export/home con las mquinas maq, fing y ferrari, permitiendo acceso de root a la mquina ferrari. Luego de editar el archivo dfstab, se deben ejecutar los comandos share nuevos o modificados para que las modificaciones tomen efecto, o ejecutar el comando shareall. Por mas informacin, consultar el man de share.

nfsd : Proceso que acepta los pedidos de los clientes Una vez validado el pedido de montar un filesystem por parte de un cliente, se le permite realizar una serie de operaciones sobre el filesystem. Los pedidos para realizar estas operaciones son manejados por nfsd (o rpc.nfsd). nfsd recibe un parmetro que indica la cantidad de copias de si mismo que iniciar (mediante fork, o como threads independientes en sistemas ms modernos). Esta cantidad puede afectar la performance del servidor (tanto si son muy pocos como si son demasiados), y no existe una regla general para determinar dicho nmero. El valor por defecto es 4 en la mayora de los casos, y se recomienda para servidores que no sean muy utilizados. Este es el nmero mximo de pedidos que el servidor puede procesar simultaneamente. (En versiones nuevas de solaris y algunos linux, en lugar de iniciar multiples copias de nfsd, se utilizan distintos threads de ejecucin, y la cantidad por defecto que inicia el sistema al bootear es de 16 en solaris y 1 en Linux). lockd y statd : locking remoto Los demonios lockd y statd (rpc.lockd y rpc.statd) proveen locking (control de acceso a los archivos) para los filesystems compartidos mediante NFS, y son necesarios para que muchos programas sean capaces de arbitrar el acceso concurrente a un mismo archivo. Versiones viejas de Linux y FreeBSD no proveen locking.

rquotad : quotas en filesystems remotos El demonio rpc.rquotad en algunos sistemas permite que otros sistemas obtengan informacin sobre los lmites de uso de un filesystem por parte de un usuario remotamente.

NFS desde el lado del cliente.


Extensiones al comando mount. En las mquinas que soportan NFS, el comando mount acepta la notacin maquina:directorio para referirse al directorio directorio en la mquina maquina. Es decir, para montar el directorio /ext de la mquina servidor en el directorio local /mnt se ejecuta el comando:

mount servidor:/ext /mnt


biod : demonio que provee cache del lado del cliente. Para mejorar la performance de NFS, la mayora de los sistemas proveen el demonio biod (llamado a veces nfsiod o rpciod), que realiza tareas bsicas de lectura anticipada (read ahead) y escritura retardada (write-behind) sobre el filesystem. Este demonio es opcional, pero altamente recomendado ya que provee una mejora apreciable en la performance de NFS. (No en Solaris).

biod, al igual que nfsd, recibe como parmetro la cantidad de copias de si mismo que debe arrancar.

Montando filesystems remotos. Los filesystems remotos que se deban montar de forma permanente deben o listarse en /etc/fstab (/etc/vfstab en Solaris) o ser manejados por un servicio de montaje automtico como ser automount o amd.

Ejemplo: # Device Mountpoint ohm:/discos/ext /ext ampere:/discos/users /usr/users

FStype Options Dump nfs rw,bg,intr,hard 0 nfs ro,bg,intr,soft 0

Pass# 0 0

Las opciones mas usuales para NFS son:

rw ro bg

Montar el filesystem read-write (debe estar exportado read-write en el servidor) Solo lectura Si la operacin de montaje falla (el servidor no responde), continuar reintentando en background. Si un servidor no responde, hacer que las operaciones que intenten accederlo se bloqueen hasta que el servidor reviva Si un servidor cae, hacer que las operaciones que traten de accederlo fallen y retornen un error. Eso evita que los procesos se "cuelguen" en filesystems "no esenciales". Debe usarse con cuidado. Numeros de reintentos antes de devolver un error en un filesystem montado "soft" timeout (en dcimas de segundo) para los pedidos. Permite que los usuarios interrumpan operaciones bloqueadas (retornando un error) Cambiar el tamao del buffer de recepcin a n bytes Cambiar el tamao del buffer de transmisin a n bytes Ignorar el bit de suid en los ejecutables en esta particin

hard

soft

retrans=n timeo=n intr rsize=n wsize=n nosuid

nfsv2/nfsv3 Utilizar la versin de NFS especificada

Los nombres especficos pueden variar de sistema en sistema Los filesystems montados "hard" causan que los procesos que lo usan se bloqueen cuando los servidores caen (retornando a la normalidad al volver los servidores), mientras que esto no sucede si est montado "soft". Pese a ser ms cmodo el

funcionamiento "soft", puede ocasionar que procesos de larga duracin aborten por un problema transitorio en la red, y tambin puede llegar a generar archivos corruptos si el corte se produce durante operaciones de escritura. Por ello normalmente se recomienda no utilizar esta opcin. La opcin intr, junto con la hard, permite que las operaciones bloqueadas sean interrumpidas (enviandole al proceso una seal de QUIT (mediante kill , o <CTRL> C si es el proceso activo en la terminal)). Esto permite que sea el usuario el que decida si se debe interrumpir el proceso o no. La eleccin de estas opciones es un compromiso entre seguridad de la informacin y comodidad de uso que debe resolverse en cada caso. Algunas utilidades de montaje automtico, como amd, proveen algunos remedios para esta situacin. Las opciones rsize y wsize son muy tiles en algunas versiones de linux, que por defecto utilizan buffers muy chicos (1024 bytes). En estas versiones, especificar valores entre 4096 y 8192 puede mejorar sustancialmente la performance de NFS.

Convenciones administrativas para NFS.


Manejo de usuarios en NFS En NFS, el acceso a los archivos desde una mquina cliente se autoriza o n de acuerdo al nmero de usuario (UID) con el cual la mquina cliente informa que se est intentando el acceso. Esto impone algunas decisiones administrativas. Cualquier usuario que quiera acceder a un archivo en la red debe tener una cuenta de usuario en la mquina donde se encuentra el filesystem. No es necesario que el usuario pueda loguearse en esa cuenta, pero debe existir en los sistemas de autentificacin. Adems, los nmeros de usuario y de grupo deben ser nicos a travs de todas las mquinas que comparten filesystems (preferiblemente en toda la red). Tambin es conveniente tener un esquema de nombres de filesystems comn a toda la red, para simplificar el mantenimiento.

Interacciones entre NFS y las redes


NFS tradicionalmente ha utilizado UDP como protocolo de transporte. Aunque NFS hace su propio chequeo de errores y retransmisin de paquetes erroneos y perdidos, ni UDP ni NFS proveen ningn protocolo de control de congestin. Esto hace que NFS sobre UDP sea una mala eleccin para redes de area extensa (WAN). Tambin puede ocasionar problemas en redes de area local, dada la capacidad de los servidores actuales.

Varios sistemas modernos ofrecen versiones de NFS que funcionan sobre TCP, siendo mucho ms adecuados para redes de area extensa y redes locales muy utilizadas.

Servidores NFS dedicados.


NFS sufre algunos problemas de performance debido a su diseo "sin estado" (parte de estos problemas son mitigados en las ltimas versiones de NFS). En particular, como el cliente asume

que una operacin de escritura se completa una vez que recibe el acuse de recibo del servidor, el servidor debe asegurarse de escribir cada bloque a disco antes de responder, para evitar discrepancias en el caso de una caida. Esto introduce un retardo significativo en el caso de escrituras NFS. Esto est en vas de solucin en las nuevas versiones de NFS (v4, parcialmente v3). Adems, los filesystems NFS tienden a ser grandes, lo que los hace suceptibles a problemas de confiabilidad y dificultades para el respaldo. Existen soluciones comerciales para estos problemas, tanto desde el punto de vista de tarjetas que se pueden agregar a sistemas existentes para mejorar su performance (por ejemplo, grabando la informacin en RAM no volatil hasta que se tenga tiempo de grabar a disco), como sistemas dedicados con software y hardware especializados que solucionan tanto los problemas de performance como los de confiabilidad.

Montaje automtico
Montar los filesystems uno por vez listndolos en el archivo /etc/fstab introduce serios problemas en redes grandes. Primero, el mantenimiento de /etc/fstab en un nmero considerable de equipos puede convertirse rpidamente en una pesadilla, especialmente si no todos son idnticos. En segundo lugar, si se depende fuertemente de filesystems remotos, especialmente si se montan filesystems de varios hosts, se genera un gran problema cuando cualquiera de ellos falla, ya que cualquier comando que utilice los filesystems no disponibles se bloquear. En tercer lugar, si un servidor importante no est disponible, los usuarios pueden ver sus posibilidades de trabajar disminuidas al no estar disponibles particiones importantes. En esta situacin sera muy util si se pudiera montar una copia de la particion de un servidor de backup.

Un demonio de montaje automtico conecta filesystems cuando son accedidos y los desconecta cuando ya no son necesarios. Esto minimiza la cantidad de puntos de montaje activos y es mayormente transparente a los usuarios. En la mayora de los servidores de montaje automtico es posible dar una lista de filesystems replicados que utilizar si el servidor primario no funciona. Para implementarlo, el programa de conexin automtica aparece como un servidor NFS, pero en lugar de compartir un filesystem hacia la red, "inventa" un filesystem de acuerdo a las especificaciones en su archivo de configuracin. Cuando un usuario hace referencia a un directorio dentro del filesystem "fantasma" creado por el automounter, este intercepta la referencia, monta el filesystem que el usuario est tratando de utilizar y contina con la operacin. Usualmente hay un solo directorio donde realmente se montan los filesystems, y la ilusin de que dichos filesystems estn en otras ramas del filesystem se crea utilizando links simblicos. La idea original de los programas de montaje automtico es de Sun. Su implementacin, automount, se encuentra en casi todos los sistemas NFS derivados de Sun. Sin embargo, automount tuvo varios bugs y defectos de diseo en varias de sus versiones que han hecho muy popular a una de sus alternativas gratuitas, amd. amd (Am-Utils) es el resultado de una tesis doctoral (de Jan-Simon Pendry del Colegio

Imperial, Londres), que expande la idea de Sun, corrige las fallas mas graves de automount, y es ms portable que este ltimo. El sistema autofs implementado en linux puede utilizarse con el mismo cometido.
AUTOMOUNT: el demonio de montaje automtico de Sun automount entiende tres tipos de archivos de configuracin (llamados "mapas"): mapas directos, mapas indirectos, y mapas maestros. Los mapas directos e indirectos dan informacin acerca de los filesystems que deben ser montados automticamente. Un mapa maestro es una lista de mapas directos e indirectos que automount debe manejar. No es necesario tener un mapa maestro para correr automount, ya que se pueden pasar los mapas directos e indirectos en la lnea de comando. Mapas indirectos Los mapas indirectos se utilizan para montar varios filesystems bajo un directorio comn. El path al directorio se especifica en el mapa maestro, no en el propio mapa indirecto. En el siguiente ejemplo, la primera columna indica el subdirectorio donde cada filesystem debe ser montado (relativo al directorio indicado en el mapa maestro), y las siguientes columnas indican las opcionesde montaje y el directorio de origen del filesystem.

users chimchim:/chimchim/users devel chimchim:/chimchim/devel info -ro chimchim:/otros/info


Mapas directos Los mapas directos listan filesystems que no tienen un prefijo comn. automount conecta cada filesystem en un directorio temporal, y crea un link simblico en el punto de destino Ejemplo:

/usr/man chimchim:/usr/man /cs/tools anchor:/cs/tools En este ejemplo, automount conectara los filesystems chimchim:/usr/man y anchor:/cs/tools en un directorio temporal (por defecto tmp_mnt) y creara un link simblico de /usr/man y /cs/tools a los puntos de montaje correspondientes.
Mapas maestros Un mapa maestro lista mapas directos e indirectos. Para cada mapa indirecto, tambin especifica el directorio base utilizado por las conexiones definidas en el mapa. Por defecto, automount utiliza el mapa maestro definido en la NIS (excepto en Solaris, que por defecto utiliza /etc/auto_master y requiere una lnea +auto_master en este archivo para usar los datos de la NIS). Por ejemplo:

#Directory Map /chimchim /etc/auto.chim //etc/auto.direct

La primer columna indica el directorio local para un mapa indirecto, o /- para un mapa directo. La segunda indica el nombre del archivo en el cual se encuentra el mapa. Puede haber varios mapas de cada tipo. Automount se puede ejecutar de dos formas: utilizando un mapa maestro (ya sea el por defecto auto.master de la NIS o uno dado en la lnea de comandos), o listando los mapas directos e indirectos en la lnea de comando. Ej: automount /- /etc/auto.direct /chimchim /etc/auto.chim &
Filesystems replicados utilizando automount En algunos casos, un filesystem read-only como /usr/man puede ser idntico en varios servidores. En ese caso, se le puede decir a automount que elija el servidor que responda mas rpido. Algunas consideraciones: - Los filesystems replicados DEBEN ser de solo lectura. El demonio de automount no puede sincronizar escrituras en varios servidores. - automount NO puede desmontar un filesystem activo y reemplazarlo con un respaldo cuando un servidor se cuelga. Solo puede elegir un servidor que responda cuando se monta el filesystem. - No se puede indicar qu servidores son primarios y cuales backup. automount selecciona el servidor basado en su idea de cercania. - Los filesystems replicados DEBEN ser idnticos.

Por ejemplo, un mapa directo que define que /usr/man es un filesystem replicado puede ser: /usr/man chimchim,band:/usr/man

Nuevas versiones de automount permiten montar RW filesystems replicados.


Deteniendo automount Como automount funciona como un servidor NFS, terminarlo con kill -9 puede dejar el sistema bloqueado. Si se precisa matar o reiniciar automount, se debe asegurar de utilizar la seal TERM (kill -15) para que automount pueda devolver el filesystem local a su estado original.

AMD (AM-UTILS) amd es tcnicamente superior al automount original de Sun. Algunas de sus ventajas: - amd nunca se va a bloquear si un servidor remoto se cuelga. - amd enva pedidos de "keep-alive" a los servidores remotos a intervalos regulares y mantiene una lista de los servidores accesibles, que utiliza para montar, desmontar y reemplazar filesystems. Si un servidor se cuelga, futuros accesos al filesystem devuelven el error "operation would block" en lugar de bloquearse. - amd no contiene cdigo propietario y ha sido portado a muchas versiones de UNIX. - amd soporta una cantidad de tipos de montaje no soportados por automount.

- los mapas de amd pueden ser guardados en varios formatos de base de datos, incluyendo NIS, NIS+, Hesiod, ndbm y otros - posee una herramienta de manipulacin y consulta (amq) que permite su monitoreo y el envio de comandos al servidor. - La sintaxis de usu mapas es mas genrica que la de automount. - amd est basado en el concepto de que cada servidor tiene uno o mas filesystems, con cada filesystem conteniendo uno o mas volmenes (un conjunto coherente de archivos). Esto hace que el manejo de subdirectorios sea mas directo que con automount. Mapas de AMD El formato de los mapas de amd es extremadamente flexible, y permite que un mismo archivo de configuracin sea utilizado en varias mquinas. Cada filesystem listado en un mapa de amd debe tener asociado un tipo de montaje. Los tipos mas comunes se muestran en la tabla.

nfs ufs host

Acceso bsico a un servidor NFS Acceso bsico a un filesystem local Acceso a todo el arbol exportado por un servidor (se le pregunta al mountd en el servidor cuales son sus filesystems exportados) Acceso a un grupo de filesystems en un servidor NFS con una sola entrada en el mapa. Corre un programa cada vez que se debe montar o desmontar el filesystem. Se utiliza para tipos de montaje que amd no conozca. Crea un link simblico que apunta a un punto de montaje fsico (permite que cualquier directorio se pueda acceder via amd). Crea un nuevo punto de montaje debajo de uno existente, algunas veces utilizado para replicar el rbol de montaje de un servidor. Casi idntico a los mapas directos de automount Permite que el contenido de varios directorios aparezca como un nico directorio

nfsx

program

link

auto direct union

Las entradas en los mapas pueden contener condicionales, que permiten que se activen solo en contextos especficos (por ejemplo en un determinado host o tipo de mquina). Los condicionales utilizan varias variables automticamente asignadas con una serie de informacin acerca del entorno en que amd est corriendo. Los selectores mas comunes se muestran en la tabla.

arch

Arquitectura de la mquina

autodir byte cluster domain host hostd karch key map os Wire

Directorio por defecto donde montar filesystems. Orden de los bytes en la mquina (big- o little-endian) Nombre del cluster local de la mquina, por defecto domain Dominio NIS local nombre de la mquina nombre de la mquina concatenado con el dominio arquitectura del kernel (por defecto igual a arch) Nombre del volumen que se est resolviendo Nombre del mapa siendo utilizado Sistema Operativo Nombre de red de la interfase primaria de la mquina

Ejemplo: /default opts:=rw,soft,timeo=10,retrans=5

usr/man host==chimchim;type:=ufs,dev:=/dev/sd1f host!=chimchim;rhost=chimchim;rfs:=/${key};type=nfs;fs:=${autodir}/${key} cs/tools host==anchor;type:=ufs;dev:=/dev/sd3c host!=anchor;rhost=anchor;rfs:=/${key};type=nfs;fs:=${autodir}/${key}

Las entradas de la forma nombre:=valor definen varios atributos del montaje. Por ejemplo, la primera lnea fija las opciones por defecto en "rw,soft,timeo=10,retrans=5". Los elementos de la forma nombre==valor o nombre!=valor son condicionales: los siguientes elementos solo son utilizados si el condicional es verdadero (En el ejemplo para /usr/man, se utilizan para tomar acciones distintas dependiendo de si estamos en chimchim o no).. Notaciones como ${autodir} o ${key} insertan el valor del selector adecuado. Algunas opciones en los mapas de amd que indican filesystems remotos son:

rhost rfs

host remoto donde se encuentra el filesystem Nombre del filesystem remoto

type fs

Tipo de montaje Punto local de montaje.

Arrancando amd amd se puede arrancar con un script como:

#!/bin/csh -f cd /usr/local/etc/amd exec /usr/local/bin/amd -x fatal,error,user -r -l syslog -a /tmp_mnt /amd amd.master.map >& /dev/console.

Opcin -x -r -l -a /amd

Descripcin Fija las opciones de error "Adopta" los puntos de montaje ya existentes Especifica el archivo de log o syslog para los mensajes de error Especifica una ubicacin alternativa para los puntos de montaje (por defecto, /a) Especifica el nombre del directorio del mapa

amd.master.map Especifica el archivo conteniendo las opciones de montaje.

Cuando un usuario referencia un filesystem definido en el mapa de amd, amd monta el filesystem y monitorea el uso del mismo. Despus de haber estado inactivo por un perodo de tiempo (usualmente 5-15 minutos), amd desmonta el filesystem hasta que sea accedido nuevamente.
Filesystems replicados utilizando amd amd permite que se listen varios servidores para un filesystem particular. A diferencia de automount, en la mayora de los casos es capaz de desconectar filesystems activos de servidores caidos y montar sus reemplazos "on the fly"

Por ejemplo: usr/man host==chimchim;type:=ufs;dev;=/dev/sd1f || host==band;type:=ufs;dev:=/dev/sd3c || rhost=chimchim rhost=band;rfs:=/${key}; type=nfs;fs:=${autodir}/${key}

Deteniendo amd amd debe ser notificado de que debe irse para que tenga opcin de retirarse de la estructura del filesystem. Para ello hay que enviarle una seal SIGTERM.

NFS y la seguridad
NFS provee una forma conveniente de acceder a archivos a travs de una red, pero es una fuente importante de problemas de seguridad. Para un sitio "normal", una proteccin adecuada se obtiene con un control estricto de /etc/exports (o /etc/dfs/dfstab), y un manejo adecuado del archivo /etc/hosts.allow (en los sistemas que permiten limitar los servicios RPC en este archivo). El mayor riezgo proviene de mquinas locales a las cuales se les permite montar un filesystem (obviando los casos de fallas en la implementacin de los protocolos, que histricamente fueron comunes). La seguridad de NFS se basa en la confianza entre mquinas. Una vez que el servidor le permite a un equipo montar un filesystem, la seguridad de los archivos en el servidor depende tambin de la seguridad en la mquina cliente. Es el cliente el que indica como qu usuario debe realizarse cada operacin (dando el nmero de usuario), por lo que es importante que solo exportemos filesystems a mquinas "confiables", y que compartan la misma base de datos de usuarios. Si un usuario es capaz de obtener acceso de root en una mquina cliente, hay varios mtodos para acceder a archivos pertenecientes a otros usuarios, aun cuando en el /etc/exports no se permita el acceso de root. Si alguien en quien no se confa tiene acceso de root en una mquina cliente, no se debe exportar ningun filesystem a esa mquina. Hubo intentos de hacer NFS mas seguro. Por ejemplo, a travs de la utilizacin de Kerberos para la validacin, o de "secure RPC", un protocolo ms seguro de invocacin de procesos remotos. Sin embargo, no es tanta la mejora de seguridad que se obtiene comparado con una buena administracin, y dichas extensiones no son mayormente utilizadas.

Monitoreo y "tunning" de NFS


La mayora de los sistemas proveen un comando llamado nfsstat que despliega varias estadsticas mantenidas por los sistemas NFS. nfsstat -s muestra estadsticas de los procesos de servidor NFS, mientras que nfsstat -c muestra informacin de las operaciones como cliente. Los principales parmetros a monitorear son los timeouts y los errores. Bibliografa Adicional http://www.linuxdoc.org/HOWTO/NFS-HOWTO/ http://www.am-utils.org/ http://www.am-utils.org/am-utils.html http://www.linuxdoc.org/HOWTO/mini/Automount.html http://www.linux-consulting.com/Amd_AutoFS/autofs-HOWTO.html

man de los comandos descriptos.

Samba
Qu es Samba Versiones, obtener Samba Instalacin Arranque de los demonios Configuracin Acceder directorio UNIX desde Windows Acceder directorio Windows desde UNIX Compartir una impresora UNIX Compartir una impresora Windows Protocolos SMB y CIFS Protocolo SMB Protocolo CIFS Localizacin de recursos o "browsing" Conceptos y objetivos de una red SMB/CIFS Conceptos de red SMB/CIFS Grupos de trabajo y Dominios Localizadores maestros Controlador de dominio Seguridad de los servicios compartidos en Grupo de Trabajo Modo de autenticacin de servicios por Dominio Esquemas de autenticacin Bibliografa y referencias.

Qu es Samba
Samba es un conjunto de programas que permite a sistemas cliente acceder archivos e impresoras en un servidor usando el protocolo SMB (Server Message Block). El servidor puede ser una mquina UNIX, Netware, OS/2 o VMS. Los clientes pueden ser Lan Manager, Windows 3.11/95/98/NT/2000, Linux, OS/2. Concretamente, Samba permite hacer uso de archivos e impresoras ubicados en una mquina UNIX desde mquinas Windows; tambin desde

mquinas DOS con Lan Manager. Como parte del conjunto, viene un programa que permite a una mquina UNIX actuar como cliente de otros servidores SMB.

Con Samba pueden realizarse las siguientes cosas:


compartir un directorio de UNIX hacia mquinas Windows; acceder un directorio Windows desde mquinas UNIX; compartir una impresora UNIX hacia mquinas Windows; acceder una impresora Windows desde mquinas UNIX. El conjunto de programas contenidos en el paquete Samba comprende: smbd, el servidor SMB; maneja las conexiones de los clientes, incluyendo permisos y validacin de usuarios. nmbd, el servidor de nombres NetBIOS; permite a los clientes ubicar los servidores mostrando una lista e incorporando aspectos de manejo de dominio. smbclient, programa cliente UNIX; permite a UNIX actuar como cliente de otro servidor SMB. smbrun, permite al servidor correr aplicaciones en mquinas SMB. testprns, para comprobar el acceso a impresoras. testparms, para verificar la configuracin de Samba. smb.conf, el archivo de configuracin de Samba. smbprint, un script para que una mquina UNIX pueda usar smbclient para imprimir en un servidor SMB. documentacin, abundante cantidad de informacin cuya lectura puede ahorrar mucho tiempo y frustracin. El conjunto se entrega con todo el cdigo, es de uso pblico, y se encuentra protegido bajo la licencia GPL (General Public License) de GNU. Versiones, obtener Samba. Linux y FreeBSD incluyen Samba entre sus paquetes; para Solaris o HP-UX pueden bajarse los fuentes, o an versiones en binario, desde www.samba.org. Samba es considerado muy estable y seguro, condiciones logradas en base a la poltica de abundar en versiones de dominio pblico para favorecer la correccin del software. Las versiones alfa, que contienen la palabra "alpha" en el nombre del paquete, estn destinadas a deteccin de fallas; no se las consideran estables como para el uso en produccin. Al obtener una versin nueva, debe buscarse el nmero ms alto que no contenga la palabra "alpha".

Instalacin.
Las siguientes son las ubicaciones habituales de comandos y archivos:

demonios smbd y nmbd en /sbin; comandos de usuario en /bin; archivo de configuracin en /etc/smb.conf; archivo de registro en /var/log; los archivos smb y nmb retienen mensajes originados por los demonios smbd y nmbd; pueden configurarse archivos de mensajes distintos por mquina cliente, por ejemplo en /var/log/samba/%m.log, donde %m es una variable que contiene el nombre de la mquina; directorio para bloqueos en /var/lock/samba. El archivo de configuracin /etc/smb.conf es la parte crucial de la instalacin. En la distribucin viene un ejemplo con abundantes comentarios. La pgina man smb.conf explica las muchas opciones disponibles. Arranque de los demonios. Los demonios smbd y nmbd pueden ser corridos desde inetd o como procesos autnomos.

Para arrancarlos desde inetd, si se est configurando un servidor permanente, deben ser configurados para arrancar de nuevo si mueren. El archivo /etc/inetd.conf debe contener lneas similares a stas:
# servicios NetBIOS de Samba netbios-ssn stream tcp nowait root /usr/sbin/smb smbd netbios-ns dgram udp wait root /usr/sbin/nmbd nmbd

Despus de editar el archivo, reinicializar inetd con kill -1 id-proceso-inetd para que la configuracin tome efecto. El nmero de proceso de inetd puede obtenerse con
ps auxw | grep inetd

Para arrancar los demonios como procesos autnomos, incluir su invocacin a travs de los scripts de arranque, como se muestra en el siguiente script /etc/rc.d/init.d/smb:
#!/bin/sh # # /etc/rc.d/init.d/smb - arranca y detiene servicios SMB. # # Establecer los siguientes enlaces simblicos hacia este script # para el arranque en el nivel 3 (red en multiusuario): # /etc/rc.d/rc0.d/K35smb - destruye servicio SMB en shutdown # /etc/rc.d/rc1.d/K35smb - destruye servicio SMB en monousuario # /etc/rc.d/rc3.d/S91smb -arranca servicio SMB en multiusuario # /etc/rc.d/rc6.d/K35smb -destruye servicio SMB en reboot

# parmetros de invocacin. case "$1" in start) echo -n "Iniciando servicios SMB: " /sbin/smbd -D /sbin/nmbd -D echo touch /var/lock/subsys/smb ;; stop) echo -n "Cerrando servicios SMB: " killproc smbd killproc nmbd rm -f /var/lock/subsys/smb echo ;; *) echo "Usage: smb {start|stop}" exit 1 esac

En algunas distribuciones el arranque de Samba viene ya includo en los scripts de arranque, a veces comentado. Distribuciones como Debian traen ya su script /etc/init.d/samba y crean los enlaces simblicos al instalar el paquete.
Configuracin. La configuracin de Samba se controla con un nico archivo, /etc/smb.conf. Aqu se determina qu recursos sern compartidos y bajo qu condiciones. El archivo est dividido en secciones, cada una de las cuales comienza con un encabezado tal como global, homes, printers, etc. La seccin "global" define variables de accin global sobre todos los recursos compartidos. La seccin "printers" define la configuracin general de impresoras reconocidas por ese servidor. La seccin "homes" permite a un usuario, y slo a l, acceder su directorio propio en la

mquina UNIX. El ejemplo siguiente permitir a usuarios Windows acceder sus directorios propios en la mquina UNIX y usar libremente un directorio temporal en la mquina UNIX.

; /etc/smb.conf ; [global] guest account = guest log file = /var/log/samba/%m.log lock directory = /var/lock/samba share modes = yes

[homes] comment = Directorios propios browseable = no read only = no create mode = 0755

[temporal] comment = Espacio para archivos temporales path = /tmp read only = no public = yes

Para compartir un directorio pblico con permisos de escritura:


[publico] comment = Public Stuff path = /home/public public = yes writable = yes

Para que este directorio sea legible por todo pblico pero solo modificable por integrantes del grupo "tecnicos":

[tecnopub] comment = Directorio Pblico del grupo Tcnicos path = /home/tecnopub public = yes writable = yes printable = no write list = @tecnicos

Acceder directorio UNIX desde Windows. Una vez instalado y configurado Samba en la mquina UNIX, quedarn disponibles para los clientes Windows los servicios compartidos. Esto es, ser posible montar directorios de la mquina UNIX en una mquina Windows. Para ello, se realiza la operacin de montaje como siempre: si se trata de Windows 95/98/NT/2000 puede usarse el Explorador, indicando en la opcin de montar unidad de red el nombre de la unidad de disco, y luego el nombre de la mquina UNIX seguido del nombre del recurso compartido, en la notacin habitual, \\mquina_UNIX\nombre_recurso. Tambin puede hacerse la operacin desde una ventana de comandos, indicando el nombre de la unidad:
net use K: \\gingko\tecnopub

monta sobre la unidad K: el recurso llamado tecnopub compartido va Samba en la mquina UNIX llamada gingko.

Una vez asegurado el xito de la operacin, puede accederse desde la mquina cliente al directorio de la mquina UNIX en la letra de unidad indicada. Si el recurso compartido requiere autenticacin del usuario, este debe poseer una cuenta en la mquina UNIX o en otra mquina que haya sido designada para la autenticacin de seguridad. En este caso, el acceso slo ser concedido si el usuario es autenticado por quien tenga la autoridad de hacerlo, y si dispone de los permisos adecuados. La autoridad para autenticacin de usuarios se designa en el archivo smb.conf de Samba.
Acceder directorio Windows desde mquinas UNIX con Samba. Samba trae un programa cliente, smbclient, para que las mquinas UNIX puedan acceder recursos compartidos va SMB en mquinas Windows o en otras mquinas UNIX/Samba. Este programa provee una interface similar a ftp, lo que permite transferir archivos desde y hacia un recurso compartido desde una mquina Windows.
/usr/sbin/smbclient -L winntmaq

muestra los recursos compartidos en la mquina winntmaq, ya sean directorios o impresoras, generalmente pidiendo una contrasea.
/usr/sbin/smbclient \\\\winntmaq\\g_tmp <contrasea>

Aqu el caracter \ debe "escaparse" con otro \, escribiendo \\ para que tome \. Este comando conecta al directorio g_tmp habilitando una lnea de comandos de tipo ftp:
Server time is Sat Aug 10 15:58:44 1996 Timezone is UTC+10.0 Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager 3.51] smb: \>

Para obtener la lista de comandos disponibles en smbclient:


smb: \> h ls dir lcd cd pwd get mget put mput rename more mask del rm mkdir md rmdir rd prompt recurse translate lowercase print printmode queue cancel stat quit q exit newer archive tar blocksize tarmode setmode help ? ! smb: \>

El programa smbclient es tambin til para determinar el funcionamiento correcto de Samba en una mquina UNIX, invocndolo desde ella misma o desde otra mquina UNIX.
Compartir una impresora UNIX. Como toda impresora en UNIX, la impresora a compartir debe tener una entrada en el archivo /etc/printcap. Una vez seguros de que la impresora funciona bien en la mquina UNIX, para compartirla hacia las mquinas Windows agregar en smb.conf algo similar a esto:
; parmetros globales para imprimir [global] printing = bsd printcap name = /etc/printcap load printers = yes log file = /var/log/samba/%m.log lock directory = /var/lock/samba

; parmetros para todas las impresoras [printers] comment = Todas las Impresoras security = server path = /var/spool/lpd/lp

browseable = no printable = yes public = yes writable = no create mode = 0700

; configuracin de una impresora [ljet] comment = Impresora HP laserjet security = server path = /var/spool/lpd/lp printer name = hpljet writable = yes public = yes printable = yes print command = lpr -r -h -P %p %s

Compartir una impresora Windows. Para poder compartir una impresora en un servidor Windows remoto va Samba, debe disponerse de una entrada para sta en el /etc/printcap de la mquina UNIX. Las convenciones de printcap usadas significan:
cm - comentario

lp - nombre del dispositivo de impresin sd - directorio de spool de la impresora, en la mquina local af - archivo de contabilidad mx - tamao mximo de archivo; si se pone 0, no hay lmite if - nombre del filtro de entrada, si lo hay (un script)

Ejemplo de entrada en /etc/printcap.


# /etc/printcap # # \\winntmaq\imppost5 via smbprint #

lpwin|immpost5:\ :cm=HP 5MP Postscript imppost5 en winntmaq:\ :lp=/dev/null:\ :sd=/var/spool/lpd/imppost5:\ :af=/var/spool/lpd/imppost5/acct:\ :mx#0:\ :if=/usr/bin/smbprint:

smbprint

es un filtro de entrada para impresoras definidas en /etc/printcap. Usa el programa smbclient para imprimir un archivo en una impresora servida por una mquina basada en SMB. El nombre del servidor y la impresora se leen del archivo de configuracin /var/spool/lpd/nombre_impresora/.config; para el ejemplo anterior,
# /var/spool/lpd/imppost5/.config # # configuracin para impresora imppost5 en servidor server=winntmaq service=imppost5 password=""

winntmaq

El script imprime hacia el servicio de impresin en la mquina remota mediante un comando similar a
cat archivo.txt | /usr/bin/smbclient \\servidor\impresora \ contrasea -U servidor -N -P >> logfile

Protocolos CIFS y SMB.


En las secciones siguientes se resumen algunos conceptos tiles para comprender la instalacin de una red basada en mquinas UNIX/Samba sirviendo archivos e impresin a mquinas Windows y NT. Cada nueva versin de Samba implementa ms cercanamente el esquema de red Microsoft, haciendo la mquina UNIX cada vez ms indistinguible de un servidor Microsoft en lo que a clientes se refiere. Protocolo SMB. SMB (Server Message Block, bloque de mensajes de servidor) es un protocolo para compartir archivos, base de los sistemas de red LAN Manager y Microsoft Networking. SMB fue aplicado por Microsoft a DOS como una extensin para dirigir entrada salida de disco hacia NetBIOS (Network BIOS), un sistema diseado por IBM y Sytec para actuar como interfaz cruda entre red y aplicacin. Modernamente, los paquetes SMB son transportados en una extensin de NetBIOS denominada NBT, NetBIOS sobre TCP/IP.

Protocolo CIFS. CIFS (Common Internet Filesystem, sistema de archivos comn para Internet) es una tentativa de implementar un protocolo de dominio pblico para transferencia de archivos en forma simple y potente, ampliando las capacidades de SMB, en el cual se basa.

CIFS define un protocolo de acceso a sistemas de archivos remotos normalizado para uso en redes, permitiendo a los grupos de usuarios trabajar juntos y compartir documentos ya sea a travs de Internet o dentro de sus intranets corporativas. Es una tecnologa multiplataforma, abierta, basada en los protocolos para compartir archivos de MS Windows y otros sistemas operativos comunes, soportada por UNIX y otros sistemas operativos. En su mxima expresin, CIFS permitira a millones de usuarios compartir sus archivos sin instalar nuevo software o cambiar su forma de trabajo habitual.
Localizacin de recursos o "browsing". La localizacin de recursos o "browswing" es la parte de los protocolos SMB/CIFS que permite ubicar recursos en la red tal como se hace en la seccin "Entorno de Red" para las mquinas de un mismo grupo en el Explorador de Windows 95/98/NT/2000. Tocando con el ratn sobre el nombre de una mquina, sta muestra sus recursos compartidos (impresoras y directorios), a los que puede hacerse conexin. CIFS aspira a realizar esto a travs de la Internet.

Conceptos y objetivos de una Red SMB/CIFS.


Al instalar en una red LAN o WAN servicios de archivo e impresin las decisiones cruciales implican: Cmo y dnde se almacena la informacin de nombres de usuario, contraseas y seguridad; Qu mtodo se usar para ubicar los recursos que los usuarios tienen habilitados; Qu protocolos hablan (soportan) los clientes. Las redes Netware, Windows NT o cualquier producto para servicio de archivos encierra al usuario en el marco de las respuestas de ese producto a las preguntas anteriores. Esto es inconveniente an cuando se tiene una red homognea, pero ms cuando se tiene diversos tipos de mquinas y sistemas operativos. Samba intenta superar estas restricciones admitiendo la mayor combinacin posible de clientes, servidores, sistemas operativos y protocolos. Conceptos de red SMB/CIFS. Para la implementacin de redes, Dominio y Grupo de Trabajo son exactamente lo mismo, excepto por la secuencia de ingreso del cliente (logon). En los dominios, existe una base de datos de autenticacin distribuda; esto da mayor alcance y flexibilidad al concepto de dominio. Para Samba, cuando un cliente se conecta a un servicio, lo hace presentando una cadena de autenticacin; si sta es vlida, el acceso le es permitido, sin importar cmo ha sido generada esa cadena. En el caso de ingresar a un dominio, sin embargo, el cliente SMB espera que todos los dems servidores del dominio acepten la misma informacin de autenticacin. En cuanto a la localizacin de recursos ("browsing"), no hay diferencia entre dominio y grupo

de trabajo. Windows 95/98 puede ser miembro tanto de un dominio como de un grupo de trabajo; Windows NT no. Samba puede slo ser miembro de un nico grupo de trabajo o dominio, aunque las nuevas versiones de Samba estn ya dando soporte de dominio NT. Grupos de Trabajo y Dominios. El grupo de trabajo (Workgroup) designa un conjunto de mquinas que mantienen una base de datos comn para la localizacin de sus recursos compartidos. No necesariamente tienen en comn informacin de seguridad; si sto acontece, estamos en presencia de un dominio. El mantenimiento de la lista de servidores y recursos es dinmica: se altera toda vez que entra o sale un servidor de la red, o que incorpora o elimina un recurso compartido. El trmino "browsing" o localizacin se refiere al acceso a recursos por parte del usuario, usando una interfaz cualquiera, tal como el Explorador de Windows. Los servidores SMB acuerdan entre ellos cuales mantienen la base de datos de localizacin de recursos. Los grupos de trabajo pueden estar en cualquier punto de una red interconectada TCP/IP, an en diferentes subredes o en la internet; esto es algo muy difcil de implementar para SMB. Localizadores maestros. Los localizadores maestros o "master browsers" son mquinas que tienen la base de datos maestra de localizacin de recursos en un dominio o grupo de trabajo. Hay dos clases de localizadores maestros: Localizador Maestro de Dominio ("Domain Master Browser"): retiene la base de datos maestra de localizacin de todo el dominio, eventualmente atravesando varias subredes TCP/IP. Localizador Maestro Local ("Local Master Browser"): retienen la base de datos maestra de localizacin de la subred en la que se encuentran; se comunican con el localizador maestro de dominio para obtener informacin de otras subredes. Las subredes son un caso especial porque la localizacin de recursos se basa en difusin, y la difusin no atraviesa los ruteadores. Los localizadores maestros, ya sean de dominio o locales, son elegidos dinmicamente segn un algoritmo que considera la habilidad de la mquina para sostener la carga de localizacin. Samba puede configurarse para actuar siempre como localizador maestro; esto equivale a ganar siempre la eleccin, incluso frente a sistemas actuando como controladores primarios de dominio Windows NT, que aspiran ellos mismos a ganar la eleccin. Controlador de Dominio. El trmino Controlador de Dominio (Domain Controller) est unido a la autenticacin de usuarios en un dominio. El mtodo de autenticacin de usuarios en un dominio usado por Windows NT es el ms difundido, pero no es el nico. Seguridad de los servicios compartidos en Grupo de Trabajo. El ajuste de seguridad de Samba "security = SHARE", fue la implementacin inicial de Samba, en la cual en base a la contrasea asociada al recurso se infera el usuario, pudiendo incluso hacerse que el usuario fuera "todos". Esto se considera mala prctica, pero en los orgenes estaba ligado a grupos chicos, alrededor de los aos '80, en los cuales las consideraciones de seguridad no eran prioritarias. El criterio resucit en 1992 con Windows for Workgroups.

Modo de autenticacin de servicios por Dominio. Con el ajuste de seguridad de Samba "security = USER" o "security = SERVER" todos los accessos a los recursos son verificados por el par nombre de usuario / contrasea de modo ms riguroso. Para el cliente, esto emula el comportamiento de ingreso a un dominio Microsoft. Para el cliente es indiferente si Samba consulta la base de datos de seguridad SAM de Windows NT o autentica al usuario de algn otro modo, como ser consultando a la mquina UNIX. Si los nombres de usuario existen en la mquina UNIX, conviene usar "security = user"; si no, convendr "security = share" para ambientes chicos donde la seguridad no es un problema; con "security = server" las duplas nombre de usuario / contrasea son transferidas a otro servidor SMB para su autenticacin, como ser una mquina NT. Esquemas de autenticacin.

En el caso ms simple, la informacin necesaria para la autenticacin de un usuario reside en uno o ms archivos en un servidor nico. Cuando el usuario debe acceder ms de un servidor, se requiere algn tipo de base de datos distribuda para evitar obligar al usuario a tener una contrasea en cada contexto. Tal esquema debe ser capaz de soportar cambios de contrasea y grupos de usuarios con permisos en un mismo nivel. Por estas razones Samba implementa en muchos casos directamente el modelo de dominio. Existen diversos esquemas de autenticacin posibles utilizables por Samba, tales como NIS; para mquinas Windows 95/98 y muchos otros clientes Samba puede comportarse como controlador maestro de dominio compartiendo la base de datos de autenticacin va NIS en forma transparente para los clientes. El soporte de dominio para Windows NT est ya disponible en las nuevas versiones. El soporte para perfiles de usuario es soportado por Samba para clientes Windows 95/98/NT desde tiempo atrs.

Samba: ejemplo de archivo de configuracin. ; ; =========================================== ; Archivo de configuracin simple para Samba. ; =========================================== ; archivo: smb.conf ; ; Provee: ; - acceso a directorios propios de usuarios ; - acceso a todas las impresoras en /etc/printcap ; ; Verificar: ; 1: Ruta a printcap; en general, /etc/printcap (BSD). ; 2: Validez del comando "print", que debe aceptar un archivo %s ; para una impresora %p y luego eliminar el archivo. ; 3: Ajuste "printing =" para el sistema: sysv, bsd, aix ; 4: Validez del comando "lpq" para el sistema. ; 5: El usuario en la cuenta "guest" debe existir; "nobody" da problemas ; en algunos sistemas; una opcin es "ftp". ; 6: Ajustar la opcin "security =": "share", "user", "server". ; 7: Limitar acceso con "hosts.allow", sobre todo en Internet. ; [global]

server string = Mquina %h con Samba %v printing = bsd printcap name = /etc/printcap load printers = yes guest account = pcguest hosts allow = 10.137.0.0 localhost ;Para tener un archivo de registro para cada cliente ; log file = /usr/local/samba/var/log.%m ;Para permitir acceso mltiple a los mismos archivos se requiere ;un directorio de bloqueos con permisos de lectura para todos ; lock directory = /usr/local/samba/var/locks ; share modes = yes ;Para autenticar contraseas por una mquina NT ; security = server ; password server = <Servidor-NT> ;Para autenticar con esta mquina UNIX; ;no colocar en este caso "password server" security = user ;Para incluir configuraciones especficas para cada mquina ; include = /usr/local/samba/var/lib/smb.conf.%m ;En algunas situaciones, este ajuste aumenta el rendimiento ; socket options = TCP_NODELAY ;Si se tienen varias interfaces de red en esta mquina ; interfaces = 10.137.107.200/24 10.137.109.200/24 ;o alternativamente ; interfaces = 10.137.107.200/255.255.255.0 \ ; 10.137.109.200/255.255.255.0 ;Para que Samba se anuncie en subredes o redes remotas ; remote announce = 10.137.105.255 192.168.1.255/GR-SAMBA ;Localizador Maestro de Dominio para manejar listas de subredes; ;no debe haber ya un servidor NT haciendo esta tarea domain master = yes ;Para dar ventaja en eleccin inicial de localizador a Samba preferred master = yes ;Si se tiene un servidor NT como Primary Domain Controller, ; domain master = no ; preferred master = no ; domain controller = <Servidor-NT-PDC> ;Para configurar servicio WINS (nica mquina) wins support = yes ;Si ya hay un servidor WINS, para referirse a l ; wins support = no ; wins server = 10.137.137.230 ;Para descargar y ejecutar un archivo de comandos .BAT en Win95 ;o .CMD en WinNT, por mquina %m o por usuario %U. ;Requiere servicio netlogon. ;El archivo de comandos debe estar escrito con cr/lf, estilo DOS. ; logon script = /usr/local/samba/lib/netlogon/%m.bat ;Directorios propios de usuarios, mapeo automtico al conectar [homes]

comment = Directorios propios de Usuarios browseable = no read only = no create mode = 0750 ;Para logon a dominio, scripts de logon ;[netlogon] ; comment = Servicio Netlogon ; path = /usr/local/samba/lib/netlogon ; guest ok = yes ; writable = no ; share modes = no ;Todas las impresoras definidas en esta mquina [printers] comment = Todas las Impresoras path = /tmp browseable = no printable = yes public = no writable = no create mode = 0700 ;Directorio accesible a todos sin contrasea, slo lectura [aplics] comment = Directorio Pblico slo lectura path = /export/softaplic writable = no public = yes ;Impresora privada del usuario freddy, quien debe tener permiso de ;escritura sobre el directorio de spool. [fredimp] comment = Impresora de Freddy valid users = freddy path = /homes/freddy printer = fred_imp public = no writable = no printable = yes ;Directorio privado del usuario Fred, quien debe tener permiso de ;escritura sobre el directorio. [freddir] comment = Directorio de Freddy path = /export/privados/freddy valid users = freddy public = no writable = yes printable = no ;Directorio pblico slo lectura excepto para el grupo "personal" [interno] comment = Directorio uso interno path = /export/publico/interno public = yes writable = no printable = no write list = @personal ;Un directorio diferente para cada mquina, con la variable %m;

;igual puede hacerse para cada usuario, con %u. [maquinas] comment = Directorios por mquina path = /usr/pc/%m public = no writeable = yes ;Directorio pblico, lectura escritura para todos; ;los archivos quedan en propiedad del dueo del directorio; ;todos pueden borrar archivos ajenos. [publico] path = /export/pub public = yes only guest = yes writable = yes printable = no

Configuracin del kernel


El ncleo o "kernel" Tipos de kernel Cundo configurar el kernel Configurar kernel en Solaris Configurar kernel en Linux Bibliografa

El ncleo o "kernel".
En el sistema operativo UNIX se reconocen tres niveles de abstraccin: - el hardware; - el ncleo del sistema operativo (kernel); - los programas de usuario (aplicaciones). El kernel presenta al usuario o los programas de aplicacin una interfaz de programacin de alto nivel, implementando la mayora de las facilidades requeridas por stos. Rene el manejo de una serie de siguientes conceptos ligados al hardware de nivel ms bajo: - procesos (tiempo compartido, espacios de direccionamiento protegidos); - seales y semforos; - memoria virtual ("swapping", paginado); - sistema de archivos; - tubos ("pipes") y conexiones de red. Una parte del kernel es independiente de los dispositivos presentes en el sistema, pero otra contiene los controladores necesarios para manejar partes especficas del hardware. El kernel intrepreta los pedidos de los programas y los traduce en secuencias de bits que, presentadas a los registros de los controladores, operan sobre los dispositivos fsicos. El kernel est escrito casi todo en C, salvo una pequea parte en lenguaje ensamblador para los procesos de bajo nivel. El tamao puede ir desde unos 400 KB hasta ms de 15 MB.

Tipos de kernel.

Todos los sistemas permiten indicar al kernel qu hardware encontrar, o cul no debe buscar; algunos kernels pueden explorar el sistema por s solos. Solaris usa un kernel totalmente modular, y puede cargar los controladores de dispositivos al momento que se necesitan, gracias a la coherencia de la arquitectura propietaria de Sun, mucho mayor que la de un computador personal. HP-UX tambin puede determinar su hardware sin intervencin del administrador. FreeBSD y los UNIX BSD en general requieren indicacin explcita del hardware del equipo; esto resulta a veces difcil por la poca informacin tcnica que los fabricantes de partes PC proveen a los usuarios. Linux compila los controladores en el kernel como los BSD, pero tambin maneja mdulos a la manera de Solaris, aunque no tan limpiamente, debido a las limitaciones de la arquitectura PC. En la siguiente tabla se muestra el nombre del directorio donde se compila el kernel (directorio de compilacin), as como nombre y ubicacin del kernel para algunos sistemas ejemplo: Sistema Directorio de compilacin Kernel Solaris (usa mdulos) /kernel/unix HP-UX /stand /stand/vmunix Linux /usr/src/linux /vmlinux o /boot/vmlinuz FreeBSD /usr/src/sys /kernel

Cuando configurar el kernel.


Para la instalacin las distribuciones proveen uno o ms kernels tpicos, adaptados a grandes grupos de hardware corriente, con muchos controladores y paquetes opcionales que no se usarn en nuestro sistema particular. Aunque no interferirn con el uso del sistema, un kernel adaptado a nuestro hardware ser ms chico, ocupar menos memoria, y ejecutar ms rpido. Si bien los kernels modernos pueden descartar en parte los controladores innecesarios, sus opciones quedarn activadas. Reconfigurar el kernel para el hardware especfico tiende a optimizar el rendimiento del sistema.

Otras razones para reconfigurar el kernel son la actualizacin de versiones y el agregado de nuevos dispositivos fsicos. Incorporar un nuevo controlador requiere actualizar las tablas y estructuras de datos del kernel. En muchas distribuciones esto implica reconfigurar el kernel; en otras puede bastar correr un programa de insercin de mdulos cargables en tiempo de ejecucin.

Configurar kernel en Solaris.


En el arranque el kernel de Solaris sondea los dispositivos e inicializa un controlador por cada uno de los que encuentra. Mediante la tcnica de mdulos cargables incorpora slo el cdigo correspondiente a los dispositivos fsicamente presentes. No obstante, en algunos casos este automatismo puede fallar, por errores o por no estar previsto ese dispositivo en particular, haciendo necesaria la configuracin manual. Solaris maneja la siguiente estructura de directorios para la carga de mdulos:

/kernel mdulos comunes a mquinas con el mismo conjunto de instrucciones. /platform/nombre-plataforma/kernel mdulos especficos para un tipo de mquina (reconocido en nombreplataforma). Por ejemplo, "Ultra Enterprise". Puede determinarse con uname -i. /platform/clase-hardware/kernel mdulos especficos para una clase de hardware (reconocido en clasehardware). Por ejemplo, sun4u. Puede determinarse con uname -m. /usr/kernel similar a /kernel. Solaris busca el kernel en las vas
/platform/nombre-plataforma/kernel:/kernel:/usr/kernel

El nombre del kernel buscado es "unix", y si no se encuentra, "genunix", un kernel ms genrico conteniendo slo la parte independiente de dispositivos. Los directorios de la va contienen una serie de subdirectorios de clasificacin de mdulos, tales como drv, misc, cpu, strmod, sparcv9, fs, exec, sched, sys, genunix, unix. Normalmente no es preciso tocar ningn archivo de estos subdirectorios, a no ser que el fabricante de un dispositivo lo establezca en forma especfica. El kernel de Solaris se configura en un archivo maestro de nombre /etc/system, consistente en una serie de variables (fijadas con set) y directivas (palabras reservadas). Manejar mal este archivo puede impedir el arranque. Con boot -a se intenta arrancar desde una copia respaldo si se la ha creado previamente. Un ejemplo de archivo /etc/system simple contendra algo as (excluyendo los comentarios):
rootfs:ufs

sistema de archivos tipo ufs.


rootdev:/sbus/@1,f800000/esp@0,800000/sd@3,0:a

dispositivo de arranque sd3a; /dev/sd3a es un enlace al nombre largo usado aqu.


moddir: /platform/SUNW/Ultra-Enterprise/kernel:/platform/sun4u/kernel: /kernel:/usr/kernel

va de bsqueda para los mdulos; va en una lnea nica.


forceload: drv/superplotter

fuerza la carga del mdulo indicado; exclude fuerza la exclusin de un mdulo.


set maxusers=64

dimensiona las tablas del kernel para atender un mximo de 64 usuarios simultneos. Una serie de comandos ayudan a encontrar fallas de configuracin:
prtconf

imprime la configuracin general de la mquina, incluyendo las dependencias entre controladores.


sysdef

descripcin muy pormenorizada de la configuracin de la mquina. Incluye todo lo mostrado por prtconf. Un impreso de la salida de este comando debe formar parte de la documentacin de mquina.
modinfo

informa sobre los mdulos cargables dinmicamente; es normal hallar 50 o ms.

Esta breve descripcin no es suficiente para configurar un kernel Solaris. En la mayora de los casos la tcnica de mdulos cargados dinmicamente hace innecesario reconfigurar el kernel Solaris, pero si debiera hacerse, leer cuidadosamente la documentacin antes de emprender la tarea.

Configurar kernel en Linux.


La configuracin del kernel en Linux se basa en un archivo /usr/src/linux/.config de crptico contenido. Existen no obstante interfaces ms comprensibles basadas en el comando make:
make config

pide una respuesta para cada opcin de configuracin; no permite correccin; poco flexible, conviene usar alguna de las otras.
make menuconfig

presenta las opciones de configuracin en forma de men con interfaz grfica en terminal de caracteres, clasificadas por grupos y con ayuda explicativa sobre cada una. Cada opcin puede compilarse en el kernel (marcada con *) o cargarse como mdulo (marcada con M). Cuando la opcin slo puede tomarse compilada la propia interfaz as lo hace.
make xconfig como make menuconfig

pero en X-Windows. Requiere autorizacin para root en el uso del ambiente grfico.

Los pasos para una compilacin de kernel en Linux incluyen:


cd /usr/src/linux

trasladarse al directorio de compilacin. Puede tener un nombre ms especfico, como /usr/src/kernel-source-2.2.17, indicando la versin de kernel a que corresponden los fuentes; /usr/src/linux suele ser un enlace simblico al nombre ms especfico.
make menuconfig

corre la interfaz de configuracin. Fijar las opciones deseadas, ya sea internas o como mdulos. La ayuda describe extensamente el significado de cada una, sugiriendo en muchos casos el ajuste.
make dep

resuelve las dependencias entre mdulos de compilacin en C (cdigo objeto y encabezados), a ms de otras.
make clean

asegura el inicio de la compilacin en un ambiente limpio de rastros de compilaciones anteriores (elimina archivos intermedios). Se usa cuando quiere arrancarse una compilacin desde cero, sin reutilizar el cdigo objeto.
make bzImage

compila un kernel comprimido de nombre bzImage. Puede crearse un kernel en disquete sustituyendo este comando por make bzdisk, una opcin segura para probar un nuevo kernel.
make modules

compila los mdulos marcados en la configuracin.


make modules_install

instala los mdulos compilados.


cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz

copia el kernel generado hacia donde se espera encontrarlo en el arranque. Si se cre en disquete bastar arrancar el equipo con el disquete.
vi /etc/lilo.conf

LILO (LInux LOader) es el programa de carga del kernel. Se configura en el archivo /etc/lilo.conf. Entre sus opciones mnimas debe encontrarse el dispositivo de arranque (p.ej. /dev/hda3), la ruta y nombre del kernel a arrancar (usualmente /boot/vmlinuz o /vmlinuz).
/sbin/lilo

Instala LILO segn la configuracin de LILO recientemente ajustada. Esta breve descripcin no es suficiente para configurar un kernel Linux. Debe leerse la documentacin, especialmente el archivo README ubicado en el directorio de compilacin. Es conveniente disponer de un modo alternativo de arrancar el sistema, por ejemplo en disquete, antes de recompilar el kernel. Alternativamente, compilar el kernel en disquete, probarlo y recin despus de verificar el correcto funcionamiento de todos los servicios copiar hacia la ubicacin definitiva en disco. Un disquete de arranque se crea simplemente haciendo
cp /usr/src/linux/arch/i386/boot/bzImage /dev/fd0

Un disquete de arranque con el kernel actual se crea igualmente haciendo


cp /boot/vmlinuz /dev/fd0

No confiar en estos disquetes hasta no probarlos. An con error de LILO, si disponemos de un kernel sano puede indicarse a LILO su ubicacin, as como otros parmetros. Al aparecer el prompt LILO: escribir algo as como
vmlinuz root=/dev/hda3 ether=0,0,eth0 ether=0,0,eth1

donde se indica el arranque del kernel vmlinuz ubicado en la particin /dev/hda3, e intentar reconocer 2 tarjetas de red Ethernet. Puede existir la opcin make install para instalar el kernel en su ubicacin definitiva y correr LILO; esto deja la mquina lista para arrancar con el nuevo kernel. Debe hacerse slo despus de haber probado el nuevo kernel compilado en disquete.

Impresin
Impresin en UNIX Trminos usuales en impresin Tipos de impresoras Impresoras seriales y paralelas Impresoras de red Sin PostScript Impresin BSD Proceso de impresin BSD El archivo /etc/printcap

Variables de printcap Control del ambiente de impresin Impresin System V Proceso de impresin System V Comandos de impresin System V Eliminar una impresora Agregar una impresora (BSD) LPRng Las impresoras PostScript Sugerencias Bibliografa y referencias.

Impresin en UNIX.
En el estado actual de la tecnologa las impresoras de matriz de puntos slo sobreviven en aplicaciones empresariales, sobre todo cuando son necesarias varias copias; las impresoras lser, cada vez ms accesibles, ofrecen velocidad a buena calidad como impresoras de red; la impresin barata es chorro de tinta, aunque el alto precio de los cartuchos hace ms rentable la impresin lser cuando se trata de cantidad. El sistema de impresin UNIX, sin embargo, ha permanecido casi constante frente a estos cambios: la mayora de los sistemas siguen usando el esquema tpico BSD (lpd, lpc, lpr, ...) o System V (lpsched, lpadmin, lp, ...). Muchos sistemas proveen comandos cruzados para el manejo de colas de impresin; la manera de determinar el sistema de impresin es viendo qu demonio est presente: lpd para BSD, lpsched para System V.

Trminos usuales en impresin.


spooler o servidor de impresin: software que recibe los trabajos a imprimir, los almacena en cola, les asigna prioridades y los enva secuencialmente hacia la impresora. Usa un directorio de "spool" o almacenamiento intermedio donde se ubican en espera los trabajos a imprimir.

dpi (Dots Per Inch, puntos por pulgada): medida de la resolucin o capacidad de presentacin de la impresora, expresada en la cantidad de puntos impresos por pulgada. Cuanto ms cantidad de puntos, mejor se ve el impreso. Suele expresarse como 360 x 720, indicando 360 dpi en la horizontal y 720 dpi en la vertical. PDL (Page Description Language, lenguaje descriptor de pgina): lenguaje comprendido por las impresoras usado para definir una imagen de la pgina a imprimir. El PDL hace ms eficiente la transmisin, facilita el trabajo de las aplicaciones, es

independiente de dispositivos y de la resolucin en dpi. Los ms conocidos son PostScript y PCL. bitmap: imagen grfica expresada mediante un conjunto de datos que indican el color de punto de la imagen. Todo PDL soporta al menos un tipo de bitmap. Los ms conocidos son JPEG, PNG, TIFF y GIF. RIP (Raster Image Processor, procesador de imagen de barrido): sistema que convierte PDL a bitmap, apropiado para un dispositivo de impresin en particular. El RIP suele residir en la impresora. filtros: programas intercalados en la secuencia del proceso de impresin para realizar transformaciones en los datos: conversin de formatos de archivo, contabilidad, comunicacin con la impresora. La impresin de un trabajo en PostScript en una impresora incapaz de interpretar PostScript requiere un filtro especfico para la marca y modelo de la impresora. PostScript: el PDL ms comn en UNIX, original de Adobe Systems; muchas impresoras aceptan PostScript directamente; todas las aplicaciones para diseo de pginas y publicacin generan PostScript . Es un lenguaje completo de programacin; su cdigo puede ser visto con cualquier procesador de texto. PCL (Printer Command Language): alternativa de Hewlett-Packard para PostScript, usado en impresoras HP, comn en computadores personales. UNIX no genera PCL; requiere un filtro para convertir desde otros formatos. roff: no es un PDL, sino un lenguaje para formato de textos, surgido en la poca de los terminales de caracteres. No se usa en documentos nuevos, pero existe mucho ya hecho, en particular las pginas man de UNIX. GNU produce groff, una versin sin costo de roff.

Tipos de impresoras.
Las impresoras se clasifican por el tipo de conexin (serie, paralelo, red) y por el formato de datos que comprenden (texto, PostScript, PCL, otro).

Existen actualmente impresoras baratas con escasa o ninguna inteligencia limitadas para su uso con Windows (WinPrinters). No convienen ni siquiera usando Windows: cargan al computador con tareas propias de la impresora. Pasa lo mismo con los WinModem.
Impresoras seriales y paralelas. Las impresoras seriales requieren intrincados detalles de configuracin, como velocidad de transferencia y otros; es preciso consultar la informacin de la impresora. La interfaz paralela de los PCs requieren poca configuracin y son ms rpidas. La interfaz serial permite cables de hasta 15 m; la paralela slo hasta 6 m. USB, una tecnologa serial nueva, est apareciendo ya en las versiones estables de FreeBSD y Linux.

Impresoras de red. Las impresoras de red disponen de una tarjeta y conexin completa a la red. Dirigir trabajos a una impresora de red es ms rpido que dirigirlos a una impresora local serie o paralela. Como cualquier mquina puede mandar trabajos a la impresora de red, aparecen problemas de contencin. Conviene mantener el manejo de todas las impresoras bajo unos pocos servidores; las mquinas restantes envan a los servidores. Hay impresoras lser de red con demonio lpd includo, capaces de manejar un spool como cualquier mquina UNIX. Hay impresoras de red viejas que requieren enviar trabajos de impresin al puerto TCP 9100; ofrecen dificultades de configuracin con BSD y SysV, pero no con LPRng, un nuevo diseo de servidor de impresin basado en BSD. Sin PostScript. Aunque todos los sistemas UNIX generan PostScript la mayora de las impresoras de chorro de tinta y las lser de poco precio no lo soportan. El paquete abierto GhostScript es capaz de convertir PostScript al PDL propio de cientos de impresoras. Al especificar GhostScript como filtro se debe indicar el nombre del filtro correspondiente a la impresora disponible; hay documentacin y ejemplos en el propio paquete.

Impresin BSD.
El sistema de impresin BSD ha escalado para soportar las impresoras y PDLs actuales, incluyendo soporte para impresoras compartidas en redes heterogneas. FreeBSD y Linux soportan el sistema de impresin BSD. El proceso de impresin. En BSD, el acceso a las impresoras es controlado por el demonio lpd: recibe los trabajos enviados por los usuarios u otros lpd remotos, los procesa y los transfiere a la impresora. lpd lee la configuracin de las impresoras en el archivo /etc/printcap.

Los usuarios envan trabajos de impresin usando el comando lpr. lpr y lpd se comunican usando el enchufe (socket) /dev/printer. El usuario puede indicar la impresora destino en el propio comando lpr con la opcin -P impresora; si no se indica, se usa la impresora indicada en la variable de ambiente PRINTER; si sta no existe, se usa la impresora por defecto configurada en el sistema (en /etc/printcap). Una vez determinada la impresora, lpr busca en /etc/printcap la entrada correspondiente a esa impresora, de la cual obtiene entre otros datos el directorio de spool donde debe colocar el trabajo, usualmente /var/spool/lpd/nombre_impresora. lpr crea por cada trabajo dos archivos, uno de control, de nombre cf seguido del nmero de trabajo, con informacin de manejo, y otro con los datos a imprimir, de nombre df seguido del mismo nmero. Una vez colocado el trabajo en el directorio de spool, lpr notifica a lpd la llegada de un trabajo de impresin. Ante un nuevo trabajo, lpd vuelve a leer /etc/printcap para saber si la impresora referida es local o remota; si es local, verifica la existencia de un demonio para manejo de la cola donde se encuentra el trabajo, y si no est lo crea como copia de s mismo; si es remota, abre una conexin al lpd de la mquina remota, le transfiere los archivos de control y datos, y luego borra las copias locales de ambos archivos.

Los trabajos se procesan en orden de llegada. La prioridad puede ser cambiada con lpc sobre un trabajo en particular; no hay manera de fijar prioridades por mquina origen o usuario. Cuando un trabajo est listo para imprimir, lpd crea una serie de tuberas (pipes) UNIX entre el archivo en spool y el hardware de impresin por las cuales son transferidos los datos, eventualmente pasando a travs de un proceso de filtro capaz de dar formato o implementar un protocolo especfico de la impresora.
El archivo /etc/printcap. El archivo /etc/printcap es la base de datos maestra del sistema de impresin. Una impresora debe estar descrita aqu antes de poder recibir trabajos. El formato es el mismo de /etc/termcap y /etc/remote: el primer item de entrada es una lista de nombres posibles para la impresora, separados por "|"; luego siguen un conjunto de ajustes separados por ":" , cada uno de los cuales es de la forma xx=cadena o xx#nmero, donde xx es un cdigo de 2 caracteres. Los comentarios comienzan con #; una entrada puede abarcar varias lneas si se usa \ como caracter de continuacin.
# Impresora Laser remota en mquina roble en Ingeniera roble-lj4|lping|l-56|HP Laserjet 4 de Ingenieria: \ :lp=:/var/spool/lpd/roble-lj4/.null: \ :rw: \ :sd=/var/spool/lpd/roble-lj4: \ :rm=roble: \ :rp=roble-lj4: \ :lf=/var/adm/lpd-errs:

Los nombres de la primera lnea reflejan la prctica de disponer de 3 nombres como mnimo para cada impresora, con este criterio: un nombre corto para uso en la prctica (lping); un nombre identificatorio de la mquina anfitrin y tipo de impresora (roblelj4); una descripcin larga con informacin adicional (HP laserjet 4 de Ingenieria). El nombre de impresora lp designa una impresora por defecto a la cual se dirigen todos los trabajos sin indicacin de impresora especfica. No conviene usar lp como nombre primario de una impresora; esto dificulta el cambio de impresora por defecto. En ausencia de impresora llamada lp la primera en /etc/printcap ser la impresora por defecto si la variable de ambiente PRINTER no indica otra cosa.
Variables de printcap. La descripcin completa de las muchas variables de usadas en el archivo de control de impresin /etc/printcap se encuentran en la pgina man printcap. Pueden agruparse en estas categoras bsicas: especificaciones de archivos y directorios; informacin para acceso remoto; filtros de impresin; ajustes de comunicaciones; informacin de pgina.

sd: (spool directory), directorio de spool o almacenamiento intermedio. Cada impresora debe tener su directorio de almacenamiento intermedio, an si la impresora es remota; los trabajos se almacenan localmente hasta ser transmitidos. El directorio de spool debe crearse a mano, con permisos 755, dueo y grupo daemon. El directorio de spool contiene, adems del trabajo a imprimir, dos archivos de estado: status y lock. El archivo status contiene una descripcin del estado de la impresora; es mantenido por lpd y consultado por lpq. El archivo de lock existe para evitar el arranque de ms de un demonio lpd para atender la misma cola, y para mantener informacin del trabajo en curso.

lf: (log file), archivo de registro de errores. Un archivo comn para errores de impresin basta para todas las impresoras; an las remotas deben disponer de un archivo de registro de errores, para registrar fallas de comunicacin. Los procesos filtro dirigen sus errores a otros archivos, segn lo especificado en syslog, no en el indicado por este parmetro. rw: si la impresora es capaz de emitir informacin de estado a travs de su archivo de dispositivo, debe especificarse lectura escritura sobre l incluyendo este parmetro en su descripcin. lp: nombre del dispositivo de impresin. Para impresoras locales debe especificarse el archivo /dev correspondiente al puerto al que se encuentra conectada. Las impresoras de red (diferentes de las remotas, se conectan a la LAN, no tienen mquina anfitrin) deben apuntar a un archivo falso (dummy) para permitir a lpd el bloquear ese archivo como indicacin de que la impresora est en uso. Ejemplo: lp:/var/spool/lpd/roblelj4/.null

af: (accounting file): la especificacin de este archivo permite llevar contabilidad de los trabajos de impresin, ya sea para cobrar o slo para conocer la carga sobre el sistema de impresin. El comando pac resume esta informacin contable; los nmeros de pgina son inciertos, salvo si el filtro es capaz de interrogar a la impresora por su nmero de copias antes y despus del trabajo, y la impresora es capaz de responder. mx: tamao mximo de archivo; no permite inferir nada para archivos PostScript o PDL. Puede ser necesario colocar mx#0 para habilitar impresiones de tamao ilimitado. rm y rp: acceso remoto. rm indica la mquina a la que debe enviarse el trabajo, rp el nombre de la impresora remota en la mquina donde est conectada. An una impresora de red debe definirse con un nico servidor habilitado para enviarle trabajo; un nico demonio lpd maneja la cola en forma ms eficiente, evitando el problema de contencin cuando muchas mquinas envan hacia la misma impresora de red. Definir en la mquina que contiene la impresora una entrada para "remota" que refiera a una entrada "local" en la propia mquina, con directorios de spool diferentes, es un artificio para poder usar siempre el nombre de la remota, ya sea en la mquina local o en otra mquina cualquiera, simplificando la administracin y la deteccin de fallas. of, if, nf: filtros de impresin. Los filtros son usualmente scripts en lenguaje de shell que invocan programas de traduccin, aceptando el trabajo a la entrada, efectuando la transformacin y devolvindolo en la salida. El filtro if se invoca una vez por cada trabajo; es el ms comn. El filtro of recibe toda la cola de trabajos en una invocacin

nica; es til para dispositivos lentos para conectar, actualmente escasos. La presencia simultnea de ambos hace que of imprima una pgina de anuncio (banner) e if procese el archivo. El siguiente ejemplo es un filtro if para imprimir PostScript en una impresora Epson Stylus, de naturaleza "no PostScript", usando el convertidor de dominio pblico ghostscript (gs) para intepretar el PostScript:
#!/usr/local/bin/bash # filtro de entrada para postscript en impresora comn /usr/local/bin/gs -q -dNOPAUSE -sPAPERSIZE=a4 -sDEVICE=stccolor -sOutputFile=- -

stccolor es el nombre de controlador para una impresora Epson Stylus Color. Este otro ejemplo es para una impresora PostScript:
#!/bin/csh -f /usr/local/bin/textps $* | /usr/local/bin/psreverse

El programa textps determina si el contenido a imprimir es PostScript, y si no lo es lo convierte a PostScript, usando los filtros que se indiquen como parmetros, a travs de $*. Luego, psreverse invierte el orden de las pginas para entregar el trabajo ordenado. Estos ejemplos son scripts; deben tener permiso de ejecucin. br: (baud rate), velocidad en bauds. Para impresoras seriales, indica la velocidad de la puerta serial. Ejemplo: br#9600 fc, fs (flag bits), bits de bandera. Para impresoras seriales. Fijan paridad, control de flujo, duplex, retardos. Funcionan combinados para fijar/quitar bits correspondientes a cada ajuste; la informacin se encuentra en la pgina man tty seccin 4. fc es "flag clear" para apagar bits, fs es "flag set" para prender bits, y la suma octal de fs y fc da como resultado los bits prendidos. sh: (suppress header), suprime impresin de pgina de encabezado. El archivo printcap admite extensiones: si son necesarias variables no previstas, interpretadas por los controladores de la impresora, pueden colocarse en /etc/printcap sin afectar el funcionamiento de lpd ni lpr. Variables no citadas en la pgina man deben aparecer en la documentacin del controlador de la impresora. Tambin es posible usar el sistema de impresin como spool para otros tipos de archivo: Nemeth[2000] cita un caso de uso para msica en MP3.
# #/etc/printcap # lx810|lp|lp0|Impresora matriz de puntos LX-810:\ :lp=/dev/lpt1:\ :sd=/var/spool/lx810:\ :mx#0:\

:pl#72:\ :pw#80:\ :sh:\ :hl:\ :lf=/var/spool/lx810/lp-err:\ :af=/var/spool/lx810/lp-acct: # hplaser|Impresora HP Laserjet 4 texto:\ :lp=/dev/lpt0:\ :sd=/var/spool/hplaser:\ :mx#0:\ :pl#72:\ :pw#80:\ :sh:\ :sf:\ :lf=/var/spool/hplaser/lp-err:\ :tr=\033&l0H:\ :af=/var/spool/hplaser/lp-acct: # pslaser|ps|Impresora HP Laserjet 4 PostScript:\ :lp=/dev/lpt0:\ :sd=/var/spool/pslaser:\ :mx#0:\ :pl#72:\ :pw#80:\ :sh:\ :sf:\ :lf=/var/spool/pslaser/lp-err:\ :if=/var/spool/pslaser/ps_input_filter:\ :tr=\033&l0H:\

:af=/var/account/pslaser-acct: # hp550c|Impresora HP Deskjet 550C remota en mquina ohm:\ :lp=:\ :mx#0:\ :rm=ohm:\ :rp=hp550c:\ :sd=/var/spool/hp550c: #

Control del ambiente de impresin.


Los comandos lpq, lprm y lpc son los ms usados en el manejo diario de las tareas de impresin.

lpq, normalmente acompaado de la opcin -Pimpresorau otra que restrinja la salida, muestra los trabajos en la cola de impresin, en el orden de prioridad asignado, arriba el que ser impreso primero. Otros datos incluyen el dueo del trabajo, el nmero de trabajo (jobid), nombre del archivo, tamao; la opcin -l da ms detalles. El nmero de trabajo importa para el manejo del mismo con lprm o lpc. lprm, en su forma ms comn lprm nro_trabajo, elimina de la cola el trabajo de nmero indicado; como lprm usuario elimina todos los trabajos enviados por ese usuario; lprm sin opciones elimina el trabajo activo; lprm - elimina todos los del usuario invocante, o todos los trabajos si el usuario es root. El xito de la operacin es denunciado con el aviso de la eliminacin del trabajo indicado por su nmero; curiosamente, no indica cuando falla. En algunos sistemas la remocin de un trabajo puede producir confusin en un filtro, dejando la impresora bloqueada e impidiendo su uso; identificar el proceso filtro con ps y eliminarlo desbloquea la impresora; rearrancando lpd se soluciona este problema; en este caso, la manipulacin con lpc es intil. El rearranque del equipo tambin lleva la impresin a estado de sana, pero una medida tan drstica no es simptica para ningn adiministrador; antes de llegar a eso, detener lpd, eliminar a mano con rm todos los trabajos en el directorio de spool y arrancar de nuevo lpd. lpc: comando administrativo, usado para habilitar/deshabilitar la cola de impresin, habilitar/deshabilitar la impresin en s, eliminar todos los trabajos de la cola, mover un trabajo hacia el principio de la cola, manipular el demonio lpd, obtener informacin de estado. No es capaz de resolver problemas cuando hay filtros de por medio, no funciona a travs de la red, ni dice siempre la verdad: puede aparentar arreglar todo pero nada funciona. Se usa normalmente en modo interactivo, disponiendo de diversos comandos:
help

muestra una lista de comandos internos de lpc

help comando enable impresora disable impresora start impresora stop impresora abort impresora

muestra ayuda del comando interno indicado habilita puesta en cola de trabajos deshabilita puesta en cola de trabajos habilita impresin en la impresora indicada deshabilita impresin, permite puesta en cola detiene impresin, an del trabajo en curso coloca la impresora fuera de servicio, muestra mensaje

down impresora mensaje up impresora clean impresora

vuelve la impresora al servicio elimina todos los trabajos de la cola mueve un trabajo hacia el principio de la cola aumenta prioridad de trabajos de usuario

topq impresora id_trabajo topq impresora usuario restart impresora status impresora

rearranca demonio de impresin; la falta de lpd la indica lpq indica estado de cola, impresin, demonio y entradas en cola

La opcin restart no desbloquea una impresora con un filtro corriendo; usar stop y luego start; asegurarse de eliminar tambin el proceso filtro. La falta de un demonio de impresin para una impresora determinada es normal cuando no hay trabajos para imprimir: el demonio se activa para imprimir los trabajos y luego desaparece.

Impresin System V.
System V no fue diseado para redes; no ha escalado bien, los fabricantes lo han modificado bastante, a veces sin razn. Solaris y HP-UX se basan en System V, con muchas particularidades propias. Proceso de impresin System V. Un usuario usa el comando lp para imprimir, ya sea en forma directa o no; lp recibe la entrada y la coloca en un archivo en el directorio de spool. El demonio lpsched determina cuando debe imprimirse el archivo, ejecuta el programa de interfaz que da formato al archivo y lo enva hacia la impresora correspondiente.

En System V se habla de "clases" y "destinos", nombres de hasta 14 caracteres alfanumricos y subrraya. Un destino es generalmente una impresora, pero podra ser otra cosa, por ejemplo un archivo de texto donde todos los usuarios pudieran agregar trozos, resolviendo as el problema de concurrencia originado en el acceso simultneo. Una clase es un conjunto de destinos sirviendo a un propsito comn, por ejemplo todas

las impresoras de una seccin o un local; el demonio lpsched puede dirigir un trabajo hacia una clase, asignando el destino ms conveniente segn los trabajos en cola.
Comandos de impresin System V. Los comandos ms usuales en impresin System V son los siguientes:
accept cancel disable enable lp lpadmin lpmove lpsched lpshut lpstat reject

comienza a aceptar trabajos para un dispositivo cancela un trabajo en cola o en ejecucin deshabilita la impresin en un dispositivo habilita la impresin en un dispositivo coloca trabajos en cola para imprimir configura el sistema de impresin mueve trabajos de un dispositivo de impresin a otro demonio que maneja la agenda de trabajos de impresin deshabilita lpsched muestra estado del sistema detiene la aceptacin de trabajos para un dispositivo

lp: comando a nivel de usuario para enviar trabajos a la cola de impresin. El directorio de spool para una impresora suele ser /var/spool/lp/request/destino, donde destino es la impresora en cuestin o una clase de impresoras. La opcin -ddestino permite direccionar hacia una impresora o una clase; si se omite, se consulta la variable de ambiente LPDEST, o en su defecto el dispositivo de impresin por defecto, asignable con lpadmin -d. lpsched: demonio que toma los archivos en el directorio de spool, ordenadamente, y los enva hacia el dispositivo de impresin, cuando est disponible. Si el destino es una clase, se dirige al primero que se encuentre disponible. Los errores suelen registrarse en /usr/spool/lp/log, registrando identificador de trabajo (jobid), usuario, impresora pedida, impresora asignada, hora de encolado. lpshut: elimina lpsched, algo necesario para correr lpadmin. Pueden seguirse enviando trabajos a la cola aunque lpsched no est presente, pero no sern impresos. Los trabajos interrumpidos se reimprimirn completos al restaurarse lpsched. Para arrancar de nuevo correr lpsched. lpadmin: define la configuracin de impresin local. Permite asignar nombre a las impresoras, crear clases, especificar impresora por defecto. Mantiene la configuracin creando archivos de texto en /usr/spool/lp, pero stos no deben ser manejados directamente, ya que son altamente sensibles a formato. La mayora de los comandos de

lpadmin lpsched

requieren que lpsched no est actuando, por lo que es buena prctica eliminar antes de usar lpadmin. Como ejemplo, para agregar una impresora, se requiere un comando de este tipo:
/usr/sbin/lpadmin -pimpresora -vdispositivo { -eimpresora | -mmodelo | -iinterfaz } [ -cclase ... ] [{ -l | -h}]

donde impresora es el nombre a asignar a la impresora, dispositivo el nombre de un archivo en /dev. Las banderas -e (para impresora existente), -m (modelo del que se tiene interfaz), -i (ruta al programa de interfaz), son diferentes formas de indicar el programa de interfaz encargado de dar formato a los trabajos antes de imprimirlos. Para eliminar una impresora,
lpadmin -ximpresora

No debe tener trabajos en cola. Existen muchas otras banderas aceptadas por lpadmin. lpstat: da informacin sobre el estado del sistema de impresin. Sin argumentos, da el estado de todos los trabajos de impresin del usuario; -pimpresora los de una impresora, -r el estado de lpsched. Hay muchas otras opciones.
Eliminar una impresora. A veces, intentar configurar o reconfigurar una impresora puede dejar el sistema de impresin en estado de confusin irrecuperable, al punto de que el proceso de eliminacin de la impresora con lpadmin no funcione. Los siguientes comandos eliminan una impresora por la fuerza:
lpshut lpadmin -xdestino find /usr/spool/lp -name destino rm -rf {} \; lpsched lpstat -t

Se eliminan por la fuerza los archivos de configuracin de la impresora destino. Si se trata de una clase, se estar eliminando toda la clase! El comando final, lpstat -t, muestra el estado completo, para verificar que se han eliminado todas las referencias a la impresora destino. Obviamente, esta receta ser utilizada slo cuando los procedimientos normales hayan fallado.

Agregar una impresora (BSD).


Resumimos los pasos para agregar una impresora en forma manual. En muchas distribuciones existen utilitarios para realizar esta tarea. Impresora local. o crear la entrada en /etc/printcap; o crear el directorio de spool; fijar dueo, grupo permisos; o probar la impresora: arrancar la cola (lpc start), enviar un archivo corto (lpr), mostrar la cola de impresin (lpq). Impresora remota.

crear la entrada en /etc/printcap para impresora remota (rm, rp); crear directorio de spool; fijar dueo, grupo, permisos; habilitar en /etc/hosts.lpd del servidor la nueva mquina cliente. Impresora de red. o fijar nmero IP de la impresora, segn se indique en el manual de la impresora. o verificar conectividad: la impresora debe responder a ping. o instalar la impresora en un servidor de impresin, como impresora remota. o crear el archivo falso, ajustar su dueo, grupo y permisos.

o o o

LPRng.
Basado en BSD, es un nuevo servidor de impresin, incorpora tambin lo mejor de System V. Todos los comandos BSD estn disponibles, pero sustitudos por los de LPRng, ms potentes y confiables. Los ms importantes comandos System V estn implementados como enlaces a sus versiones BSD; LPRng examina como fueron invocados, y se comportan segn lo esperado. LPRng prescinde de la necesidad de correr procesos como root e implementa muchas precauciones de seguridad. Tiene buenas rutinas de diagnstico, produce mensajes tiles y claros en caso de error. Implementa redireccin dinmica de colas de impresin, soporta varias impresoras en una misma cola, balancea la carga entre varias impresoras y otras maravillas, muchas de ellas inspiradas en System V.

En ambientes chicos de pocos usuarios y pocas impresoras puede no jusficarse el esfuerzo de configuracin, pero puede an valer la pena colocar LPRng en el servidor: resuelve muchos de los problemas tradicionales en los sistemas de impresin UNIX.

Las impresoras PostScript.


Algunos detalles relativos a las impresoras PostScript: Las impresoras PostScript contiene una CPU. La velocidad de impresin depende no slo de la parte mecnica sino de la CPU, que puede no estar usando al mximo la capacidad mecnica de impresin al procesar imgenes complicadas. Conectar las impresoras PostScript a interfaces bidireccionales, para permitir al software controlador de la impresora informar errores. Los intrpretes PostScript requieren mucha memoria, que puede agotarse al imprimir archivos PostScript complejos. Las impresoras PostScript tienen tipos de letra nativos; otros pueden ser cargados en memoria. Si el trabajo a imprimir contiene un tipo de letra no disponible en la impresora ni en la memoria, el trabajo se imprimir en Courier (generalmente). Una intefaz serial puede no ser eficiente para una impresora color o para imprimir bitmaps. Si un trabajo PostScript no imprime, usar una aplicacin tal como GhostView para visualizarlo en pantalla, como forma de asegurar la integridad del archivo. Algunas aplicaciones generan ocasionalmente comandos PostScript invlidos; los mensajes de error pueden ser diferentes ante un mismo tipo de error segn el intrprete PostScript.

Sugerencias.

Usar contabilidad de impresin, aunque no se cobre por el uso. No penaliza mucho el sistema, permite conocer la carga sobre la impresora, el origen de los trabajos, quines la usan. Todo esto ayuda cuando es preciso decidir tipo, caractersticas y ubicacin de una nueva impresora. No usar pginas de encabezado (banner) si no es imprescindible. Proveer facilidades para la reutlizacin del papel, o su reciclado. Proveer a los usuarios visualizadores en pantalla para disminuir las impresiones "borrador". Un buen uso de la contabilidad es detectar trabajos impresos repetidamente. No gastar en impresoras "caras": la tecnologa de impresin es madura; considerar calidad de impresin realmente requerida, produccin (pginas promedio por minuto), costo de insumos, fortaleza mecnica. Una impresora de 10 pginas por minuto es suficiente para al menos 5 escritores a tiempo completo. Mantener en stock cartuchos de tinta o toner; los cartuchos siempre se terminan cuando uno est imprimiendo :-). Una sacudida amable puede redistribuir el toner de un cartucho de impresora lser "gastado" y obtener unas 100 pginas ms. Asegurar la impresora de red: al ser accesibles va telnet para cambiar su configuracin, las impresoras de red proveen control por contrasea; fijarla.

Espacio en disco
El espacio en disco Aspectos polticos Monitoreo del espacio en disco Compresin de datos "Skulker scripts" Cuotas de disco Funcionamiento de las cuotas Habilitacin de cuotas Fijar cuotas sobre un sistema de archivos edquota quota, repquota Cuotas en NFS Ejercicios e Investigacin Bibliografa y referencias.

El espacio en disco.

El abaratamiento de los discos ha reducido considerablemente la incidencia del espacio ocupado por los usuarios. No obstante, los discos requieren administracin: hay que instalarlos, darles formato, montarlos en otras mquinas, respaldarlos, monitorarlos. Aunque el espacio en disco sea suficiente, es preciso insistir ante los usuarios para hacer un uso racional del recurso.

Aspectos polticos.
Existe una natural, y en parte justificada, tendencia a "conservarlo todo" en materia de archivos: es trabajoso seleccionar qu se debe guardar, todo puede servir algn da. En una mquina personal, el usuario simplemente borra cuando se qued sin espacio. En una red, siempre se espera que sea otro quien lo haga. Las recomendaciones generales dan poco resultado. Para un efectivo control del espacio en disco, es preciso determinar quienes son los usuarios ms consumidores y hacerles saber a ellos mismos que son fuente de problemas. Un script automtico puede recorrer los directorios personales, calcular el espacio consumido y publicar los "top 10", los 10 usuarios con ms espacio en disco ocupado. Enviar un correo automtico a los ofensores da resultado la primera vez, luego la novedad decae y los mensajes son borrados sin leer. La publicacin ante toda la comunidad de usuarios del espacio insumido por los mayores consumidores tiene un efecto mucho mayor. Si esta "presin social" no da resultado, es preciso enviar un corts mensaje personal al usuario; esto tiene mucho mayor efecto que un correo automtico. Proveer un medio de almacenamiento fuera de lnea (cinta, zip drives, grabadoras de CD), fcilmente disponible, con instrucciones claras, es una buena ayuda para usuarios y administradores.

Monitoreo del espacio en disco.


El comando quot informa sobre el espacio en disco consumido por los usuarios en cada sistema de archivos:
quot -f /dev/hda2

da una lista de la cantidad de bloques y archivos a nombre de cada usuario. Este comando no tiene nada que ver con el sistema de cuotas, analizado ms adelante. No est disponible en todas las versiones de UNIX.

El comando du da un resumen del uso de disco en una rama de directorios.


du -s /export/home/*

da el total para cada rama de subdirectorio bajo /export/home; esto no es efectivo para ver el consumo total de cada usuario si los usuarios tienen archivos en otras partes del sistema.

El comando df da un resumen del uso del espacio a nivel de todo el sistema:


df

muestra el espacio utilizado en cada sistema de archivos, incluso a veces en los que estn montados va NFS. Si se indica uno en particular, da el espacio utilizado en ese sistema de archivos:
df /dev/hda2

Estos comandos informan el espacio en "bloques"; los bloques tienen diferente tamao segn las versiones de UNIX, generalmente 512 b o 1 KB (1024 B); suele haber opciones para controlar la salida.

Compresin de datos.
Los sistemas UNIX suelen proveer al menos un conjunto de herramientas de compresin de archivos. El conjunto comprende, mnimamente: un programa para comprimir, un programa para descomprimir y un programa para visualizar comprimidos (u opciones de un mismo programa).

compress: tradicional en Uniz, compresin menor que gzip, algo ms rpido. Usa codificacion Lempel-Ziv adaptativa. Comandos: compress, uncompress, zcat. gzip: la mejor compresin, ms lento, alguna incompatibilidad entre versiones distintas de gzip. Esencial para descomprimir paquetes bajados por Internet. Algoritmo de compresin Lempel-Ziv (LZ77). Comandos: gzip, gunzip, zcat. zip: versin Unix del conocizo PKZIP de MS-DOS y Windows; anlogo a la accin combinada de los comandos tar y gzip. PKZIP (MS-DOS) y zip (Unix) crean archivos compatibles en tanto las versiones en uno y otro sistema operativo se correspondan. Comandos: zip, unzip. bzip2: comprime archivos con el algoritmo de compresin por reordenamiento de bloques de Burrows-Wheeler y codificacin Huffman. Obtiene generalmente mejor compresin que los programas basados en algoritmos LZ77/LZ78. Comandos: bzip2, bunzip2, bzcat, bzip2recover. Puede esperarse una reduccin de un 50% a un 75% en archivos de texto o binarios; los archivos encriptados no comprimen, o an se agrandan: sus datos son aleatorios, de distribucin uniforme; los programas de compresin no encuentran brechas para actuar. Lo mismo pasa al intentar comprimir archivos ya comprimidos.

"Skulker scripts".
Este nombre se aplica a los scripts que recorren el sistema buscando archivos innecesarios para borrar: temporales viejos, archivos "core", archivos "dead_letter", respaldos de edicin, etc. Los nombres de los archivos a borrar dependern de cada sistema; deben ser publicados,

para hacer saber a los usuarios que no deben emplear estos nombres, ni sorprenderse cuando sus archivos desaparezcan. Los scripts "skulker" suelen correrse semanalmente, por root, va cron.

Cuotas de disco.
Ante una falta de espacio en disco, la primera pregunta que cabe hacerse hoy da es si no ser necesario agregar discos. Si esto no es posible, mientras se logre mantener bajo control el espacio en disco usando la persuasin y la presin social de de los pares, no se hallar mtodo mejor. Muchos administradores consideran obsoleto el control de espacio en disco por cuotas, sobre todo por la baja de costo de los discos y la frecuencia de uso de discos locales en las estaciones de trabajo de los usuarios. En las unidades compartidas, cuando la comunidad de usuarios es propensa a consumos desmedidos o incontrolables, puede ser necesario implementar cuotas de uso de disco para forzar a los usuarios a mantenerse dentro de lmites prefijados de uso.

El sistema de cuotas permite limitar tanto el nmero de inodos como la cantidad de bloques que un usuario puede ocupar. La cantidad de inodos est directamente relacionada con la cantidad de archivos; la cantidad de bloques, con el espacio ocupado. Cada uno de estos lmites tiene dos valores: un valor soft y un valor hard. Superar el valor soft origina una advertencia; el valor hard impide ocupar ms disco. Un lapso prolongado (ms de 3 das, por ejemplo), superando el valor soft, lo impone rgidamente, tal como el hard, hasta que el usuario borra, momento en que se reinicia el conteo de tiempo. Muchas versiones implementan cuotas tambin sobre grupos, permitiendo controlar el espacio que insume un proyecto o equipo de trabajo. Un beneficio colateral de las cuotas es que impiden a los programas descontrolados llenar el disco: se trancan en cuanto se supera la cuota correspondiente al usuario invocante. Los inconvenientes esenciales de las cuotas son el mantenimiento administrativo y la carga que imponen sobre el sistema: un sistema de archivos puede perder hasta un 30 % de rendimiento al estar procesando cuotas. Como las cuotas se imponen por sistema de archivo, es preciso tener una adecuada divisin en sistemas de archivo diferentes, para no poner cuotas sobre aquellos donde los usuarios no tienen derechos, evitando as detrimentar su rendimiento. Las cuotas se asignan por sistema de archivos, y dentro de un mismo sistema de archivos, por usuario: un usuario habilitado a grabar en dos sistemas de archivo diferentes obliga a fijar su cuota en ambos. Si no se fija cuota para un usuario, se entiende que no tiene lmite. Lo mismo vale para cuotas de grupo.
Funcionamiento de las cuotas. La informacin de cuotas para un sistema de archivos se encuentra en el archivo quotas del directorio raz del sistema de archivos. Si se soportan cuotas para usuarios y grupos, los archivos suelen ser dos: quota.user y quota.group. El kernel actualiza el archivo quotas toda vez que una operacin altera la cantidad de bloques ocupados por un usuario. Los comandos usuales para el manejo de cuotas son los siguientes:

edquota: permite editar los archivos quota.* para fijar las cuotas. quota, repquota: muestran informacin de cuotas y espacio insumido para usuarios y grupos. quotacheck: recorre todo el sistema de archivos bloque a bloque calculando el espacio utilizado; luego actualiza el archivo quotas. Suele corrrselo en el arranque del sistema con la opcin -a para que verifique todos los sistemas de archivo montados que tengan activado el sistema de cuotas. Con -v muestra una lista de usuarios y sus consumos. La opcin -p examina los sistemas de archivos en paralelo, a la manera de fsck.
Habilitacin de cuotas. Para habilitar el sistema de cuotas, esta opcin debe estar compilada en el kernel. En muchas versiones sto ya viene hecho; de no ser as, habr que habilitar la opcin y recompilar el kernel o activar el mdulo cargable. Adems de sto, es preciso habilitar explcitamente el sistema de cuotas al arrancar el sistema y despus de montados los sistemas de archivos; esto se har desde un script rc o desde inittab, segn la versin de UNIX. Una secuencia tpica de comandos de arranque puede ser:
/sbin/mount -a echo -n 'verificando cuotas...' /sbin/quotacheck -avug echo ' hecho.' /sbin/quotaon -avug

donde las opciones significan: a recorrer todos los sistemas de archivos registrados en /etc/fstab, v mensajes verbosos, u habilitar cuotas para usuarios, g habilitar cuotas para grupos. La habilitacin de cuotas debe hacerse siempre despus que los sistemas de archivos han sido montados; de otro modo, no funcionar. Fijar cuotas sobre un sistema de archivos. Requiere crear y configurar el o los archivos de cuotas, y declarar el uso de cuotas en el sistema de archivos en la tabla de sistemas de archivos.
cd /usuarios touch quota.user touch quota.group chmod 600 quota.user quota.group # directorio raz de la particin

Operando como root, estos comandos crean un archivos de cuotas vacos para usuarios y grupos en el sistema de archivos montado sobre /usuarios.

Para activar las cuotas, en el archivo /etc/fstab (BSD), se agrega a la lnea de montaje del sistema de archivos las opciones userquota y groupquota; otros sistemas sustituyen la opcin rw en este archivo por rq, lectura-escritura con cuotas.
# /etc/fstab con cuotas /dev/hda1 /dev/hda2 / /usuarios ext2 ext2 defaults defaults,usrquota,grpquota 1 1 1 2

Este ejemplo habilita cuotas para grupos y usuarios sobre la particin montada sobre el directorio /usuarios. Luego de fijar las cuotas para cada usuario, con el comando edquota, estos archivos se poblarn corriendo el comando quotacheck sobre la particin en cuestin. edquota. El comando
edquota -u nombre_usuario

permite editar el valor de cuota para el usuario indicado. El comando edquota suele correr una versin de vi (o el editor especificado en la variable EDITOR) mostrando un formato base para la edicin, referenciando todos los sistemas de archivos en el cual el usuario tenga cuota habilitada:
Quotas for user jperez /dev/hda2: blocks in use: 2594, limits (soft = 5000, hard = 6500) inodes in use: 356, limits (soft = 1000, hard = 1500)

Para grupos es anlogo, usando el comando


edquota -g nombre_grupo

La forma de trabajo usual el definir algunos "usuarios prototipo", fijarles cuota individualmente con el comando edquota, y luego asignar cuotas a los restantes usuarios conforme alguno de los usuarios prototipo. El comando
edquota -p nombre_usuario_prototipo nombre_usuario

permite fijar la cuota de usuario al valor de cuota de un usuario prototipo.

Un esquema prctico es disponer de 3 usuarios prototipo: chico, medio y grande, para as fijar fcilmente los valores de cuota de los usuarios reales segn los de estos usuarios prototipo.
Para fijar cuotas a los grupos puede seguirse un esquema anlogo, con el comando:
edquota -p nombre_grupo_prototipo nombre_grupo

Puede fijarse un tiempo de gracia durante el cual se permite al usuario mantener un consumo por encima del lmite soft antes de forzar su cumplimiento, mediante el comando
edquota -t usuario

que abre el editor con algo similar a sto:


Time units may be: days, hours, minutes or seconds Grace period before enforcing soft limits for users: /dev/hda2: block grace period: 0 days, file grace period: 0 days

donde es habitual cambiar el 0 por 7 para dar una semana de gracia a los usuarios. quota, repquota.
quota nombre_usuario

informa al usuario sobre cuota en el sistema de archivos en que se encuentra; con -v informa en todos los sistemas de archivos. Slo el superusuario puede ver cuotas ajenas. login corre quota cada vez que el usuario ingresa; esto puede producir retardos, sobre todo para sistemas de archivos remotos.

repquota

produce un informe similar al de quot o quotacheck -v; tambin informa de cuotas para usuarios individuales.
Cuotas sobre NFS. La implementacin de cuotas es local al sistema de archivos; los sistemas cliente no hacen verificacin de cuota, pero los lmites son verificados en el servidor en todas las operaciones que afectan el consumo de disco, por lo que la limitacin es efectiva. Muchos sistemas proveen rquotad para responder informacin de cuota a travs de la red mediante el comando quota, advertiendo a los usuarios sobre uso de espacio en sistemas de archivos montados va NFS.

Ejercicios e Investigacin.

1. Determine si su sistema dispone del comando quot, quota o alguna forma de determinar el espacio en disco ocupado por cada usuario. Verifique su funcionamiento con y sin el sistema de cuotas activado.

2. Investigue la asignacin de derechos de sus usuarios en su sistema: si pueden escribir en otros directorios adems del propio, o en ms de un sistema de archivos. No olvide los archivos pblicos, como suele ser /tmp, donde puede escribir todo el mundo. Evale, segn los resultados, la dificultad para determinar el espacio en disco ocupado por los usuarios, sobre todo si no dispone de un comando similar a quot. 3. Investigue si su sistema provee algn tipo de "skulker script". Si es as, examine la documentacin o el cdigo para determinar exactamente qu hace. Qu informacin debera publicar ante los usuarios antes de utilizar este script? 4. Si su sistema no dispone de "skulker script", cules seran los lineamientos para escribir uno? Con qu privilegios y de qu forma debera correr? Cules son sus riesgos potenciales, ya sea por omisin (no borrar lo que se debiera) o por exceso (borrar lo que no se debe)? 5. Investigue la disponibilidad de cuotas en su sistema. Estudie sus comandos y realice una prueba, limitando el uso de disco de un usuario irreal. Verifique el funcionamiento, si existen los lmites soft y hard, el tiempo de permanencia por encima del lmite soft. 6. Intente efectuar medidas de la influencia del sistema de cuotas sobre el rendimiento en el servicio de archivos. A modo de sugerencia, puede escribirse un script que realice una serie de operaciones de copia imprimiendo la hora al principio y al final, y luego correrlo con y sin cuotas habilitadas. Se obtiene algn resultado significativo? Cmo puede mejorarse la medida? Qu factores pueden estar falseando los resultados? 7. Dispone sus sistema de alguna facilidad para el almacenamiento de datos fuera de lnea? Es accesible a todos los usuarios? Es difcil de manejar? Es complicado recuperar datos? Existe algn instructivo? Los usuarios saben que existe? Lo utilizan? Determine si es posible mejorar las respuestas a estas preguntas.

Bibliografa y Referencias.
Pginas man: quot, df, du; gzip, compress, zip, bzip2; quota, edquota, repquota, quotacheck, quotaon, quotaoff, rquotad.

Archivos: quota, quota.user, quota.group, /etc/fstab (BSD), etc/vfstab (system V).

Nociones de Seguridad
Introduccin Daremos una muy breve introduccin a algunos de los temas que deben ser tomados en cuenta para planificar la seguridad de nuestros sistemas. Debe quedar claro que, como introduccin que es, solo pretende motivar al lector sobre la necesidad de estudiar la seguridad de nuestros sistemas. El primer hecho a tener en cuenta es que el sistema operativo UNIX no fue diseado pensando en la seguridad, sino en la conveniencia y la facilidad de uso en un ambiente de confianza relativa, y por ello es imposible hacerlo 100% seguro. Sin embargo, muchas cosas pueden hacerse para hacer que nuestros sistemas sean ms resistentes a los ataques. Siempre existe un compromiso entre la seguridad que ofrece un sistema y la facilidad y conveniencia de su uso. En cada caso, es necesario evaluar cul es el nivel de seguridad requerido y actuar en consecuencia. No son iguales los requerimientos de seguridad de un sistema personal ubicado en nuestro hogar, a los de un sistema militar, o a los de un equipo controlando procesos industriales. En cada caso, es necesario plantear polticas de seguridad adecuadas tanto para los administradores como para los usuarios del sistema.

Enfoque del problema Lo primero que debe tener claro un administrador es qu es lo que debe ser protegido, y qu se puede perder. Las prdidas pueden ser tanto prdidas monetarias (directas, como prdida del equipo, si este es robado o inutilizado completamente, o indirectas, por prdida de confiabilidad de la empresa, prdida de negocios, etc.), prdida de informacin (secretos de empresa, informacin personal, etc.), o prdida de "uso" (el costo de no poder brindar el servicio). En cada caso las soluciones sern distintas. Tambin debemos pensar de quin lo debemos proteger, y las rutas de acceso existentes. Podemos tener tanto amenazas externas (directas o a travs de redes) como internas a nuestra organizacin (tanto usuarios maliciosos, como usuarios inexpertos o herramientas con bugs que causan dao inintencionalmente, como programas trojanos que dicen realizar una tarea y en realidad realizan otras). Una buena estrategia de seguridad es un conjunto de polticas que prevengan todas las amenazas relevantes, en la medida que puedan ser prevenidas, y en la medida en que nuestra organizacin y nuestros usuarios estn dispuestos a aceptar los inconvenientes que presenten dichas medidas de seguridad; y que nos permita recuperarnos en el caso en que lo peor suceda. La seguridad debe verse como un proceso y no como algo que se puede instalar y olvidar. Reglas de sentido comn No poner en nuestro sistema archivos que sean interesantes para hackers o usuarios entrometidos. En caso que sea necesario tenerlos disponibles, redoblar los esfuerzos de seguridad, de ser posible encriptando los datos o haciendolos inaccesibles o inutilizables externamente.

Eliminar los agujeros de seguridad que puedan ser utilizados para ganar acceso a nuestro sistema. Para ello, debemos estar al tanto de los boletines de seguridad correspondientes a nuestro sistema y otras fuentes de informacin. No permitir sitios donde los hackers tengan acceso. Eso incluye cuentas pblicas, directorios de ftp pblico con permiso de escritura, cuentas grupales, etc. Poner "trampas" bsicas en sitios accesibles (especialmente desde internet). Utilizar herramientas como tripwire, COPS, etc para ser capaces de detectar intrusiones en sus primeras fases. Monitorear los reportes de estas herramientas. No confiar en "recetas mgicas". Aprender acerca de la seguridad en UNIX y no dejarse atrapar por recetas mgicas de "consultores en seguridad" que muchas veces lo nico que nos dejan es un falso sentimiento de seguridad. No es que todos los consultores nos vayan a engaar, pero debemos desconfiar si nos prometen que una nica accin nos dejar protegidos "para siempre". Minimizar los servicios que brinda nuestra mquina, no habilitando servicios innecesariamente, especialmente en los equipos expuestos a un ambiente hostil. Ser "curioso", investigar toda actividad fuera de lo comn en nuestro sistema, mensajes extraos en los logs, actividad de usuarios que se encuentran de vacaciones, etc. Planear de antemano qu hacer en caso de un compromiso a la seguridad, y disponer de respaldos confiables del sistema en un estado conocido.

Lneas de defensa
Acceso fsico a la computadora. La primer lnea de defensa es el acceso fsico a la propia mquina. Esto puede variar desde mnimas prevenciones para que no nos roben la mquina o la rompan, pasando por evitar el acceso de personal no autorizado a la consola y la CPU (por ejemplo para evitar que se pueda apagar y prender la mquina para reiniciarla en modo "single-user"), hasta aquellas instalaciones en que el acceso a las computadoras est limitado por varios sistemas de seguridad y guardias armados, como puede suceder en algunas instalaciones militares. Aunque en la mayora de las instalaciones no es necesaria tanta "paranoia", al menos es necesario evitar que nos apaguen la mquina, y es conveniente que las consolas y terminales esten "a la vista", para que los posibles "hackers" vean su accionar mas controlado. Validacin de usuarios y passwords. La siguiente lnea de defensa, una vez que se obtuvo acceso a la mquina (permitido o no) es la validacin de acceso a los usuarios. Esta validacin tiene como objeto verificar que quien pretende dar comandos a la mquina es un usuario autorizado para hacerlo. Normalmente, esta validacin se realiza solicitando al usuario un nombre de cuenta y una contrasea, que son chequeadas contra las que el sistema tiene guardadas. Tradicionalmente los datos del usuario (su cuenta y su contrasea encriptada) se guardaban en el archivo /etc/passwd, donde son legibles por todos los usuarios (esto es necesario para el funcionamiento de varias utilidades del sistema). El mtodo de encriptacin es "en un solo sentido", es decir que no existe un algoritmo conocido que permita obtener la contrasea original a partir de la encriptada (otro que probar hasta que se encuentre la correcta). Sin embargo, hoy en da en que con computadoras de muy bajo costo se pueden probar varios miles de encriptaciones por segundo, el hecho de que la password encriptada est disponible

para cualquiera se presta a ataques mediante "metodos de fuerza bruta", encriptando palabras de un diccionario y comparndolas con la password encriptada. Para que estos ataques no sean exitosos, es necesario que las passwords de los usuarios sean bien elegidas. Son malas elecciones las passwords muy cortas, aquellas que contienen palabras que se encuentran en un diccionario, modificaciones triviales de estas, palabras que se encuentran en los datos del usuario en el sistema, datos personales del usuario, y cualquier otra informacin fcilmente relacionable con el usuario. Para mitigar este problema, la mayora de los sistemas modernos proveen el mecanismo de "shadow passwords", en donde el archivo /etc/passwd contiene los datos del usuario EXCEPTO la contrasea, y existe otro archivo, con permisos mucho mas restrictivos, donde se encuentra la contrasea e informacin adicional del usuario. El nico acceso a estas contraseas es para verificar la validez de una contrasea dada a travs de funciones del sistema, las cuales son artificialmente lentas para minimizar el riezgo de un ataque por la fuerza bruta. Otro problema que puede presentarse es el de la existencia de cuentas colectivas (es decir cuentas utilizadas por varias personas) y cuentas "pblicas" (cuentas de usuario sin password que supuestamente pueden realizar muy pocas cosas). Estas se deben evitar en la medida de lo posible. Otro tema importante a tener en cuenta es cmo se eligen las contraseas, especialmente la de root, y cada cuanto estas son cambiadas. Muchos sistemas proveen opciones para forzar a los usuarios a no utilizar contraseas triviales, a cambiarlas a intervalos de tiempo regulares (password aging), y a no reutilizar contraseas anteriores. El sistema de validacin debe ser monitoreado regularmente para verificar que no ha sido modificado ilegalmente. Especialmente deben buscarse usuarios con UID 0 (superusuario, independientemente de como se llame), usuarios sin contraseas, etc. Existen sistemas de validacin avanzados para necesidades especficas, que se pueden agregar a varios sistemas. Estos varan desde sistemas con multiples niveles de passwords, a sistemas con acceso mediante tarjetas o reconocimiento biomtrico. Muchos de estos sistemas, extremadamente caros hace unos aos, son cada da ms accesibles econmicamente.

Protegiendo archivos y el filesystem. Una vez que se tiene acceso al sistema, la siguiente lnea de defensa es la proteccin brindada por los permisos en los archivos y filesystems. Esto es vlido tanto para minimizar el dao que pueda ocasionar alguien que logr acceder ilegalmente a nuestro sistema, como para protegernos de nuestros propios usuarios. En general, el objetivo de toda medida de seguridad en un sistema es evitar que la gente haga cosas que no debera. Esto principalmente significa evitar acceso a la cuenta de root (directa o indirectamente) y a los archivos del sistema. En UNIX clsico, la seguridad es "ON/OFF". Existe un nico usuario con permisos globales para realizar cualquier tarea sobre el sistema (el usuario con UID 0, usualmente llamado root), y los dems usuarios tienen solamente permisos correspondientes a las tareas especficas que pueden realizar, otorgados mediante permisos en los archivos del filesystem. No es posible fcilmente delegar tareas de administracin puntuales (aunque existen utilidades como "sudo" que nos permiten delegar ciertas tareas). Eso hace que el acceso a la cuenta de root deba ser extremadamente controlado.

En algunas variedades de UNIX existen agregados que permiten dividir la responsabilidad con una mejor granularidad, usualmente mediante permisos ms granulares en el filesystem (Listas de control de acceso, ACL's), y mediante la separacin de los poderes "omnipotentes" de root en un conjunto de "capabilities" que se pueden asignar independientemente. Problemas con el path Una forma de subvertir la seguridad del sistema es hacer que root u otros usuarios ejecuten comandos inadvertidamente. Una forma de lograr esto es colocar programas con el mismo nombre que algn comando del sistema en un directorio que se encuentre antes en el path que el directorio del programa original (y que pueda ser escrito). Por ello, es importante que en el path el directorio actual (".") y los directorios relativos no se encuentren en el path, o que se encuentren al final del path. Adems, es importante que ninguno de los directorios en el path de root se pueda escribir por alguien que no sea root, nuevamente para evitar que se pueda sustituir un comando estandard por otro programa.

Permisos en los archivos del sistema Los sistemas UNIX dependen de una cantidad de archivos para su correcto funcionamiento, y los permisos en dichos archivos deben ser adecuados. Algunas reas a ser tomadas en consideracin son: Los archivos de arranque del sistema. En ellos se ejecutan todos los comandos necesarios para el funcionamiento normal multiusuario del sistema, y normalmente se arrancan los servicios que el equipo brinda. Estos archivos se ejecutan con permisos de root cada vez que se inicia el sistema, y por lo tanto deben ser de escritura solo para root (as como el directorio donde estn contenidos) (en algunos sistemas el grupo system o similar puede tener permiso de escritura). Los archivos de configuracin de los distintos servicios que brinda el sistema. Cambiando la configuracin de los programas que brindan determinados servicios (muchas veces corriendo como root) se los puede obligar a cambiar su comportamiento en forma no esperada, dar servicio a usuarios o mquinas en los que normalmente no se confa, o hacer que no funcionen. Los archivos relativos a la validacin de usuarios. Tanto el archivo de passwords (que debe ser solo de escritura para root) como los archivos adicionales de otros sistemas (como las "shadow passwords" que para cumplir su cometido no deben tener permisos de lectura para ningn usuario excepto root) deben tener los permisos adecuados. Recordemos que en casi todos los sistemas de validacin alcanza con que un usuario tenga uid=0 para que tenga los mismos derechos de acceso total sobre el sistema que root. Los archivos del directorio /dev. En el directorio /dev estn representados todos los dispositivos del sistema, y el acceso a varios de ellos permite el acceso "directo" al hardware de la mquina. Por ejemplo, en muchos sistemas el archivo /dev/kmem o /dev/mem representa la memoria del sistema, es decir que el poder leer dicho dispositivo nos permite ver toda la informacin que el sistema tenga en la memoria (como por ejemplo la password que acabamos de teclear). Otros dispositivos que pueden darnos acceso a datos "sensitivos" son los correspondientes a los discos y particiones. Con el suficiente conocimiento teniendo acceso a dichos dispositivos se puede leer cualquier archivo del filesystem.

Otro grupo de archivos a ser tomado en especial consideracin es el de los archivos setuid y setgid, especialmente los programas setuid cuyo dueo sea root. El sistema setuid y setgid permite, bien administrado, dar acceso limitado al sistema en forma temporal, comando por comando (por ejemplo, el comando passwd, setuid a root, permite que el usuario modifique el archivo de passwords, pero solo para cambiar su contrasea). Sin embargo, tambin pueden representar un serio compromiso a la seguridad, tanto por problemas de diseo como por problemas de programacin. Los comandos suid no deben permitir realizar ninguna otra operacin adems de la que fueron diseados para realizar.

Esta lista no es en absoluto exhaustiva, se debe investigar cuales son los archivos "importantes" en nuestro sistema. Uno de los puntos importantes, en un sistema que deba ser seguro, es minimizar los servicios y programas instalados, para disminuir la probabilidad de que se encuentre una vulnerabilidad en un servicio que tengamos instalado.
Permisos en otros archivos Muchos otros archivos deben tener permisos adecuados. En particular los archivos de inicializacin (.login y .cshrc o .profile) del shell que el usuario ejecute normalmente no debe poderse escribir por otros usuarios (para evitar que se puedan agregar ahi comandos por parte de otros usuarios). Por supuesto, debe tambin ponerse cuidado en los permisos de los archivos sensibles que podamos tener en nuestro sistema, y proteger la privacidad de nuestros usuarios. Por ejemplo, los permisos en los mailboxes de los usuarios no deben poder ser ledos por ningn usuario que no sea el dueo

Otras medidas Existen algunas medidas para minimizar los daos en caso que la seguridad del sistema sea violada.

Una forma de evitar que los datos que alguien nos pueda "robar" puedan ser utilizados es mediante encriptacin. Si se elige un algoritmo adecuado (y no se guardan las claves en el sistema), se puede tener una razonable certeza que los datos robados no podrn ser utilizados por otros. La mayora de los sistemas proveen programas de encriptacin bsicos, y existen mltiples programas de dominio pblico para implementar los algoritmos mas conocidos de encriptacin. La otra medida importante en muchos casos para minimizar los daos es tener una buena poltica de backup, que nos permita recuperar rpidamente los servicios perdidos (y restaurar nuestro sistema a un estado conocido).

La Seguridad y las Redes


Cuando una mquina est conectada a una red, se agregan un conjunto de posibles problemas a la seguridad, especialmente si no tenemos control sobre todas las partes de dicha red (como es el caso en una red pblica como puede ser Internet).

Hay diversas clases de ataques que pueden provenir de una red. Principalmente los podemos dividir en aquellos en que se compromete la seguridad de los datos contenidos en el sistema o el sistema en s, y aquellos en lo que se compromete es el servicio que el equipo brinda (denial of service attacks). Estos ltimos se basan ya sea en explotar errores en los programas que atienden dichos servicios, errores en el sistema en s, o deficiencias en los protocolos que se utilizan en la red, y no los trataremos aqu.

Relaciones de confianza y las utilidades r* Todas las utilidades r* (rlogin, rexec, rsh, rcp) hoy en da se consideran inseguras, solamente aptas para su utilizacin en redes locales no expuestas a amenazas de seguridad.

Por defecto, cuando un usuario desea acceder otros hosts en la red, se le solicita una password. Esto es as tanto si se desea loguearse de forma remota (mediante rlogin) como si se desea ejecutar comandos remotos mediante rsh. Adems, no se puede utilizar rcp, ya que este no sabe como pedir passwords. Para permitir el acceso remoto sin passwords, existe un sistema de "equivalencia de hosts" conectados mediante TCP/IP. El sistema determina el permiso para que un usuario remoto se conecte mirando en dos archivos, /etc/hosts.equiv y el archivo .rhosts en el directorio home del usuario. Dichos archivos debern ser construidos de acuerdo a la seguridad requerida del sistema.
Equivalencia entre mquinas: /etc/hosts.equiv El primer nivel de equivalencia es a nivel de mquinas. Cada mquina tiene un archivo /etc/hosts.equiv, el cual es simplemente una lista de mquinas, uno por lnea, que consideramos equivalentes a la nuestra en cuanto a los usuarios y su seguridad. En este archivo se pueden poner todas las mquinas de nuestra red, ninguna, o aquellas que nosotros queramos. Cuando un usuario de un equipo remoto intenta un acceso mediante rlogin, rsh o rcp, el sistema verifica si la mquina pidiendo acceso se encuentra en el archivo /etc/hosts.equiv. Si as es, y hay una cuenta de usuario en el sistema con el mismo nombre que el usuario remoto, se permite el acceso sin solicitar contrasea. Esto funciona para todas las cuentas EXCEPTO la de root. Esta equivalencia efectivamente significa que las cuentas con el mismo nombre en el sistema remoto que en el local son equivalentes. Por ello, solo se debe utilizar este sistema si los usuarios son los mismos en ambos sistemas, y si podemos confiar plenamente en la seguridad del sistema remoto. Los sistemas de equivalencia entre mquinas, y en especial los servicios de rlogin, rsh y rcp, estn siendo paulatinamente sustituidos con servicios con mejores prestaciones de seguridad (mayormente SSH), y solo se deben utilizar en redes locales en las que no tengamos equipos potencialmente maliciosos (es decir, un ambiente de alta confianza). Equivalencia entre cuentas: el archivo .rhosts La equivalencia a nivel de cuentas se obtiene utilizando el archivo .rhosts en el directorio home del usuario en el equipo destino. Cada lnea de este archivo consiste de un nombre de host y, opcionalmente, una lista de nombres de usuario. maquina [usuario. . .] Cada lnea significa que usuario tiene permitido conectarse a esta cuenta desde mquina.

Si usuario no esta presente, solo el mismo nombre de usuario puede conectarse desde mquina.

Si se intenta un acceso remoto, primeramente se verifica la equivalencia a nivel de mquina, y de no pasar este acceso se intenta con el archivo .rhosts del directorio home del usuario hacia el cual se est intentando el acceso. Se recomienda NUNCA utilizar la equivalencia de cuentas para el superusuario. Vale el mismo comentario anterior, sobre la paulatina desaparicin de los comandos r*
Implicaciones de la confianza Una relacin de confianza entre mquinas siempre implica un riezgo. Sin embargo, en este caso ese riezgo va ms all del equipo en el cual explcitamente estamos confiando. La confianza actua en forma transitiva, ya que si mquina1 confa en mquina2, y esta a su vez confia en mquina3, implcitamente mquina1 est confiando en mquina3, y transitivamente en todos los hosts en que mquina3 confe. Esta es una razon por la cual las relaciones de confianza deben ser establecidas con mucho cuidado.

Sustitucin de los comandos r* Hoy en da, la utilizacin de los comandos r* (rcp, rsh, rcp, etc.) se desaconseja en cualquier servicio que se encuentre accesible desde una red no confiable. Usualmente, se utilizan protocolos ms seguros, como los utilizados por ssh, para mejorar la seguridad de los sistemas. Los protocolos ssh (hoy en da, versin 2), proveen:

- Encriptacin de los datos que circulan en la red. En ningn momento pasan en claro por la red ni datos ni contraseas. - Validacin de los equipos servidores mediante claves pblicas. - Validacin de los usuarios ya sea por pares usuario/contrasea, como (opcionalmente), mediante certificados de clave pblica. Adems, este protocolo est diseado teniendo en cuenta la seguridad desde el principio, a diferencia de los comandos r*. No es conveniente utilizar los protocolos SSN versin 1, ya que adems de ser mas dbiles desde el punto de vista de la seguridad, existen ataques contra versiones viejas de los servidores ssh de versin 1.
Seguridad y la NIS NIS, por su propia naturaleza de servicio de informacin de facil acceso y por su implementacin, es un servicio inherentemente inseguro. Aun NIS+, que fue pensado como un reemplazo para NIS con mayor seguridad (y otras mejoras), es tambin un servicio con problemas de seguridad. No debera permitirse el acceso a la NIS a mquinas de las cuales no confiemos en su seguridad o mquinas donde tengamos usuarios no confiables.

Seguridad y NFS NFS, como la mayora de los servicios, requiere de una adecuada configuracin para ser seguro. Se debe prestar atencin al archivo /etc/exports, donde se configura a qu mquinas les permitimos acceder a nuestros discos (implcitamente, confiando en la seguridad de dichos equipos). En tiempos no tan lejanos, tambin ha habido algunos ataques a implementaciones de NFS con bugs, y se debe verificar estar corriendo una versin que sea segura. Seguridad y sendmail Tradicionalmente, Sendmail ha sido blanco de muchos ataques, los cuales explotaban diversas vulnerabilidades y bugs en el mismo. Las ltimas versiones de Sendmail se consideran relativamente seguras, pero hay que asegurarse de estar razonablemente actualizados. Seguridad y DNS Idem al sendmail, hay que mantenerse actualizados.

Firewalls.
Un firewall es una estructura de red pensada para minimizar los riezgos a los equipos de nuestra red.

La estructura clsica de un firewall presenta 3 zonas con diferentes niveles de seguridad, separadas por filtros a los paquetes IP: - Una zona pblica, accesible directamente desde las redes "no confiables". Idealmente en esta zona se encuentran solamente los equipos que nos unen a otras redes. - Una zona desmilitarizada, donde se encuentran aquellos equipos que precisan tener comunicacin con las redes "no confiables", por ejemplo los servicios que brindamos hacia el exterior, y aquellos servidores que nos permiten obtener servicios desde las redes "no confiables" (servicios proxy, servidores de correo, DNS, etc.) - Una zona privada, donde se encuentran nuestras mquinas, las cuales (idealmente) no tienen ningn contacto directo con las redes "no confiables", sino que obtienen todos sus servicios a travs de los servidores proxy. Muchas veces, al armar un Firewall, se utilizan equipos UNIX para uno o varios de estos equipos (tanto los filtros como los servicios en la zona desmilitarizada). Es EXTREMADAMENTE IMPORTANTE maximizar los cuidados en la configuracin de estos equipos y en la configuracin de los filtros.

Instalando una mquina UNIX


- Instalar solamente aquellas aplicaciones necesarias. - Deshabilitar todos los servicios de red que no precisemos. - Hacer uso de las utilidades de "hardening" que algunos sistemas proveen. - Utilizar herramientas como Tripwire para poder detectar cambios maliciosos en nuestro

sistema. - Si estamos expuestos a redes no confiables, utilizar las utilidades de filtrado de paquetes y conexiones que provea nuestro sistema (packet filtering, tcp_wrappers, etc.) - Familiarizarnos con el funcionamiento normal de nuestro sistema.

Ejercicio: Ejecute "netstat -a" en un equipo unix que usted administre. Puede usted describir qu programa tiene abiertos cada uno de los puertos TCP y UDP habilitados sobre interfaces de red (no loopback)?

Algunas herramientas para ayudarnos a administrar la seguridad.


COPS crack tcpd tcp_wrappers tripwire Kerberos Satan ssh

Monitoreo del sistema


Es necesario monitorear el sistema regularmente tanto para detectar intentos de comprometer nuestra seguridad, como para minimizar los daos de una intrusin en curso. No existen reglas absolutas acerca de qu se debe monitorear. Eso depende mucho de que sistemas y servicios tenemos funcionando, y que es lo "normal" en nuestro sistema. La principal recomendacin es que debemos familiarizarnos con el funcionamiento normal de nuestro sistema, y verificar cualquier actividad o cambio "sospechoso". Algunas cosas a monitorear: Cambios en los archivos del sistema Actividad extraa o en horarios extraos REVISAR LOS LOGS DEL SISTEMA Muchos reintentos para loguearse. Usuarios haciendo su. Saber que es normal y que no.

Mantenindose informado.
Nuevos bugs y problemas cert advisories. (www.cert.org) ciac (www.ciac.org) bugtraq (listserv@netspace.org) sun-managers (sun-managers-request@eecs.nwu.edu) http://www.ers.ibm.com/ (IBM) Otros

Arranque y detencin
Arranque del sistema Arranque automtico y arranque manual Pasos del proceso de arranque Inicializacin del ncleo (kernel) Configuracin del hardware Procesos del sistema Intervencin del operador (solo en arranque manual) Archivos de arranque (scripts rc) Operacin en multiusuario Scripts rc Scripts rc estilo System V Problemas de arranque Problemas de hardware Problemas en el cargador del sistema operativo Problemas en el sistema de archivos Problemas de configuracin del ncleo (kernel) Errores en los scripts de arranque Detencin del sistema Apagar la llave del equipo
shutdown halt reboot

Enviar al proceso init la seal TERM Cambiar el nivel de ejecucin (System V) Matar el proceso init El sistema operativo UNIX es un sistema complejo; los procesos de arranque y detencin de una mquina UNIX implican muchas tareas; deben realizarse correctamente si se desea

mantener la sana del sistema. No basta con prender o apagar un interruptor. La pluralidad de configuraciones introducidas por el advenimiento de los computadores personales al mundo UNIX ha extendido los alcances y complicaciones de estos procesos.

Aunque lo dicho aqu es aplicable en general, los procesos de arranque y detencin son dependientes de hardware: puede haber diferencias para un equipo en particular.

Arranque del sistema.


El arranque del sistema suele llamarse "booting" o "booteo" en la jerga informtica, propensa a castellanizaciones crueles.

Durante el arranque no estn disponibles las facilidades del sistema; ste debe levantarse a s mismo iniciando todos sus servicios (bootstrapping). Cuando una mquina se enciende, ejecuta un programa de carga cuyas instrucciones se encuentran almacenadas en ROM. Este programita determina como cargar en memoria el ncleo del sistema operativo (kernel) y comenzar a ejecutarlo. El kernel examina el hardware probando todos los dispositivos conectados, e inicia un proceso llamado init, siempre con identificador de proceso PID 1. Se verifican los sistemas de archivos, se montan, se arrancan los demonios del sistema, siguiendo los dictados de una serie de scripts en lenguaje de shell llamados archivos o scripts rc (rc = run command). El contenido y estructura de los scripts rc determinan la situacin final del sistema.
Arranque automtico y arranque manual. La mayora de los sistemas operativos tienen un modo de arranque manual y otro automtico.

En modo automtico, el sistema operativo realiza las tareas correspondientes al proceso de arranque en forma autnoma, sin necesidad de intervencin del administrador, ejecutando todos los scripts de arranque e iniciando todos los procesos necesarios para brindar los servicios habituales a los usuarios. En modo manual el sistema operativo ejecuta una primera parte del proceso de arranque pero casi enseguida transfiere el control al administrador. Se ejecutaron slo unos pocos scripts, hay pocos procesos corriendo, slo el superusuario puede acceder al sistema: se est ejecutando en modo monousuario (single-user mode). En la operativa diaria el sistema arranca en modo automtico con slo encender el equipo. Algunas fallas pueden obligar al arranque en monousuario: una falla en una tarjeta de red o un sistema de archivos corrupto. Es preciso conocer bien el proceso de arranque para configurar el arranque automtico de los servicios requeridos o intervenir en caso de falla.
Pasos del proceso de arranque. El proceso de arranque tiene varios pasos que en general son los siguientes: Carga e inicializacin del ncleo (kernel). Deteccin y configuracin de dispositivos. Creacin automtica de procesos base. (Intervencin del administrador - solo en modo monousuario).

Ejecucin de archivos de comandos de arranque (scripts rc). Operacin en multi-usuario. El administrador tiene poco control de esta secuencia, pero s puede alterar los scripts rc, donde se arrancan los procesos capaces de brindar servicios a los usuarios. Inicializacin del ncleo (kernel). El ncleo del UNIX es un programa, y como todo programa debe cargarse previamente en memoria para poder ejecutarse. El ncleo reside en un archivo llamado unix, vmunix, vmlinuz o similar. Al encender el equipo comienzan a ejecutarse instrucciones en ROM cuyo objeto es transferir a memoria un pequeo programa de arranque (boot program) encargado de cargar el kernel en memoria y comenzar a ejecutarlo. Esta primera parte del proceso, hasta alcanzar la ejecucin del kernel, la realiza el hardware de la mquina. Una vez iniciado, el kernel verifica la cantidad de memoria, separa una parte para s mismo e informa la cantidad de memoria total, lo reservado para s y lo disponible para procesos de usuario. Configuracin del hardware. Al comenzar su ejecucin el ncleo intenta localizar e inicializar los dispositivos que le hayan sido asignados en su construccin. Prueba estos dispositivos uno por uno, intentando determinar parmetros de funcionamiento no especificados interrogando al propio dispositivo. Los dispositivos no hallados o que no responden son inhabilitados. Una vez completado este proceso, el agregado de un nuevo dispositivo deber esperar el prximo arranque del sistema para ser reconocido. Los sistemas UNIX suelen venir con uno o ms ncleos genricos donde estn preconfigurados los dispositivos ms comunes, pero es posible reconstruir el ncleo optimizndolo estrictamente al hardware disponible. Tambin es posible prever el agregado dinmico de mdulos complementarios del kernel, cargndolos en memoria solo al detectarse la presencia del dispositivo fsico o solicitarse su acceso. Procesos del sistema. Una vez completada la inicializacin bsica el ncleo crea algunos procesos espontneos, llamados as por no haber sido creados por fork, el mecanismo habitual en UNIX. Los procesos espontneos difieren entre sistemas; en BSD son:
swapper init - Proceso 0 - Proceso 1

pagedaemon

- Proceso 2

En los descendientes de System V son:


sched init - Proceso 0 - Proceso 1

varios manejadores de memoria y procesos del ncleo

En Linux no hay un proceso visible con PID 0, sino varios procesos de manejo adems de init, diferentes segn la versin del kernel:
init - Proceso 1

varios manejadores de memoria y procesos del ncleo (kflushd, kupdate, kpiod, kswapd).

De todos estos proceos solo inites un proceso de usuario; los restantes son partes del ncleo enmascaradas como procesos a para agendar su ejecucin (scheduling) o por razones de arquitectura. Aqu finaliza el ncleo sus tareas de arranque; los restantes procesos del sistema sern arrancados directa o indirectamente por init. Intervencin del operador (solo en arranque manual). Si el sistema fue arrancado en modo monousuario el procesoinites invocado por el ncleo con un parmetro indicativo, pidiendo la contrasea de superusuario y arrancando un intrprete de comandos (shell); al finalizar la ejecucin del intrprete initcontina con el proceso normal de arranque. Digitando Ctrl-D en lugar de la contrasea del supervisor contina el arranque sin invocar el shell.

En el shell monousuario el supervisor puede trabajar como en cualquier sesin, pero solo dispondr de comandos existentes en la particin raz, la nica montada. Esta particin puede, adems, haber sido montada en solo lectura para ser verificada; si /tmp est en la particin raz, programas necesitados de archivos temporales como vi no funcionarn. Volver a montar la particin raz en modo lectura escritura puede diferir entre sistemas, pero en general mount / leer de nuevo /etc/fstab para montar / en el modo habitual. Otros sistemas de archivos, como /usr, pueden ser montados a mano si es necesario. Una falla habitual de arranque son sistemas de archivos con inconsistencias; en este caso, deber correrse fsck en forma manual antes de montar el recurso. En el modo automtico los sistemas de archivos son verificados como parte del proceso de arranque; no as en monousuario.
Archivos de arranque (scripts rc). Al momento de correr los scripts rc el sistema ya es un UNIX tpico, con pocos servicios pero sin magias de arranque; todos los pasos posteriores se gobiernan mediante los propios scripts rc. La ubicacin exacta y la organizacin de esos archivos depende del sistema. Operacin en multiusuario. Una vez ejecutados los scripts de arranque el sistema se encuentra operativo, pero para aceptar el ingreso de usuarios (login)initdebe arrancar un procesos getty de escucha en cada una de las lneas de conexin de terminales. Esto completa el proceso de arranque. En los sistemas configurados para usar login en ambiente grfico init arranca estos servicios (xdm, gdm, dtlogin u otro).

El proceso init sigue desempeando un rol importante durante todo el perodo de funcionamiento del sistema, arrancando procesos y recibiendo en herencia procesos sin padre. En BSD init tiene solo dos estados, monousuario y multiusuario; en System V

existen diferentes estados mono y multiusuario (run levels), cada uno con diferente espectro de recursos y servicios.

Scripts rc.
En BSD, los scripts rc se ubican bajo /etc, con nombres comenzados por "rc"; pueden invocarse unos a otros. En System V los scripts se guardan bajo /etc/init.d, con enlaces hacia ellos en directorios /etc/rc0.d, /etc/rc1.d, ..., correspondientes cada uno a un nivel de arranque.

Usualmente los scripts rc realizan, entre otras, las siguientes tareas:


Fijar el nombre de la mquina. Fijar la zona horaria. Verificar los discos con fsck (en arranque automtico). Montar los discos del sistema. Eliminar archivos del directorio /tmp. Configurar las interfaces de red. Arrancar los demonios del sistema y los servicios de red. Scripts rc estilo System V. El estilo System V es el ms usado actualmente. Se definen en l 7 niveles de arranque (run levels), cada uno con un conjunto de servicios particular: Nivel 0: sistema bajo, no hay nada corriendo. Nivel 1 o S: monousuario. Niveles 2 a 5: diversos (o idnticos) niveles multiusuario.

Nivel 6: rearranque (reboot), el sistema se detiene y vuelve a arrancar. Como nivel multiusuario se usa nicamente el nivel 2, o el 2 y el 3 para configuracin sin y con red, por ejemplo; los niveles 4 y 5 no suelen ser usados. Los niveles 1 y S difieren segn los sistemas. Los niveles 0 y 6 no son en realidad estados de funcionamiento, sino transitorios.

El nivel 1 es el monousuario por excelencia; el S fue creado para pedir la contrasea del supervisor. En Solaris S es el monousuario, pero en Linux se usa 1 como monousuario y S para pedir la contrasea del supervisor. Los niveles se definen en el archivo /etc/inittab. Aunque el formato vara, el propsito de este archivo es definir los comandos a correr en cada nivel; uno de ellos define el nivel por defecto que ha de alcanzar el sistema. Los scripts se ejecutan pasando ordenadamente por cada nivel, creciendo en el arranque y decreciendo en la detencin. Los scripts de cada nivel detienen los servicios correspondientes a niveles superiores y arrancan los servicios correspondientes al nivel propio. No suele ser necesario tocar el archivo /etc/inittab; el control puede realizarse totalmente a travs de los scripts rc correspondientes a cada nivel, confiando en el sistema para la invocacin ordenada de los scripts rc de cada nivel segn el directorio en que se encuentran.

Los scripts colocados en /etc/init.d manejan cada uno un demonio, servicio o aspecto particular del sistema. Todos los scripts deben entender al menos los parmetros start (arrancar), stop (detener); muchos entienden tambin restart, un stop seguido de un start. Esto permite al administrador gobernar un servicio manualmente con comandos tales como
/etc/init.d/sshd start /etc/init.d/sshd stop

El conjunto de servicios a detener y arrancar en cada nivel se controla disponiendo de un directorio para cada nivel y estableciendo en l enlaces hacia los scripts en init.d, segn la siguiente convencin de nombres:
[K|S][0-9][0-9]nombre_script

nombre de enlace iniciado en K invoca el script en init.d con parmetro "stop"; nombre de enlace iniciado en S invoca el script en init.d con parmetro "start"; el nmero de 2 cifras que sigue a K o S indica el orden de ejecucin;

sigue el nombre del script en init.d. Ejemplos: S34named, K29bind.

Los directorios para cada nivel siguen la convencin de nombres rcN.d, donde N es el nmero de nivel. Ejemplos: rc0.d, rc2.d, rcS.d. Cuando el sistema est subiendo, se ejecutan los scripts S; cuando est bajando se ejecutan los scripts K, siempre en el orden definido por los nmeros en los nombres de sus enlaces simblicos. Los comandos
ln -s /etc/init.d/sshd /etc/rc2.d/S99sshd ln -s /etc/init.d/sshd /etc/rc2.d/K25sshd ln -s /etc/init.d/sshd /etc/rc6.d/K13sshd

crean los enlaces simblicos necesarios para arrancar y detener el servicio sshd en el nivel multiusuario 2. La colocacin del enlace en el nivel 6, reboot, es un reaseguro para la detencin del servicio en el rearranque, si el sistema no recorre por s en forma ordenada los niveles de detencin. Las distribuciones de Linux usan distintos esquemas de scripts rc: Debian sigue el esquema System V descrito, en forma similar a Solaris y HP-UX; Slackware usa el esquema BSD, como FreeBSD; Redhat usa un hbrido System V y BSD con algunas complicaciones de propia cosecha.

Problemas de arranque.
Las dificultades de arranque pueden deberse a diferentes causas: Problemas de hardware. Problemas en el cargador del sistema operativo. Problemas en el sistema de archivos. Problemas de configuracin del ncleo (kernel). Errores en los scripts de arranque (scripts rc).

Problemas de hardware. Antes de diagnosticar un problema de hardware es preciso descartar fehacientemente errores en la configuracin del software; muchos de esos errores sugieren fallas de hardware a los ojos inexpertos. Un mensaje de error especfico proveniente directamente de un dispositivo es un buen indicador de falla de hardware (error de memoria, error de controlador de disco). Siempre es conveniente verificar aspectos de instalacin tales como Alimentacin de corriente para todas las partes del equipo: gabinete principal, gabinetes externos con discos, cinta u otros perifricos. Alimentacin de dispositivos internos (discos, disqueteras, unidades de cinta, CDROM). Conexiones entre diferentes dispositivos (cables de seal de discos, disqueteras, puertos). Conexiones de red, sobre todo si la mquina depende de recursos externos (estacin sin disco, sistemas de archivos montados de otro servidor de red). Si existen, revisar e interpretar las luces indicadoras de estado de los dispositivos. Si la mquina comienza el arranque, verificar la aparicin de todos los dispositivos conectados; cada uno emite un mensaje de una lnea al ser reconocido. Un mensaje de error o la falta de deteccin de un dispositivo conectado correctamente puede indicar una falla de hardware en ese dispositivo, en su plaqueta controladora o en la plaqueta principal. Cuando sea posible, usar programas de diagnstico; los hay para dispositivos, independientes del sistema operativo. Las mquinas de hardware propietario disponen de rutinas de diagnstico de hardware en ROM. En los computadores personales la BIOS ejecuta en el arranque una prueba de autoverificacin llamada POST (Power On Self Test) que prueba la memoria, presencia de discos y otros elementos bsicos; los perifricos suelen traer programas DOS para diagnstico (tarjetas de red, de video, impresoras). Al detectarse una falla conviene dejar el equipo apagado unos 30 segundos y luego arrancarlo, para asegurarse de llevar el hardware a un estado conocido. Problemas en el cargador del sistema operativo. En las mquinas de arquitectura propietaria existe un programa de carga del sistema operativo almacenado en ROM. Una falla comn es la alteracin o borrado de una variable de ambiente almacenada en memoria no voltil. En este y otros casos es preciso seguir las indicaciones del fabricante para reponer el arranque.

Los sistemas UNIX para computadores personales vienen programas de carga tales como LILO para Linux o BootEasy para FreeBSD. Estos cargadores permiten arrancar electivamente Linux u otros sistemas operativos instalados en diferentes particiones de un mismo disco. Una falla, alteracin o borrado del programa cargador obliga a arrancar el sistema con un medio alternativo (disquete, CD), y reinstalar el programa de carga o corregir y reponer su configuracin correcta. Las fallas de carga pueden darse en un sistema operativo instalado correctamente; la reposicin del esquema de arranque recupera el sistema completamente.
Problemas en el sistema de archivos. Un sistema de archivos puede fallar por razones fsicas (superficie daada, disco roto), o lgicas (inconsistencias en las estructuras de almacenamiento). En caso de falla fsica habr

que cambiar el disco o al menos realizar una deteccin de bloques defectuosos para evitar su uso, crear nuevamente el sistema de archivos y reponer desde respaldos. Una falla lgica puede ser reparable con fsck, eventualmente con alguna prdida; de no ser as, ser preciso recrear el sistema de archivos y reponer desde respaldo. La verificacin deber realizarse arrancando en modo monousuario, con el sistema de archivos en falta desmontado y sobre el dispositivo, ejecutando fsck reiteradamente en modo forzoso hasta no obtener errores.

Si la falla es en el sistema de archivos raz el sistema no podr arrancar. Si se dispone de una particin de arranque alternativa, puede levantarse el sistema desde ella y reponer el servicio rpidamente. Segn los sistemas, esto puede hacerse con comandos de ROM o del programa de carga; es preciso tener muy clara esta secuencia, y haber probado el arranque al crear la particin alternativa, as como mantener permanentemente sincronizadas (idnticas) ambas particiones de arranque, mediante copia cruda con dd. Estas particiones deben estar en discos distintos para obtener una confiabilidad razonable. En ausencia de particin de arranque alternativa ser preciso reinstalar el sistema operativo, eventualmente reponiendo desde respaldo los archivos de datos. Una falla lgica en el sistema de archivos raz puede intentar repararse arrancando el sistema desde un medio alternativo (CD, disquete de rescate o disquete de instalacin) y correr fsck sobre el sistema de archivos raz, no montado por el arranque desde medio alternativo.
Problemas de configuracin del ncleo (kernel). Cuando se genera un nuevo ncleo debe mantenerse siempre un respaldo del ncleo anterior, y saber como levantar el sistema con l; un ncleo recientemente generado puede muy bien no funcionar. En Linux es posible generar el nuevo ncleo en disquete, para fines de prueba, y recin despus copiar la nueva versin sobre la anterior en disco. Errores en los scripts de arranque. Los errores en los scripts de arranque son la causa ms frecuente de falla en el arranque; son tambin las de ms fcil solucin: basta arrancar el sistema en monousuario, editar los scripts rc, corregir los errores y continuar con el arranque normal. Es preciso verificar qu editor hay disponible en modalidad monousuario y saber manejarlo; algunos sistemas requieren montar /usr para disponer de vi. El editor ed, poco amigable, suele estar disponible en todos los UNIX. En Linux, el disquete de rescate ofrecido por las distintas distribuciones suele tener un conjunto de herramientas razonables para lidiar con estas dificultades; puede dar mejores resultados recurrir al disquete de rescate que intentar el arranque monousuario.

Detencin del sistema


En otros sistemas operativos es prctica comn arrancar de nuevo el sistema operativo como primer intento para resolver cualquier problema. Los sistemas UNIX suelen realizar tareas crticas, atender mltiples usuarios o soportar redes de datos; no puede pensarse en arrancar de nuevo el sistema as sin ms; es imprescindible pensar primero e intentar solucionar los problemas sin bajar la mquina. Esto no es una aspiracin quimrica; es posible en muchos casos. Es normal para una mquina UNIX pasar meses sin detenerse. Solo en casos de agregar un dispositivo, sufrir una falla de hardware, un estado de confusin del sistema o la

imposibilidad de acceder, puede pensarse en rearrancar. En suma, cuando realmente no hay otra solucin.

Si se han hecho cambios en los scripts de arranque conviene rearrancar el sistema para verificar el funcionamiento correcto de los cambios efectuados sin esperar el prximo arranque, que puede darse en un momento donde el autor de los cambios no est presente o ya no recuerde lo hecho. Hay diferentes formas de bajar un sistema o arrancarlo de nuevo:
Apagar la llave del equipo. Usar el comando shutdown. Usar el comando halt y reboot (BSD, Linux). Enviar al proceso init la seal TERM. Usar telinit para cambiar el nivel de ejecucin del proceso init (System V). Matar el proceso init. Apagar la llave del equipo. Ni siquiera en sistemas UNIX personales es aceptable bajar el equipo apagando la llave: pueden perderse datos o corromperse lgicamente los sistemas de archivos. Apagar la llave puede ser inevitable en caso de catstrofe natural o de bloqueo total del sistema.
shutdown

El comando shutdown es el mtodo ms prolijo, seguro y completo de bajar un sistema UNIX. Dispone de una variedad de opciones, variables segn los UNIX, pero en general permite fijar anticipadamente el momento de la bajada, enviar avisos a los usuarios, decidir si ser un apagado, un rearranque o una bajada a monousuario. Procede enviando seales de terminacin a todos los procesos en forma ordenada, sincroniza y desmonta los sistemas de archivos, avisa cuando termin ("System halted", "Power down", o similar).
shutdown -r now

en Linux rearranca (-r) la mquina en forma inmediata (now). La opcin -h detiene; la opcin -f no realiza verificacin de discos en el siguiente arranque.
halt

El comando halt realiza las tareas esenciales mnimas para bajar el sistema ordenadamente: registra la bajada, termina los procesos no esenciales, sincroniza los discos y termina la ejecucin. La opcin -n no sincroniza discos; se usa cuando se ha hecho un fsck sobre la particin raz para impedir al kernel sobreescribir el superbloque reparado con el defectuoso que retiene en memoria.
reboot

El comando reboot procede como al halt pero arranca de nuevo el sistema despus de bajarlo. Tiene tambin opcin -n, como halt. Enviar al proceso init la seal TERM. Esta seal obliga al proceso init a terminar; segn la variedad de UNIX puede causar la bajada del sistema. Es un mtodo crudo; no sincroniza discos. Como init tiene siempre PID 1, la secuencia

sync; sync kill -TERM 1

ejecuta la accin. Consultar la documentacin antes de emplear este mtodo. Cambiar nivel de ejecucin (System V). El comando telinit permite avisarle al procesoinitque cambie a otro nivel de ejecucin.
telinit S

pasa el sistema a modo monousuario en Solaris y HP-UX; en Linux


telinit 1

realiza la misma accin (S solo abrira un nuevo shell). No hay perodo de gracia ni advertencias.
shutdown -i1

es una forma ms elegante de pasar a monousuario. telinit es til para probar cambios al archivo /etc/inittab:
telinit -q

obliga a init a releer el archivo inittab. Matar el proceso init.

El proceso init es esencial para el funcionamiento del sistema; matar este proceso rearranca el sistema inmediatamente, pero en algunos sistemas el kernel entra en pnico. Es un mtodo salvaje; usar shutdown o reboot.

Vous aimerez peut-être aussi