Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Kernel
Puede considerarse como el núcleo del sistema operativo y es leido cada vez que se inicializa el sistema.
Realiza una serie de tareas básicas como son:
Controlar la memoria de la máquina y asignar una parte a cada proceso
Distribuir el trabajo realizado por la CPU de forma que sea lo más eficiente posible
Organizar la transferencia de datos entre las distintas partes del sistema
Aceptar las instrucciones de la shell
Hacer cumplir los permisos especificados en el sistema de ficheros
Shell
La forma que el usuario tiene de acceder a los servicios del kernel es mediante la shell. Se puede considerar
como el interprete de comandos, que permite que los comandos y programas que tecleamos sean
ejecutados.
En UNIX hay varios tipos de shell que ofrecen diferentes características:
Bourne shell (sh)
C shell (csh)
TC shell (tcsh)
Korn shell (ksh)
Bourne Again SHell (bash)
Bourne shell. Es la original de UNIX y está disponible en todos los sistemas, sin embargo no ofrece las
facilidades de interacción con el usuario que ofrecen las shell más modernas.
C shell. Es la que tenemos normalmente cuando nos abren la cuenta en el IAC, (aunque podemos pedir que
nos pongan otra).
TC shell es similar a la anterior pero ofrece más facilidades para editar la línea de comandos de forma
interactiva. En lo que resta del curso supondremos que estamos trabajando con la TC o C shell.
Korn shell y Bourne Again SHell proporcionan las facilidades de interacción de TC shell pero el lenguaje de
programación en shell es más parecido al original Bourne shell que a TC o C shell.
En la tabla se muestra un resumen de las características más importantes de las distintas shells.
Bourne C TC Korn BASH ________________________________________________________
command history No Yes Yes Yes Yes
command alias No Yes Yes Yes Yes
shell scripts Yes Yes Yes Yes Yes
filename completion No Yes* Yes Yes* Yes
command line editing No No Yes Yes* Yes
job control No Yes Yes Yes Yes ________________________________________________________
* Esta opción no está puesta por defecto
Para cambiar de shell basta con teclear en la línea de comandos el nombre de la shell que deseemos
(sh, csh, tcsh, ksh o bash). Sin embargo no podemos cambiar la opción que tenemos por defecto al entrar en
la cuenta, si queremos cambiarla hay que pedirlo al administrador del sistema.
programa1 >/dev/null
Los pipes permiten enlazar la salida de un comando a la entrada de otro, esto se hace a través de la
creación de un fichero temporal donde se guarda la salida del primer programa hasta que es leido por el
segundo.
COMANDOS
Lo primero que necesitamos es tener una cuenta. Cuando el administrador del sistema nos abre una cuenta
nos dará un username y un password. Para entrar en la cuenta escribimos nuestro username donde
pone login. Luego nos pide el password. Tanto el username como el password son sensibles a mayúsculas o
minúsculas.
Una vez dentro de la cuenta utilizamos una terminal (por ejemplo una xterm) para ejecutar los comandos.
Podemos empezar por cambiar el password que nos ha dado el administrador del sistema con el comando:
nispasswd
que nos pedirá nuestro password anterior y el nuevo (lo pide dos veces para evitar errores). La elección
del password, por razones de seguridad, debe evitar palabras de diccionarios, es conveniente mezclar
números con letras o algún caracter especial.
Sintaxis de los comandos
La forma básica de un comando unix consta de tres partes aunque no todas tienen que estar presentes. La
primera, que es necesaria siempre, es el nombre del comando. Luego vienen las opciones que son letras
que se ponen precedidas del signo - y que le indican al comando que opción deseamos (algunas de estas
opciones requieren un argumento). Por último están los argumentos del comando que pueden ser opcionales
o no dependiendo del comando en concreto. Si cometemos errores en la sintaxis, como una opción
inexistente, se nos indicará por pantalla cual es la sintaxis de ese comando con sus opciones y argumentos,
indicando entre corchetes [] los que son opcionales. También podemos ver la sintaxis en la ayuda del
comando. Un ejemplo de comando con opciones y argumentos es:
ls -la dir1l
OPERADORES DE COMPARACION
== Igual (enteros o cadenas de caracteres)
!= Distinto (enteros o cadenas)
=~ La cadena de la izquierda se ajusta al patrón de la derecha
!~ La cadena de la izquierda no se ajusta al patrón de la derecha
> Mayor que (enteros)
< Menor que (enteros)
>= Mayor o igual (enteros)
<= Menor o igual (enteros)
#!/bin/csh
#Script que mata todos los procesos que tengamos corriendo en una maquina
#La sintaxis es mata seguido del nombre de la maquina
if ($#argv != "1") then
echo "Introducir como argumento el nombre de la maquina"
exit
endif
set pid=`rsh $1 ps -feao ruser,pid | grep $user`
foreach pro ($pid)
if ($pro != $user) then
rsh $1 kill -9 $pro
endif
end
El comando switch
La sintaxis del comando es:
switch (string)
case label1:
...
case label2:
.
.
...
breaksw
...
default:
...
breaksw
endsw
Se va comparando si las etiquetas label1, label2 ... coinciden con la cadena string, en cuyo caso se
ejecutan los comandos que van a continuación. en el momento que se encuentre un breaksw continuará con
los comandos que siguen después de endsw. Si no se encuentra ningún breaksw se llega a default: y se
ejecutan los comandos que siguen. Si tampoco hay default: el programa continua su ejecución después
de endsw.
El comando while
La sintaxis es:
while (expr)
...
end
Su funcionamiento es muy simple. Mientras la evaluación de la expresión entre parentesis sea verdadera
(distinto de 0) se ejecutarán los comandos comprendidos entre while y end.
Otros comandos
Existen otros comandos que son muy útiles en la programación en shell, pero que su explicación queda fuera
de los objetivos de este curso. Para los que quieran profundizar en el tema se muestran a continuación los
más importantes con un ejemplo sencillo:
awk (pattern scanning and proccesing language)
Permite buscar patrones de caracteres en ficheros y realizar una serie de acciones cuando encuentra una
coincidencia entre el patrón y una línea. Ejemplos:
awk '$4 ~/agn/ {print $1,$9}' log
Busca el patrón agn en la columna 4 de cualquier línea del fichero log, y para las líneas en que encuentre el
patrón realiza la acción indicada entre {}, que en este caso es mostrar la columna 1 y la 9.
sed
Permite modificar el contenido de un fichero (sustituir palabras, añadir, borrar, etc) según indiquen una serie
de comandos. Un ejemplo sencillo es:
sed -e "s/[Gg]alaxia/NGC4151/g" file
Remplazará en cada línea del fichero file la palabra galaxia o Galaxia por NGC4151.
cut and paste
Cortan y pegan campos seleccionados de cada línea de un ficheros. Ejemplos:
cut -c 1-5 file1
paste l1 l2
El primero extrae por la terminal los cinco primeros caracteres de cada línea del fichero file1. El segundo une
la línea los dos ficheros l1 y l2 mostrandolo por la terminal.