UNIX comienza en 1969 como un proyecto de investigación de Bell Laboratories, estando disponible la primera versión comercial en 1977 y ganando rápidamente en popularidad y difusión.
Los objetivos que persiguieron los primeros diseñadores de UNIX fueron conseguir un sistema operativo que permitiera un desarrollo eficiente de programas, que fuera pequeño y eficiente en el uso de la memoria y fácil de mantener.
Los sistemas operativos, hasta la aparición de UNIX, estaban pensados para funcionar únicamente en el sistema en que eran desarrollados. Esto implicaba un gran esfuerzo en aprender un nuevo sistema operativo cada vez que se usaban sistemas distintos. Aplicaciones que funcionaban en un sistema no estaban disponibles en otros e incluso los propios programas requerían modificaciones para transportarlos a otro sistema.
Una de las razones que han hecho que UNIX haya alcanzado una gran popularidad es resolver estos problemas, pues permite transportarlo fácilmente a diferentes sistemas. Esto se consiguió diseñando el sistema operativo de forma que hiciera muy pocas suposiciones sobre la arquitectura de la computadora y escribiendo la mayor parte del sistema operativo en un lenguaje de alto nivel (C). Sólo una pequeña parte (el kernel) está escrito en lenguaje ensamblador.
Actualmente UNIX puede ser usado desde pequeños ordenadores personales a grandes computadoras. Así pues un programador puede encontrar las mismas herramientas de programación, entornos similares y ejecutar fácilmente sus programas en cualquier sistema que use UNIX.
Además, normalmente con el sistema operativo se suministran otra serie de programas, utilidades para comunicaciones, editores, lenguajes de programación, etc, que no forman parte estrictamente del sistema operativo.
En UNIX hay varios tipos de shell que ofrecen diferentes características:
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.
El sistema de ficheros en UNIX está organizado en una estructura jerárquica de directorios que comienza en el directorio root representado por / .
Los directorios que cuelgan de root pueden variar dependiendo del sistema, aunque los mostrados a cotinuación, sí son comunes a todos los sistemas UNIX.
/(root) | ---------------------------------------------------- | | | | | | | /bin /dev /etc /home /lib /tmp /usr
Generalmente se utilizan dos puntos consecutivos (..) para representar el directorio inmediatamente superior al que nos encontramos. Por ejemplo, si nos encontramos en el directorio `bin', .. representa al directorio `local'. En la mayor parte de las shells los directorios de los usuarios (home) se representa con el símbolo ~ .
Ejemplos:
[comun@volvo ~]$ pwd
[comun@volvo ~]$ cd /
[comun@volvo ~]$ pwd
[comun@volvo /]$ ls -> Muestra el contenido del directorio
bin datos
export impresion lost+found
opt sbin
tmp
boot dev
floppy lib
misc proc
scratch usr
cdrom etc
home localsoft mnt
root soft
var
[comun@volvo /]$ ls -F -> Muestra el contenido indicando los
ficheros con un *, los directorios con una / y los links
con @
bin/ datos/
export/ impresion lost+found/
opt/ sbin/
tmp/
boot/ dev/
fichero * floppy@ lib/
misc/ proc/
scratch@ usr/
cdrom@ etc/
home/ localsoft/
mnt/ root/
soft/ var/
Cuando introducimos un comando, el sistema operativo ejecuta un programa. Mientras este programa esté funcionando se le denomina proceso. Cada proceso generado en el sistema tiene un número de identificación conocido como PID (proceso ID).
Los ficheros pueden clasificarse dentro de las siguientes categorías:
Los directorios son ficheros que contienen referencias a otros ficheros. Aunque todos los ficheros se encuentran dentro de algún directorio, no residen realmente dentro de él. El directorio mantiene dos informaciones básicas sobre cada fichero contenido en él: El nombre y un número llamado inode number que es un puntero que le indica al sistema donde encontrar toda la información que necesita del fichero.
A la correspondencia entre el nombre de un fichero y el inode number se le denomina link. Un mismo inode number puede tener asociados varios nombres y nos podemos referir al fichero por cada uno de estos nombres.
Los dispositivos especiales son ficheros que representan
dispositivos físicos como impresoras, dispositivos magnéticos,
el ratón, etc. Se encuentran dentro del directorio /dev.
Por ejemplo, si la salida por pantalla de un programa no nos interesa podemos
enviarla al dispositivo /dev/null que en realidad no tiene un dispositivo
físico asociado, perdiendose de esta forma la salida del progrma.
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.