ant

CONCEPTOS BÁSICOS DE UNIX
3.2

sig

3.2 Conceptos básicos de UNIX

UNIX es un sistema operativo multitarea y multiusuario. Esto significa que puede haber mas de una persona usando un ordenador a la vez, cada uno de ellos ejecutando a su vez diferentes aplicaciones.(Esto difiere de MS-DOS, donde solo una persona puede usar el sistema en un momento dado).
Bajo UNIX, para que los usuarios puedan identificarse en el sistema, deben presentarse (login), proceso que consta de dos pasos:

1.-Introducir el nombre de usuario (login) (el nombre con que será identificado por el sistema)
2.-Introducir una contraseña (password), la cual es su llave personal secreta para entrar en la cuenta.

Como solo usted conoce su palabra de paso, nadie mas podrá presentarse en el sistema con su nombre de usuario.
En los sistemas UNIX tradicionales, el administrador del sistema asignará el nombre de usuario y una palabra de paso inicial en el momento de crear la cuenta de usuario.Como usted es el administrador del sistema, debe configurar su propia cuenta antes de poder presentarse ver Sección 3.2.1 más adelante.
Para el resto de las discusiones, usaremos el nombre de usuario "Decker". Además, cada sistema UNIX tiene un nombre del sistema (hostname) asignado. Este "hostname" le da nombre a la maquina, además de carácter y encanto. El nombre del sistema es usado para identificar maquinas en una red, pero incluso aunque la maquina no este en red, debería tener su nombre.
En la Sección 4.10.2 veremos como inicializar el nombre de la maquina. En nuestros ejemplos, el nombre del sistema será "PekePecera".

3.2.1 Creación de una cuenta

Antes de poder usar el sistema, deberá configurarse una cuenta de usuario. Esto es necesario, porque no es buena idea usar la cuenta de root para los usos normales. La cuenta de root debería reservarse para el uso de comandos privilegiados y para el mantenimiento del sistema, como se vera en la Sección 4.1.

Para crear su propia cuenta, necesita entrar en la cuenta de root y usar las ordenes useradd o adduser. Ver la Sección 4.4 para información sobre este procedimiento.

3.2.2 Presentación en el sistema (loggin in)

En el momento de presentarse en el sistema, vera la siguiente linea de comandos en la pantalla:
Ahora, introduzca su nombre de usuario y pulse [Return]. Nuestro héroe Decker, teclearía lo siguiente:
PekePecera login:
PekePecera login: Decker
Password:

Ahora introduzca la palabra de paso. Esta no será mostrada en la pantalla conforme se va tecleando, por lo que debe teclear cuidadosamente. Si introduce una contraseña incorrecta, se mostrara el siguiente mensaje:
Login incorrect

y deberá intentarlo de nuevo.

Una vez que ha introducido correctamente el nombre de usuario y la palabra de paso, está oficialmente "presentado" en el sistema y libre para comenzar a trabajar.

3.2.3 Consolas virtuales

La consola del sistema es el monitor y teclado conectado directamente al sistema. (Como UNIX es un sistema operativo multiusuario, puede tener otros terminales conectados a puertos serie del sistema, pero estos no serán la consola). Linux, como otras versiones de UNIX, proporciona acceso a consolas virtuales (o VC's), las cuales le permitirán tener mas de una sesión de trabajo activa desde la consola a la vez.

Para demostrar esto, entre en su sistema (como hemos visto antes). Ahora pulse [alt-F2] Debería ver la pregunta login: de nuevo. Esta viendo la segunda consola virtual. Para volver a la primera VC, pulse [alt-F1]¡Voila! ha vuelto a la primera sesión.

Un sistema Linux recién instalado probablemente le permita acceder a las primeras cuatro VC's, usando [alt-F1] a [alt-F4]. Pero es posible habilitar hasta 12 VC's_ una por cada tecla de función del teclado. Como puede ver, el uso de VC's es muy potente ya que puede estar trabajando en diferentes VC's a la vez. Mientras que el uso de VC's es algo limitado (después de todo, solo puede mirar un VC cada vez), esto debería darle una idea de las capacidades multiusuario del sistema. Mientras esta trabajando en el VC #1, puede conmutar al VC #2 y comenzar a trabajar en otra cosa.

3.2.4 Interpretes de comandos y comandos

En la mayoría de las exploraciones en el mundo de UNIX, estará hablando con el sistema a traves del uso de un interprete de comandos. Un interprete de comandos es simplemente un programa que toma la entrada del usuario (p.ej. las ordenes que teclea) y las traduce a instrucciones. Esto puede ser comparado con el COMMAND.COM de MS-DOS, el cual efectúa esencialmente la misma tarea.

El interprete de comandos es solo uno de los interfaces con UNIX. Hay muchos interfaces posibles como el sistema X Window, el cual le permite ejecutar comandos usando el ratón y el teclado.

Tan pronto como entra en el sistema, el sistema arranca un interprete de comandos y Ud. ya puede teclear ordenes al sistema.

Veamos un ejemplo rápido. Aqui, Decker entra en el sistema y es situado en el interprete de comandos
PekePecera login: Decker
Password: La contraseña de Decker

Bienvenido a PekePecera!

/home/Decker#
"/home/Decker#" es el "prompt" del interprete de comandos, indicando que esta listo para recibir ordenes.

Tratemos de decirle al sistema que haga algo interesante:
/home/Decker# make love
make: *** No way to make target `love'. Stop.
/home/Decker#
Bien, como resulta que make es el nombre de un programa ya existente en el sistema, el interprete de comandos lo ejecuta. (Desafortunadamente, el sistema no esta siendo muy amigable).
Esto nos lleva a una cuestion importante: ¿Qué son ordenes? ¿Que ocurre cuando tecleamos "make love"? La primera palabra de la orden, "make", es el nombre de la orden a ejecutar. El resto de la orden es tomado como argumentos de la orden.

Ejemplos:
/home/Decker# cp archivo nuevonombre
Aqui, el nombre de la orden es "cp", y los argumentos son "archivo" y "nuevonombre". Cuando teclea una orden, el interprete de comandos hace varias cosas. Primero de todo, busca el nombre de la orden y comprueba si es una orden interna. (Es decir, una orden que el propio interprete de comandos sabe ejecutar por si mismo. Hay bastantes ordenes de ese tipo que veremos mas adelante). El interprete de comandos también comprueba si la orden es un "alias" o nombre sustitutorio de otra orden. Si no se cumple ninguno de estos casos, el interprete de comandos busca el programa y lo ejecuta pasándole los argumentos especificados en la linea de comandos.

En nuestro ejemplo, el interprete de comandos busca el programa llamado make y lo ejecuta con el argumento love. make es un programa usado a menudo para compilar programas grandes, y toma como argumentos el nombre de un "objetivo" a compilar. En el caso de "make love", ordenamos a make que compile el objetivo love. Como make no puede encontrar un objetivo de ese nombre, falla enviando un mensaje de error y volviendo al interprete de comandos. Que ocurre si tecleamos una orden y el interprete de comandos no puede encontrar el programa de ese nombre? Bien, probémoslo:
/home/Decker# quiero cocacola
quiero: command not found
/home/Decker#
Bastante simple, si no se puede encontrar el programa con el nombre dado en la orden (aquí "quiero"), se muestra un mensaje de error que debería de ser autoexplicativo. A menudo verá este mensaje de error si se equivoca al teclear una orden (por ejemplo, si hubiese tecleado "mkae love" en lugar de "make love".

3.2.5 Salida del sistema

Antes de ahondar mas, deberíamos ver como salir del sistema. Desde la linea de ordenes usaremos la orden para salir. Hay otras formas, pero esta es la mas fácil.
/home/Decker# exit
Si no obtiene éxito, pruebe con logout. Si lo que desea es apagar el sistema podrá probar con el comando halt. Si desea reiniciar el ordenador le será útil el comando reboot. Estos comandos serán explicados en breves capítulos.

3.2.6 Cambiando la contraseña

También debe asegurarse de la forma de cambiar su contraseña. La orden passwd le pedirá su contraseña vieja y la nueva. Volverá a pedir una segunda vez la nueva para validarla. Tenga cuidado de no olvidar su contraseña. Si eso ocurre, deberá pedirle al administrador del sistema que la modifique por usted. (Si es el administrador del sistema, vea la Sección 4.4.)

3.2.7 Ficheros y directorios

Bajo la mayoría de los sistemas operativos (UNIX incluido), existe el concepto de fichero, el cual es un conjunto de información al que se le ha asignado un nombre (llamado nombre del fichero).

Ejemplos de fichero son un mensaje de correo, o un programa que puede ser ejecutado. Esencialmente, cualquier cosa salvada en el disco es guardada en un fichero individual.

Los ficheros son identificados por sus nombres. Por ejemplo, el fichero que contiene su historial podría ser salvado con el nombre history. Estos nombres usualmente identifican el fichero y su contenido de alguna forma significativa para usted. No hay un formato estandar para los nombres de los ficheros como lo hay en MS-DOS y en otros sistemas operativos; en general estos pueden contener cualquier carácter excepto "/" (ver la discusión sobre "pathnames" -rutas de ficheros- mas adelante), y están limitados a 256 caracteres de longitud.

Con el concepto de fichero aparece el concepto de directorio. Un directorio es simplemente una colección de ficheros. Puede ser considerado como una "carpeta" que contiene muchos ficheros diferentes. Los directorios también tienen un nombre con el que los podemos identificar. Además, los directorios mantienen una estructura de árbol; es decir, directorios pueden contener otros directorios.

Un fichero puede ser referenciado por su nombre con camino, el cual está constituido por su nombre, antecedido por el nombre del directorio que lo contiene. Por ejemplo, supongamos que Decker tiene un directorio de nombre documentos que contiene tres ficheros: madrid.txt, agenda y tesis. (Cada uno de los tres ficheros contiene información sobre tres de los proyectos en los que Decker esta trabajando). Para referirse al fichero madrid, Decker puede especificar su camino:
documentos/madrid.txt
Como puede ver, el directorio y el nombre del fichero van separados por un carácter /. Por esta razón, los nombres de fichero no pueden contener este carácter. Los usuarios de MS-DOS encontraran esta convención familiar, aunque en el mundo MS-DOS se usa el carácter \).

Como hemos mencionado, los directorios pueden anidarse uno dentro de otros. Por ejemplo, supongamos que Decker tiene otro directorio dentro de documentos llamado universidad. El camino hacía el fichero notas.html dentro de ese directorio sería
documentos/universidad/notas.html
Por lo tanto, el camino realmente es la "ruta" que se debe tomar para localizar a un fichero. El directorio sobre un subdirectorio dado es conocido como el directorio padre. Aqui, el directorio documentos es el padre del directorio universidad. Siempre que estamos acciendo a estos ficheros lo estamos haciendo usando lo que se denomina "camino relativo", y desde el directorio home de Decker.

Existen dos tipos de caminos, caminos relativos y caminos absoultos. La diferencia consiste en que si usamos el camino absoluto para acceder a un fichero tenemos que indicar toda la ruta (desde el directorio raíz) y no a partir del directorio actual donde nos encontremos.

3.2.8 El árbol de directorios

La mayoría de los sistemas UNIX tienen una distribución de ficheros estandar, de forma que recursos y ficheros puedan ser fácilmente localizados. Esta distribución forma el árbol de directorios, el cual comienza en el directorio "/", también conocido como "directorio raíz". Directamente por debajo de / hay algunos subdirectorios importantes: /bin, /etc, /dev y /usr, entre otros. Estos a su vez contienen otros directorios con ficheros de configuración del sistema, programas, etc.

En particular, cada usuario tiene un directorio "home". Este es el directorio en el que el usuario guardará sus ficheros. En los ejemplos anteriores, todos los ficheros de Decker (como madrid.txt y tesis) estaban contenidos en el directorio home de Decker. Usualmente, los directorios home de los usuarios cuelgan de /home y son nombrados con el nombre del usuario al que pertenecen. Por lo tanto, el directorio "home" de Decker es /home/Decker. En la figura 3.1 se muestra un árbol de directorio de ejemplo. Este debería darle una idea de como esta organizado en su sistema el árbol de directorios.

jo
Figura 3.1: Típico árbol de directorios UNIX (resumido).



3.2.9 Directorio de trabajo actual

En cualquier momento, las ordenes que teclee al interprete de comandos son dadas en términos de su directorio de trabajo actual. Puede pensar en su directorio actual de trabajo como en el directorio en el que actualmente esta "situado". Cuando entra en el sistema, su directorio de trabajo se inicializa a su directorio home /home/Decker en nuestro caso. En cualquier momento que referencie a un fichero, puede hacerlo en relación a su directorio de trabajo actual, en lugar de especificar el camino completo del fichero. (desde la raíz)

Vemos un ejemplo. Decker tiene el directorio documentos, y documentos contiene el fichero madrid.text. Si Decker quiere echar un vistazo a ese fichero, puede usar la orden
/home/Decker# more /home/Decker/documentos/madrid.txt
La orden more simplemente muestra el fichero, pantalla a pantalla. Pero, como el directorio de trabajo actual de Decker es /home/Decker, podría haberse referido al fichero de forma relativa a su directorio de trabajo actual. La orden sería
/home/Decker# more documentos/madrid.txt
Por lo tanto, si comienza el nombre de un fichero (como documentos/final) con un carácter distinto a "/", el sistema supone que se está refiriendo al fichero con su posición relativa a su directorio de trabajo. Esto es conocido como camino relativo. Por otra parte, si comienza el nombre del fichero con "/", el sistema interpreta esto como un camino completo es decir, el camino al fichero completo desde el directorio raíz, /. Esto es conocido como camino absoluto. Puede conocer el directorio actual de trabajo mediante el comando pwd o mediante la orden "echo $PWD".

3.2.10 Refiriéndose al directorio home

Bajo tcsh y bash, el directorio "home" puede ser referenciado usando el carácter de la tilde ( ~ ). Por ejemplo, la orden
/home/Decker# more ~/documentos/madrid.txt
es equivalente a
/home/Decker# more /home/Decker/documentos/madrid.txt
El carácter "~" es simplemente sustituido por el interprete de comandos, con el nombre del directorio home. Además, también puede especificar otros directorios home de usuarios con la tilde. El camino "~oscar/documentos" es traducido por el interprete de ordenes a "/home/oscar/documentos" (si /home/oscar es el directorio home de oscar). El uso de la tilde es simplemente un atajo; no existe ningún directorio llamado "~", es simplemente una ayuda sintáctica proporcionada por el interprete de comandos.

Puedes conocer cual es tu directorio "home" con la siguiente orden :
/home/Decker# echo $HOME
En el tema dedicado a la Bash explicaremos esta orden.

3.2.11 Organización de los Manuales

Todas las versiones de Unix organizan sus manuales en secciones. Dependiendo de la versión podemos encontrar ligeras deiferencias.

Para consultar el manual existe el comando man.
man <Nombre Comando o Fichero>
Sección 1 : La sección 1 contiene la descripción de todos los comandos y aplicaciones que los usuarios pueden utilizar, interprete de comandos (sh, bash...), compilador de lenguaje C (cc), manual del sistema (man), etc.

Sección 2 : La sección 2 describe todas las llamadas al sistema (primitivas) del sistema operativo. open,fork,read,kill, etc.

Sección 3 : La sección 3 contiene la descripción de todas las funciones de biblioteca que, generalmente coinciden con las del entorno de desarrollo. Manejo de tiras de caraceteres(strcmp, strcat, strlen), funciones matemáticas (log, power, etc.), entrada/salida (printf, fopen, fwrite, etc).

En estas tres primeras secciones coinciden todos los sistemas.

Sección 4 : La sección 4 en los sistemas Unix derivados de BSD se utiliza para describir los manejadores de deispositivos y de red. En los sistemas Unix derivados de ATT contiene las descripciones de ciertos ficheros del sistema tales como:
/etc/inittab, /etc/passwd, /etc/hosts

Sección 5 : La sección 5 en los sistemas Unix de ATT se utiliza para guardar la descripción de ficheros y documentos que no encajan en la sección 4. En las versiones derivadas de BSD se utiliza para describir los ficheros del sistema, es decir, cumple la misma función que la sección 4 para los de ATT.

Sección 6 : La sección 6 coincide en todas las versiones. Describe los juegos

Sección 7 : La sección 7 en ATT describe los manejadores de dispositivos y los protocolos de red, mientras que en BSD se utiliza para describir ficheros y documentos variados.

Sección 8 : La sección 8 sólo existe en ATT y se utiliza para almacenar las descripciones de los comandos de administración.

Linux sigue la descripción de manuales de BSD