1.
Bibliografía
2.
Sistemas operativos
3.
Clasificación de los sistemas operativos
4.
Historia
5. Categorías de UNIX
6. Versiones más importantes
7. Estructura general del sistema operativo UNIX
8.
Sistema de ficheros
9. Juego de caracteres UNIX
10.
Clasificación de usuarios en UNIX
11.
Inicio de la sesión de trabajo
12.
Finalización de la sesión de trabajo
13.
Formato general de los comandos
14.
Comandos de información general
15.
Comandos de comunicación
16.
Comandos de manipulación de ficheros
17.
Redirección de entrada/salida
18.
Manejo de la cola de impresión
19.
Modos de ejecución de comandos
20.
Editores de texto
21.
Programación del shell
22.
Variables del shell
1. Bibliografía
Indice
1. Waite, Prata, Martín.
"Introducción al UNIX". Anaya, 1986
2. McGilton, Morgan. "Introducción al UNIX". McGraw, 1988
3. Lucas, Martín. "Sistema Operativo UNIX". Paraninfo, 1987
4. Miller, Boyle. "UNIX for Users". Blackwell, 1984
5. Silvester. "The UNIX System
Guidebook". Springer, 1984
2. Sistemas
operativos Indice
2.1 Definiciones posibles
El sistema operativo es
un conjunto de programas cuyas misiones son:
1. Gestionar los recursos del sistema informático (procesadores, memoria, discos, etc), entre los diferentes procesos que compiten por ellos.
2. Ofrecer al usuario una
especie de "máquina virtual" o "máquina extendida", más
fácil de usar que el hardware subyacente ("Principio de embellecimiento").
Por ejemplo, copy.
2.2 Proceso
Un proceso en un programa
en ejecución ("proceso secuencial"). Consta de:
Texto (invariante)
Dato
Pila
Registro
Los datos, la pila y los
registros forman el Estado.
3. Clasificación
de los sistemas operativos Indice
3.1 Tareas
Monotarea (MS-DOS)
Multitarea: (el sistema
operativo puede atender varias tareas)
Monousuario (OS/2)
Multiusuario (VMS, UNIX)
3.2 Planificación
Define cómo se reparte
el tiempo de CPU entre los diversos procesos
Tiempo compartido (Round-Robbin):
Se asigna el mismo tiempo para cada uno de los procesos
Prioridades: Cada proceso
tiene asignada una prioridad; hasta que no termina un proceso, no se cede
la CPU al siguiente.
Estáticas: Las prioridades
son fijas, no se modifican
Dinámicas: Existen
ciertos criterios implementados en el S.O.
Mixtas (VMS, UNIX): Existe
una planificación concreta a base de asignar tiempos en función
de prioridades. Si dos procesos tienen asignada una prioridad, por ejemplo,
de 14, se comparte el tiempo entre los dos.
A aquellos procesos poco
activos se les suele dar una prioridad máxima (por ejemplo, un editor
de textos) y aquellos que exigen mucho tiempo de computación, una
baja prioridad (por ejemplo, una inversión de matrices).
3.3 Gestión de memoria
Memoria real
Memoria virtual (puede ser
mayor que la real)
3.4 UNIX
Es un sistema operativo:
Multitarea,
Multiusuario,
Planificación mixta,
Casi todas las implementaciones
son de memoria virtual.
4. Historia
Indice
1969 Desarrollo original
por Thompson y Ritchie (Laboratorios Bell AT&T) sobre un PDP-7.
1970 Versión de 2 usuarios sobre DEC PDP-11.
1971 Versión multiusuario sobre PDP-11/40,45,70.
1973 Re-escritura del S.O. en C (Kernighan, Ritchie) ya que originalmente estaba programado en ensamblador. De esta forma se podía transportar a otras máquinas.
1974 Empieza la explotación comercial (25.000 dólares) de las fuentes.
1975 Versión 6 de UNIX y cesión a Universidades para su enseñanza.
1983 Aparece el UNIX System V (ATT) con soporte para mensajes y memoria compartida. También aparece una versión para PC: XENIX (Microsoft).
1989 UNIX System V, R4 con soporte para RFS, Streams, Redes y Tiempo Real.
199x UNIX System V, v?
OSF, v?
5. Categorías
de UNIX Indice
Original de ATT
Extendido: Berkeley 4.3bsd,
Xenix, Venix
Equivalente: IDRIS, COHERENT,
REGULUS (Desaparecidos)
"Tipo" UNIX: CROMIX, QNX
"Entornos" UNIX: EUNICE,
UNX, IS/Workbench
6. Versiones
más importantes Indice
ATT System V
Xenix (SCO): Tiende a UNIX
System V (1990)
Berkeley UNIX: Muy usado
en estaciones de trabajo. Existen intentos de converger con System V.
7. Estructura
general del sistema operativo UNIX Indice
Se puede dividir en varios
componentes perfectamente diferenciados:
Núcleo o Kernel: Comprende
un 5-10% del código total.
Caparazón o Shell:
Actúa como intérprete de comandos.
Programas de utilidad.
7.1 Kernel
Es el núcleo del
S.O. UNIX. Tiene diversas tareas asignadas:
Planificar, coordinar y gestionar
la ejecución de los procesos. Para ello, hace uso de las prioridades
asignadas a cada proceso y utiliza algoritmos específicos para repartir
el tiempo entre los diversos procesos que compiten por él.
Dar servicios del sistema,
como entrada/salida y gestión de ficheros.
Manejar las operaciones
dependientes de hardware, es decir, realiza las funciones de más
bajo nivel de manera que se oculten al usuario.
Un kernel típico
puede constar de unas 20.000 líneas de código de las cuales
un 70-80% está escrito en C y el resto depende de máquina.
Para un PC ocupa unos 500 Kb y para máquinas grandes puede llegar
a 2 Mb.
7.2 Shell
Desde el punto de vista
del usuario, actúa como un intérprete de comandos. Es un
programa que siempre está en ejecución.
El Shell lee las órdenes suministradas, las decodifica y lo comunica al núcleo para realizar la acción especificada.
Prácticamente, todas las órdenes son programas ejecutables que el shell busca en el sistema de ficheros, siguiendo el orden especificado en la variable global PATH.
Existen varios tipos de shells, función, principalmente, de la versión de UNIX utilizada:
Bourne shell (System V, Xenix)
C shell (Berkeley)
Korn shell (Ambos)
En shell puede constar,
en total, de unas 200.000 líneas de código en C.
Los diversos componentes
del sistema operativo pueden verse gráficamente de la manera mostrada
en la figura 1.
Figura 1. Estructura jerárquica de los componentes de UNIX.
8. Sistema
de ficheros Indice
UNIX emplea un sistema de
ficheros jerárquico de directorios-ficheros.
No existe, a nivel de usuario, el concepto de volumen, ni de dispositivo físico. Es decir, el usuario no sabe en qué disco están los ficheros que está utilizando.
Un fichero (o archivo) es un conjunto de información al que se le da un nombre (nombre del fichero). Existen tres tipos de ficheros en UNIX:
Ordinarios: Son cadenas de
bytes terminadas con <ctrl>D (este código significa fin de fichero).
Pueden ser texto, objetos, ejecutables, bibliotecas de módulos,
...
Directorios: Contienen nombres
de ficheros y su dirección física. Puede pensarse en ellos
como carpetas que contienen ficheros y directorios. Un directorio dentro
de otro directorio se denomina subdirectorio.
Especiales: Asociados a
dispositivos entrada/salida. Contienen referencias a los drivers (programas
que manejan directamente los dispositivos y que forman parte del núcleo).
Pueden ser de tipo "bloque" (apuntan a dispositivos tipo disco) y "carácter"
(apuntan a dispositivos como terminales, impresoras, etc). Por convenio,
residen en el directorio /dev.
Al elegir los nombres de
los ficheros, es conveniente limitarse a utilizar sólo los caracteres
que correspondan a letras, números, el carácter subrayado
_ y el carácter punto .. Los ficheros cuyo nombre comience por punto
permanecen ocultos.
En UNIX existe una jerarquía de directorios que para un sistema estándar sería:
/ Raiz
/dev Fichero
especiales de dispositivos
/lib Bibliotecas
del sistema
/bin Ordenes
mas empleadas
/etc Datos y
ordenes restringidas al superusuario
/tmp Ficheros
temporales (se borra periodicamente)
/usr Ordenes,
bibliotecas y programas adicionales
/usr/lib
/usr/bin
/usr/man
/usr/...
/users Directorios
de usuarios
Los ficheros se especifican por:
{camino jerárquico}/nombre{.ext}
donde las llaves ({}) pueden ser o no necesarias. Los ficheros pueden constar de una extensión que es lo que aparece tras el punto (.). Un ejemplo sería:
/usr/lib/starbase/demos/star.f
El directorio raíz es el único que no tiene nombre. Cada usuario tiene un directorio home que es el directorio asignado a ese usuario para que almacene sus ficheros. El camino de este directorio está contenido en la variable HOME.
Los ficheros pueden tener cualquier longitud hasta 256 caracteres. Como se ha dicho anteriormente, la extensión es opcional. En caso de que exista, por convenio significa:
.f Programa fuente escrito
en lenguaje FORTRAN
.p Programa fuente escrito
en lenguaje PASCAL
.c Programa fuente escrito
en lenguaje C
.o Fichero objeto
.a Biblioteca de módulos
.h Fichero de "cabecera"
Un fichero puede ser referenciado
por su nombre precedido del nombre del directorio que le contiene. En cualquier
momento, los comandos que se teclean al shell están dados en referencia
al directorio actual, es decir, el directorio en el que nos "encontramos".
Cuando nos referimos a un fichero lo podemos hacer en referencia al directorio
actual (vía de acceso relativa) o en referencia al directorio raíz
(vía de acceso absoluta). En la vía de acceso relativa podemos
hacer uso de la notación .. que significa una referencia al directorio
padre. Para clarificar todo esto, pongamos un ejemplo:
Supongamos la siguiente estructura de ficheros-directorios:
/users/pepe informa.txt
/mis_archivos
trabajo.f
muelle.c
muelle.o
/otros_archivos
colegio.a
/citas carmen
juana
y que nos encontramos en el directorio otros_archivos. Las referencias a los diferentes ficheros se harían de la siguiente manera:
Nombre del fichero Acceso
absoluto Acceso relativo
informa.txt /users/pepe/informa.txt
../informa.txt
trabajo.f /users/pepe/mis_archivos/trabajo.f
../mis_archivos/trabajo.f
muelle.c /users/pepe/mis_archivos/muelle.c
../mis_archivos/muelle.c
muelle.o /users/pepe/mis_archivos/muelle.o
../mis_archivos/muelle.o
colegio.a /users/pepe/otros_archivos/colegio.a
colegio.a
carmen /users/pepe/otros_archivos/citas/carmen
citas/carmen
juana /users/pepe/otros_archivos/citas/juana
citas/juana
Normalmente, será más corto y sencillo utilizar el acceso relativo excepto en determinados casos (por ejemplo, en nuestro caso, /bin/fgrep).
UNIX no mantiene versiones de ficheros, por lo que es necesario prestar especial atención a acciones como borrarlos o modificarlos.
Existen 3 ficheros estándar implementados en UNIX:
Entrada estándar (stdinput):
Teclado (0)
Salida estándar (stdoutput):
Pantalla (1)
Errores estándar
(stderr): Pantalla (2)
La redirección entrada/salida,
que se explicará más adelante, permite cambiar estas asignaciones
en cualquier momento.
9. Juego
de caracteres UNIX Indice
Letras minúsculas:
a,b,c,...,z
Letras mayúsculas:
A,B,C,...,Z
Números: 0,1,...,9
Caracteres Especiales: \
/ - _ . ; [ ] ( ) < > & | y los metacaracteres
9.1 Metacaracteres
* Es equivalente a cualquier
cadena de caracteres.
? Es equivalente a cualquier carácter.
9.2 Caracteres especiales
; Equivale a un retorno
de carro en la línea de órdenes.
[] Engloba grupos de caracteres, separados por coma , o por guión -. Por ejemplo, fich[1,2].f se refiere tanto a fich1.f como a fich2.f.
<> Sirven para redireccionar entrada / salida, respectivamente.
& Envía un proceso en "background" (se explica más adelante).
| Construcción de tuberías o "pipes" (se explica más adelante).
\ Suprime el significado especial del carácter que le sigue. Por ejemplo, \* dejaría de ser equivalente a cualquier cadena de caracteres.
10. Clasificación
de usuarios en UNIX Indice
UNIX es un sistema operativo
multitarea y multiusuario, por lo que se deben establecer ciertos mecanismos
de tal manera que, simultáneamente, se protejan los datos de un
usuario frente a otros y éstos puedan ser compartidos en caso necesario.
UNIX posee un mecanismo de permisos asociados a cada fichero. Este mecanismo
permite que los ficheros y directorios pertenezcan a un usuario en particular.
UNIX también permite que los ficheros sean compartidos entre usuarios
y grupos de usuarios. El comportamiento por defecto en la mayoría
de los sistemas es que todos los usuarios pueden leer los ficheros de otro
usuario, pero no pueden modificarlos o borrarlos.
Los grupos de usuarios se definen normalmente en función del tipo de usuario. Por ejemplo, en una Universidad, los usuarios pueden clasificarse como estudiantes, profesores, invitados, etc.
Cada usuario (perteneciente a un grupo de usuarios) tiene asociado un nombre, una palabra clave o password, un directorio y un proceso de arranque:
Nombre: Identificación
del usuario cuando entra en la máquina (login).
Clave: Palabra oculta que
sólo conoce el usuario.
UID, GID: Números
de identificación de usuario y grupo, respectivamente.
Directorio: Directorio inicial
donde se situará el usuario al entrar en el sistema.
Proceso: Primer proceso
que se arranca una vez dentro del sistema.
Existen diferentes categorías
de usuarios en función de sus privilegios (lo que puede y no puede
hacer):
Superusuario o root: Es el
administrador del sistema. Tiene todos los privilegios.
Usuarios normales: El resto
de usuarios que pertenecen a distintos grupos, los cuales pueden tener
una serie de propiedades comunes.
Usuarios especiales: Asignados
a tareas específicas por el sistema, generalmente de información
o manejo de aplicaciones ya instaladas de uso común a usuarios externos
o internos. Por ejemplo: mail (se encarga de recoger el correo y repartirlo
a los diversos usuarios), lp (se encarga de aceptar trabajos de impresión
y mandarlos a la impresora), bin, admin, ...
Desde el punto de vista
de un usuario, el carácter u significa el propio usuario, g significa
el conjunto de usuarios que pertenecen a su mismo grupo, o significa el
resto de usuarios. Estos caracteres serán reconocidos por ciertos
comandos u órdenes.
Los permisos que llevan asociados todos los ficheros y directorios se clasifican en lectura (read, r), escritura (write, w) y ejecución (execute, x). Estos permisos se pueden asignar al propio usuario (u), al grupo (g) y al resto (o).
El permiso de lectura permite a un usuario leer el contenidos del fichero, o, en el caso de directorios, obtener un listado de su contenido.
El permiso de escritura permite a un usuario escribir y modificar el fichero. Para directorios, permite al usuario crear nuevos ficheros dentro del directorio o borrar los que contiene.
El permiso de ejecución
permite a un usuario ejecutar un fichero (debería ser un programa
o script --fichero que contiene órdenes para el sistema). En el
caso de directorios, permiso de ejecución significa que el usuario
puede introducirse en dicho directorio.
11. Inicio
de la sesión de trabajo Indice
Como se ha dicho anteriormente,
cada usuario tiene asociado un nombre de usuario o cuenta y una palabra
clave o password. Para acceder a un sistema y poder trabajar en él,
se debe realizar un proceso denominado "login in". El sistema que esté
listo para aceptar a un usuario presentará un mensaje como:
login:
a lo que se debe responder con el nombre de usuario asociado. Una vez introducido se pulsa la tecla ENTER o INTRO y el sistema presentará otro mensaje pidiendo la palabra clave:
password:
a lo que responderemos con nuestro password (lo que tecleemos no se presentará en pantalla para evitar que alguien lo pudiera ver), finalizando al pulsar la tecla ENTER o INTRO.
Si cometemos algún error o no tenemos acceso a la cuenta, el sistema responderá:
login incorrect
y nos pedirá de nuevo el login.
Si todo ha ido bien, el sistema ejecutará una serie de procesos y finalmente aparecerá un prompt o petición de órdenes. El prompt es un carácter o conjunto de caracteres que indica que podemos introducir comandos u órdenes; los más típicos son:
$
#
/home/usuario#
11.1 Secuencia de recepción
de un usuario
init (proceso 0): Es el
primer proceso que corre bajo control del sistema en el proceso de carga.
Es el origen y administrador de todos los demás procesos del sistema.
getty: Establece el modo de trabajo de cada línea de conexión. Presenta un mensaje de bienvenida al sistema y un mensaje de recepción (login:). Se queda a la espera del tecleo del nombre de usuario seguido por <CR> (Retorno de carro o ENTER o INTRO).
login: Reemplaza a getty una vez leído el <CR>, e inicia la siguiente secuencia de acciones:
- Búsqueda del nombre de usuario.
- Petición de clave de usuario.
- Saca por pantalla el mensaje del día (opcional).
- Comprueba el correo y noticias.
- Tareas de "accounting" (día de entrada, hora, ...).
- Ajusta la identidad del proceso, UID, GID.
- Establece el directorio de trabajo $HOME.
shell: Sustituye a login. Ejecuta el procedimiento de comandos que fija el perfil de usuario, terminal, etc. Presenta el prompt y queda a la espera de la introducción de órdenes por parte del usuario. Existen distintos tipos de shell: /bin/sh, /bin/rsh, /bin/cs, ...
12. Finalización
de la sesión de trabajo Indice
Cuando se ha finalizado
la sesión de trabajo, se debe teclear exit como respuesta al prompt
o pulsar <CTRL-D> (mantener la tecla Control pulsada a la vez que se
pulsa la letra d). Es importante finalizar la sesión de trabajo
ya que de lo contrario cualquier persona podría utilizar nuestra
cuenta y modificar nuestros ficheros a su antojo.
En los sistemas UNIX, NO SE DEBE APAGAR EL ORDENADOR; ya que para ello se deben ejecutar una serie de procesos previos.
13. Formato
general de los comandos Indice
verbo argumento argumento
...
El verbo, o nombre del comando,
es siempre necesario.
Los argumentos pueden ser
necesario o no, dependiendo del comando u orden.
Los nombres de órdenes
en UNIX son siempre en minúsculas y no pueden ser abreviados.
Los argumentos pueden ser
de dos tipos:
Opciones o adverbios, precedidos
de un guión -
Nombres de ficheros
UNIX consta típicamente
de unos 300 comandos, por lo que a continuación se explican los
más representativos.
14. Comandos
de información general Indice
14.1 date
Fecha y hora del sistema.
14.2 cal
Facilita un calendario.
Sintaxis: cal mes año
Por ejemplo, cal 01 1992 facilita un calendario de enero de 1992.
14.3 who
Información de quién
está en el sistema.
14.4 whoami
Información de quién
está en este terminal. Aparecerá mi nombre de usuario (¿Quién
soy yo?).
14.5 pwd
Directorio en el que se
está trabajando.
14.6 ps
Información de qué
es lo que está haciendo el sistema. Si no le añadimos opciones,
solamente dará información sobre mi terminal. Existen multitud
de opciones, algunas de las más comunes son:
ps -e Información de todo el sistema
ps -l Formato largo
ps -f Información de los comandos que el sistema está procesando
Según las opciones que le suministremos al comando, aparecerán diversos campos, entre los que cabe destacar:
UID: Número de identificación del usuario
PID: Número de identificación del proceso
PPID: Número de identificación del proceso padre (aquel proceso que creó a éste)
PRI: Prioridad (cuanto más alto sea este número, menor es la prioridad)
NI: Número "nice" (es la prioridad efectiva; sólo se puede subir o lo que es lo mismo, bajar la prioridad)
TIME: Tiempo de CPU en min:sg
COMD: Nombre del comando que se está ejecutando
Un ejemplo típico sería:
$ps
PID TT STAT TIME COMMAND
24 3 S 0:03 (bash)
161 3 R 0:00 ps
14.7 df
Información de bloques
libres en los discos montados.
14.8 man
Manual "on-line".
man comando: Da por la salida estándar la misma información que figura en los manuales.
man -s nº_de_manual comando
Los manuales estándar de UNIX van numerados del 1 al 7:
1. Comandos de uso general.
2. Llamadas al sistema.
3. Rutinas de las bibliotecas del sistema.
4. Formatos de los ficheros.
5. Miscelánea (cabeceras, macros, caracteres, etc.).
6. Juegos.
7. Ficheros especiales de dispositivos.
9. Glosario de términos
empleados en los manuales.
15. Comandos
de comunicación Indice
15.1 mail
Gestiona el correo electrónico.
Tiene dos modos de funcionamiento:
Recepción:
mail Da el primer mensaje pendiente. Dispone de un lenguaje de comandos interactivo:
<CR> Da el siguiente mensaje
- Da el mensaje anterior
s fichero Almacena el mensaje en fichero
p Vuelve a dar el mensaje
d Borra el mensaje
q Salida
Envío:
mail nombre_de_usuario
...
<CTRL>D
15.2 write
Nota de entrega inmediata;
el mensaje saldrá inmediatamente en el terminal del usuario al que
vaya dirigida.
write nombre_de_usuario
...
<CTRL>D
15.3 mesg
Inhibe (con opción
-n) o permite (con opción - y) la recepción de notas.
16. Comandos
de manipulación de ficheros Indice
16.1 cat
Dirige el contenido de ficheros
a la salida estándar (normalmente, la pantalla).
cat nombre_de_fichero
16.2 cp
Realiza copia de ficheros.
cp fichero_fuente fichero_destino
16.3 mv
Traslado o cambio de nombre
de un fichero.
mv fichero_antiguo fichero_nuevo
16.4 ln
Establece vínculos
entre ficheros.
ln fichero1 fichero2 Los ficheros 1 y 2 pasan a ser, físicamente, el mismo con dos nombres.
ln fichero directorio
16.5 rm
Borra ficheros. Algunas
de las opciones más importantes:
-i Pregunta antes de borrar.
-r Borra un directorio de forma recursiva, borrando primero los ficheros que están en él.
16.6 ls
Lista el contenido de un
directorio. Opciones más importantes:
-a Lista todos los ficheros (incluso los ocultos).
-t Ordena por fecha de creación.
-p Marca los directorios.
-r Invierte el orden.
-s Indica el tamaño.
-l Formato largo. Indica protecciones, propietario, grupo, tamaño y fecha de creación de cada fichero.
-F Distingue entre ficheros ordinarios, directorios y ejecutables.
A la hora de interpretar una lista de ficheros en formato largo, conviene recordar lo que se dijo sobre las protecciones. Recuérdese que existían 3 niveles de protección (lectura r, escritura w, ejecución x) sobre 3 tipos de usuarios (propietario u, grupo g, resto o). Al ejecutar la orden ls -l, se nos facilita la información sobre las protecciones del fichero con el formato:
-rwxrwxrwx
El primer carácter indica el tipo de fichero:
- Fichero ordinario.
d Directorio.
b Fichero especial tipo bloque.
c Fichero especial tipo carácter.
Los otros nueve caracteres expresan, en grupos de 3, los permisos de acceso a ese fichero. Un guión - en un campo implica que no existe ese tipo de permiso. Un ejemplo clarificador sería:
-rwxr-x--- El propietario puede leer, escribir y ejecutar. El grupo puede leer y ejecutar. El resto de usuarios no tiene ningún acceso.
16.7 cd
Cambio de directorio.
cd Cambia al directorio principal del usuario ($HOME).
cd nombre Cambia al directorio denominado nombre.
cd .. Cambia al directorio padre del actual.
16.8 mkdir
Crea un directorio.
mkdir nombre
16.9 rmdir
Borra un directorio (debe
estar vacío).
rmdir nombre
16.10 chown
Cambia el propietario de
un fichero (deberá ser nuestro para poderlo hacer).
chown propietario fichero
16.11 chgrp
Cambia el grupo de un fichero.
16.12 chmod
Cambia los permisos de acceso
de un fichero. Actúa sobre el propietario (u), el grupo (g), o el
resto (o), añadiendo (+) o quitando (-) los permisos (rwx). Por
ejemplo:
chmod o+r fichero Se da permiso de lectura al resto de usuarios.
chmod g+wx fichero Se da permiso de escritura y ejecución al grupo.
chmod o-rwx fichero Se quitan todos los permisos al resto de usuarios.
Existe la posibilidad de dar protecciones en octal.
Permisos en binario Octal
Significado
u g o
xxx xxx xxx
000 000 000 000 No se puede
hacer nada
001 000 000 100 El propietario
puede ejecutar
111 000 000 700
111 111 111 777 Totalmente desprotegido
chmod 653 fichero
16.13 passwd
Para cambiar la palabra
clave o password. Pide el antiguo y el nuevo dos veces.
17. Redirección
de entrada/salida Indice
La ejecución de un
comando típico responde al siguiente esquema:
17.1 Redirección simple
Puede variarse la entrada/salida
estándar, redirigiéndola de/a un fichero, utilizando el formato:
comando <entrada >[>]salida 2>[>]errores
(los corchetes indican que lo que contienen es opcional)
donde:
entrada fichero que sustituye
a stdin
salida fichero que sustituye
a stdout
errores fichero que sustituye
a stderr
La utilización de
>> en lugar de > significa añadir al final del fichero, si ya existe,
en vez de al principio.
Los ficheros destino pueden ser alguno de los estándar. En este caso, se especifican con los símbolos &1 (stdout), &2 (stderr). Por ejemplo cat <fichero1 >>fichero2 2>&1 redirecciona los errores a la pantalla.
Los fichero de salida y entrada deben ser diferentes.
Otros ejemplos:
ls >listado.lst
write curso3 <mensaje
Algunos comandos permiten emplear la entrada inmediata, con el símbolo <<
write curso6 <<fin ...
...
fin
17.2 Redirección encadenada
Permite que la salida de
un comando se utilice como entrada al siguiente.
Formato:
cmd1 | cmd2 | ..... | cmdN "Pipeline" o "tubería"
La salida estándar de un comando de la "tubería" actúa como entrada estándar del siguiente.
No tiene sentido redireccionar la entrada, salvo en el primer comando.
No tiene sentido redireccionar la salida, salvo en el último comando.
Ejemplo:
ls -l /usr | fgrep graficos | lp
18. Manejo
de la cola de impresión Indice
Los comandos básicos
para que el usuario se comunique con el gestor de impresión son:
lp: Envía peticiones
de impresión
lpstat: Informa sobre el
estado de la cola de impresión
cancel: Cancela una o varias
entradas de la cola de impresión
18.1 lp
Envía peticiones
de impresión de ficheros.
lp [opciones] fichero[s]
donde las opciones pueden ser, entre otras:
-n Especifica un número de copias (-n4)
-d Especifica impresora de destino (-dlaser)
Una vez enviada la petición de impresión, lp devuelve un número de identificación de dicha petición, que se puede utilizar bien para cancelarla, bien para obtener información sobre el estado de la cola de impresión.
18.2 cancel
Cancela trabajos pendientes
de impresión.
cancel [ident] [impresoras]
Si se especifica identificación de trabajos, se cancelan dichos trabajos, aunque estén siendo impresos en ese momento.
Si se especifica nombre de impresora, se cancela la impresión en curso en la misma.
Ejemplo:
lp fichero
request-id is lp-205
...
cancel lp-205
18.3 lpstat
Da información sobre
las colas de impresión.
lpstat [opciones]
donde opciones puede ser alguna de las siguientes:
-s Resumen informativo
-t Información total
-d Nombre de la impresora por defecto
-clista Lista de impresoras del sistema
-olista Colas de las impresoras de la lista
Ejemplos:
lpstat -t
lpstat -o"laser"
19. Modos
de ejecución de comandos Indice
1. Modo inmediato: El comando
se ejecuta al introducirlo en la línea de órdenes y teclear
<RETURN>.
2. Background: Se genera un nuevo proceso, en un esquema padres-hijos.
3. Batch: Se genera un proceso específico para el comando, pero independiente del proceso del usuario.
19.1 Ejecución en
background
Normalmente, son procesos
que se ejecutan con prioridad más baja.
Basta terminar la línea de órdenes con el símbolo &.
ps -efl ; ls -l | lp & Afecta al último comando
El nuevo proceso generado con & depende del proceso padre que inició el comando. Si éste desaparece, desaparece aquel. Una forma de inmunizar al hijo de la muerte del padre es utilizar el calificativo nohup:
nohup comando &
Cuando muere el proceso padre, comando pasa a depender del proceso inicial denominado init (nunca muere). La salida generada se deja en el fichero nohup.out en el directorio de trabajo del momento de lanzar el comando.
19.2 Ejecución en
batch
Ejecución de órdenes
en algún instante posterior.
at hora [fecha] [+incremento]
cmd1
cmd2
...
<CTRL>D
19.2.1 Especificación
de la hora
a) 0815 am 9:30 pm 5 pm
b) Especiales: now, next, noon, midnight, zulu
19.2.2 Espeficificación
de la fecha
a) mes-día, año:
Jan 24,1990
b) Especiales: today, tomorrow, días de la semana (en inglés)
19.2.3 Especificación
del incremento
Un número, seguido
de las palabras clave: minutes, hours, days, months, years
19.2.4 Ejemplos
echo "/ejec/calculon" |
at 2300 A las 11pm se ejecuta calculon
at now +4 hours
write `logname` <<! Es hora de irse !
<CTRL>D
El sistema nos informa de la identificación del trabajo y la hora a la que se producirá:
atjob a.xxxxxxx at <hora><fecha>
19.2.5 Información
del estado de at
at -l[job] Presenta un resumen
del estado de los trabajos pendientes
at -r[job] Borra job de la cola
20. Editores
de texto Indice
Un editor de texto es simplemente
un programa que se usa para editar ficheros que contienen texto, tales
como una letra, un programa en C, un fichero de configuración del
sistema.
En UNIX existen unos editores de textos básicos suministrados con el sistema. Los hay de dos tipos:
1. De líneas:
edit Introductorio, sencillo y poco potente
ed Versión un poco más flexible
ex Más versátil, es un editor potente
sed Editor no interactivo. Está pensado para trabajar con:
a) Ficheros muy grandes.
b) Secuencias de edición complicadas (por ejemplo, transformar una lista de DNIs en NIFs).
c) Funciones de edición globales.
2. De pantalla (caracteres):
vi Editor típico de UNIX. Características principales:
- Observación inmediata de la modificación.
- Entorno edición-ejecución potente.
- Comandos invisibles.
- División del campo visual: trabajo y comandos.
Se puede acceder a vi desde ex y viceversa.
Se puede acceder a vi desde more.
20.1 Entorno more-vi-ex
20.1.1 more
Comando que permite presentar
en pantalla el contenido de un fichero de texto de una forma filtrada.
Se puede utilizar de dos formas diferentes:
1. more fichero1 fichero2 ...
2. comandos | more Esta forma no admite edición
Presenta una pantalla (25 líneas) del primer fichero, y se queda esperando una orden, con un mensaje en la última fila:
-more (? %)
Órdenes:
<espacio> Siguiente pantalla.
<intro> Siguiente línea.
/cadena Búsqueda de cadena en el texto.
n Siguiente aparición de la cadena.
!cmd Ejecución del comando cmd en background.
:n Siguiente fichero.
f Salta 44 líneas.
v Edita con vi el fichero en curso. Al terminar, se retorna a more.
q Fin.
p Restaura la pantalla.
20.2 Editor vi
vi fichero1 [fichero2] ...
Existen otros muchos editores para UNIX, pero el único que es seguro encontrar en cualquier sistema UNIX es vi ("visual editor"). vi no es el editor más fácil de usar. Sin embargo, al ser tan común, y, muchas veces, necesario su uso, se explica a continuación su funcionamiento más básico.
vi es un editor pequeño (ocupa pocos recursos) y potente, pero muy difícil de usar. Sin embargo, una vez que uno se acostumbra a él, la edición es muy rápida.
En esta sección se da una introducción a vi. No se discutirán todas sus características, solamente aquellas necesarias para empezar. Se puede utilizar la ayuda de UNIX (man) para aprender alguna más de sus características.
20.2.1 Conceptos
Al usar vi, en cualquier
momento se está en uno de tres modos de operación. Estos
modos son conocidos como modo de comandos, modo de inserción, y
modo de última línea.
Cuando se arranca vi, se está en el modo de comandos. Este modo permite usar ciertos comandos para editar ficheros o cambiar a otros modos. Por ejemplo, tecleando x en el modo de comandos borra el carácter bajo el cursor. Las teclas de dirección mueven el cursor por el fichero que se está editando. Generalmente, los comandos usados en el modo de comandos son de uno o dos caracteres de largo.
Insertar o editar texto se realiza en el modo de inserción. En vi, la mayor parte del tiempo se estará en este modo. Se puede iniciar el modo de inserción usando un comando como i (insertar) desde el modo de comandos. En el modo de inserción, se inserta texto en el documento desde la posición actual del cursor. Para finalizar el modo de inserción y volver al modo de comandos, se pulsa <ESC>.
El modo de última línea es un modo especial usado para ciertos comandos extendidos. Cuando se teclean estos comandos, aparecen en la última línea de la pantalla (de ahí su nombre). Por ejemplo, cuando se teclea : desde el modo de comandos, se salta al modo de última línea y se pueden usar comandos como wq (grabar el fichero y finalizar vi), o q! (finalizar vi sin grabar los cambios). El modo de última línea generalmente se usa para comandos que son más largos que un carácter. En el modo de última línea, se introduce un comando y se presiona <INTRO> para ejecutarlo.
20.2.2 Iniciando vi
El mejor modo de entender
estos conceptos es lanzando vi y editando un fichero. En las pantallas
de ejemplo inferiores, se mostrarán sólo unas pocas líneas
de texto, como si la pantalla solamente tuviera seis líneas de alto
(en vez de 24).
La sintaxis de vi es
vi nombre_de_fichero
Comenzar tecleando
vi test
Se verá algo como
____________________________________________________________________
|~_
|~
|~
|~
|~
|"test"_[New_file]__________________________________________________|
La columna de caracteres ~ indica que se está en el final de fichero.
20.2.3 Insertando texto
Ahora se está en
el modo de comandos. Para insertar texto en el fichero, pulsar i (que nos
situará en el modo de inserción), y comenzar a teclear.
____________________________________________________________________
|Now is the time for all good men to come to the aid of the party._ |
|~
|~
|~
|~
|~__________________________________________________________________|
En el modo de inserción, se pueden teclear tantas líneas como se quiera (presionando <INTRO> después de cada una, por supuesto), y se pueden corregir errores usando la tecla de retroceso.
Para finalizar el modo de inserción, y volver al modo de comandos, presionar <ESC>.
En el modo de comandos, se pueden usar la teclas de dirección para moverse por el fichero. En este caso, como sólo tenemos una línea de texto, intentar moverse hacia arriba o abajo probablemente provocará que vi emita un pitido.
Existen varias maneras de insertar texto, aparte del comando i. Por ejemplo, el comando a inserta texto empezando después de la posición actual del cursor. Por ejemplo, usa la flecha izquierda para mover el cursor entre las palabras good y men.
____________________________________________________________________
|Now is the time for all good men to come to the aid of the party._ |
|~
|~
|~
|~
|~__________________________________________________________________|
Pulsa a, para empezar el modo de inserción, teclea wo y pulsa <ESC> para volver al modo de comandos.
____________________________________________________________________
|Now is the time for all good women to come to the aid of the party.|
|~
|~
|~
|~
|~__________________________________________________________________|
Para comanzar a insertar texto en la línea debajo de la actual, usa el comando o. Por ejemplo, pulsa o y teclea una o dos líneas:
____________________________________________________________________
|Now is the time for all good women to come to the aid of the party.|
|Afterwards, we'll go out for pizza and beer._
|~
|~
|~
|~__________________________________________________________________|
Recuerda que en cualquier momento estás o en modo de comandos (donde comandos como i,a,o son válidos), o en modo de inserción (donde insertas textos, seguido de <ESC> para volver al modo de comandos), o en modo de última línea (donde se introducen comandos extendidos, como se discutirá más adelante).
20.2.4 Borrando texto
Desde el modo de comandos,
el comando x borra el carácter bajo el cursor. Si presionas x cinco
veces, terminarás con:
____________________________________________________________________
|Now is the time for all good women to come to the aid of the party.|
|Afterwards, we'll go out for pizza and _
|~
|~
|~
|~__________________________________________________________________|
Ahora pulsa a, inserta texto, seguido de <ESC>:
____________________________________________________________________
|Now is the time for all good women to come to the aid of the party.|
|Afterwards, we'll go out for pizza and Diet Coke._
|~
|~
|~
|~__________________________________________________________________|
Puedes borrar líneas enteras usando el comando dd (pulsar dos veces seguidas las letra d). Si el cursor está en la segunda línea y tecleas dd:
____________________________________________________________________
|Now is the time for all good women to come to the aid of the party.|
|~
|~
|~
|~
|~__________________________________________________________________|
Para borrar la palabra sobre la que está el cursor, usa el comando dw. Sitúa el cursor en la palabra good y teclea dw.
____________________________________________________________________
|Now is the time for all women to come to the aid of the party.
|~
|~
|~
|~
|~__________________________________________________________________|
20.2.5 Cambiando texto
Puedes cambiar secciones
de texto usando el comando R. Sitúa el cursor en la primera letra
de party, pulsa R, y teclea la palabra hungry.
____________________________________________________________________
|Now is the time for all women to come to the aid of the hungry._
|~
|~
|~
|~
|~__________________________________________________________________|
Usar R para editar texto es parecido a usar los comandos i y a, pero R sobreescribe el texto, en lugar de insertarlo.
El comando r reemplaza el carácter bajo el cursor. Por ejemplo, mueve el cursor al inicio de la palabra Now y teclea r seguido por C:
____________________________________________________________________
|Cow is the time for all women to come to the aid of the hungry._
|~
|~
|~
|~
|~__________________________________________________________________|
El comando ~ cambia la letra bajo el cursor de mayúscula a minúscula y viceversa. Por ejemplo, si posicionas el cursor en la o de Cow, y pulsas repetidamente ~, conseguirás:
____________________________________________________________________
|COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY.
|~
|~
|~
|~
|~__________________________________________________________________|
20.2.6 Comandos de movimiento
Hasta ahora ya sabes como
usar las teclas de dirección para moverte por el documento. Además,
puedes usar las comandos h,j,k,l para mover el cursor a la izquierda, abajo,
arriba y derecha, respectivamente. Esto es útil en casos en los
que las teclas de dirección no funcionen por cualquier causa.
El comando w mueve el cursor al comienzo de la siguiente palabra; b lo mueve al comienzo de la palabra anterior.
El comando 0 (cero) mueve el cursor al principio de la línea actual, y el comando $ lo mueve al final de la línea.
Al editar ficheros largos, probablemente necesitarás moverte adelante y atrás por el fichero un "pantallazo" a la vez. Pulsando <CTRL-F>mueve el cursor una pantalla adelante, y <CTRL-B> lo mueve una pantalla hacia atrás.
Para mover el cursor al final de fichero, pulsa G. También puedes moverte a una línea en particular; por ejemplo, tecleando 10G movería el cursor a la línea 10 del fichero. Para moverte al principio del fichero, usa 1G.
Se pueden agrupar comandos de movimiento con otros comandos, como borrado. Por ejemplo, el comando d$ borrará todo desde el cursor hasta el final de línea; dG borrará todo desde el cursor hasta el final de fichero, etc.
20.2.7 Guardando ficheros
y finalizando vi
Para finalizar vi sin realizar
cambios al fichero, usa el comando :q!. Cuando teclees los dos puntos :,
el cursor se moverá a la última línea de la pantalla
(modo de última línea).
____________________________________________________________________
|COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY.
|~
|~
|~
|~
|~
|:__________________________________________________________________|
En el modo de última línea, ciertos comandos extendidos están disponibles. Uno de ellos es q!, que finaliza vi sin salvar. El comando :wq salva el fichero y después sale de vi. El comando ZZ (desde el modo de comandos, sin usar :) es equivalente a :wq. Recuerda que debes pulsar <INTRO> después de un comando tecleado en el modo de última línea.
Para guardar un fichero sin finalizar vi, simplemente usa :w.
20.2.8 Editando otro fichero
Para editar otro fichero,
usa el comando :e. Por ejemplo, para finalizar editando "test", y editar
el fichero "foo", usa el comando
____________________________________________________________________
|COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY.
|~
|~
|~
|~
|~
|:e foo_____________________________________________________________|
Si usas :e sin salvar el fichero primero, obtendrás el mensaje de error
____________________________________________________________________
|No_write_since_last_change_(":edit!"_overrides)____________________|
que significa simplemente que vi no quiere editar otro fichero hasta que no salves el primero. En este punto, puedes usar :w para salvar el original, y entonces usar :e, o puedes usar el comando
____________________________________________________________________
|COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY.
|~
|~
|~
|~
|~
|:e! foo____________________________________________________________|
La ! le dice a vi que "lo dices en serio" (edita el nuevo fichero sin guardar los cambios del primero).
20.2.9 Incluyendo otros ficheros
Si usas el comando :r, puedes
incluir el contenido de otro fichero en el fichero actual. Por ejemplo,
el comando
:r foo.txt
insertaría el contenido del fichero foo.txt en el texto en la localización actual del cursor.
20.2.10. Ejecutando comandos
del caparazón
También puedes ejecutar
comandos del caparazón o shell desde dentro de vi. El comando :r!
funciona como :r, pero en lugar de leer el fichero, inserta la salida de
un comando dado en el buffer en la posición actual del cursor. Por
ejemplo, si usas el comando
:r! ls -F
llegarás a
____________________________________________________________________
|COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY.
|letters/
|misc/
|papers/_
|~
|~__________________________________________________________________|
También puedes realizar un "shell out", es decir, ejecutar un comando desde dentro de vi, y volver al editor cuando finalice. Por ejemplo, si usas el comando
:! ls -F
el comando ls -F se ejecutará, y los resultados se verán en pantalla, pero no serán insertados en el fichero que estás editando. Si usas el comando
:shell
vi iniciará una instancia del shell, permitiendo situar temporalmente a vi "en espera" mientras ejecutas otros comandos. Simplemente sal del caparazón (usando exit) para volver a vi.
20.2.11 Consiguiendo ayuda
vi no facilita una ayuda
interactiva, pero siempre se puede consular la ayuda suminstrada por man.
vi es un programa sobre ex, es ex quien maneja muchos de los comandos de
última línea en vi. Por lo tanto, además de leer la
página de manual para vi, es conveniente ver la de ex también.
21. Programación
del shell Indice
El intérprete de
comandos es programable.
Definición: script
: fichero que contiene líneas de comandos. Es un fichero ordinario
de texto.
Ejecución: Existen dos formas:
1. sh fichero
2. fichero (debe tener permiso de ejecución)
Ejemplo: Utilizando el editor vi escribimos:
mkdir /export/cuenta1/direc
cp /usr/pub/ascii /export/cuenta1/direc
Al fichero creado le damos
permiso de ejecución (chmod +x fichero) y lo ejecutamos (creará
un directorio e introducirá en él el fichero /usr/pub/ascii).
22. Variables
del shell Indice
Se pueden definir variables
de la forma variable=valor
Para ver el contenido de
una variable, se usa echo $variable
Existen en UNIX variables predefinidas que sirven para configurar el entorno de cada usuario. Algunas de ellas son:
MAIL: Directorio que contiene el correo
PS1: Prompt primario
PS2: Prompt secundario
TERM: Tipo de terminal
LOGNAME: Nombre del usuario
HOME: Nombre del directorio por defecto
PATH: Caminos de búsqueda de los comandos