Bajo GNU/Linux, para que los usuarios puedan identificarse en el sistema, deben presentarse (“log in”) mediante un proceso que consta de dos pasos: Introducir el nombre de usuario (“login”), y una contraseña (“password”), la cual es su llave personal secreta para entrar en la cuenta. En nuestros ejemplos supondremos que el nombre de usuario es diego
.
En los sistemas Unix tradicionales, el administrador del sistema asignará el nombre de usuario y una contraseña inicial en el momento de crear la cuenta de usuario. Además, cada sistema tiene un nombre (“hostname”) asignado, que le da nombre a la máquina. El nombre del sistema es usado para identificar computadoras en una red, pero incluso aunque la máquina no esté en red, debería tener su nombre. En nuestros ejemplos, el nombre del sistema será micasa
.
En el momento de presentarse en el sistema, veremos el siguiente indicador en la pantalla:
micasa login:
Ahora, introducimos nuestro nombre de usuario y presionamos [Enter]
.
En algunos teclados ésta tecla puede aparecer comoEn nuestro ejemplo, deberíamos teclear lo siguiente:[Intro]
o[Return]
.
micasa login: diego
Password:
Ahora introducimos la contraseña. Esta no será mostrada en la pantalla conforme se va tecleando, por lo que debe hacer cuidadosamente. Si introducimos una contraseña incorrecta, se mostrará el siguiente mensaje:
Login incorrect
y deberemos intentarlo nuevamente.
Una vez que hemos introducido correctamente el nombre de usuario y la contraseña, estamos “presentados” en el sistema y listo para iniciar una sesión interactiva y comenzar a trabajar, según los derechos de acceso que nos brinde nuestra cuenta, como veremos más adelante.
La consola del sistema (o terminal) está formada por el monitor y teclado conectado directamente a la computadora. GNU/Linux, proporciona acceso a consolas virtuales (o VCs, por “Virtual Console”), las cuales nos permitirán tener mas de una sesión de trabajo activa a la vez desde una única consola física.
Para demostrar esto, ingresamos al sistema (como hemos visto antes). Luego presionamos [ALT]+[F2]
. Deberíamos ver la línea micasa login:
de nuevo. Estamos viendo la segunda consola virtual ya que hemos ingresado al sistema por la primera. Para volver a la primera VC, presionamos [ALT]+[F1]
.
Un sistema GNU/Linux recién instalado probablemente nos permita acceder a las primeras seis VCs, usando [ALT]+[F1]
a [ALT]+[F6]
, pero es posible habilitar hasta 12 VCs, una por cada tecla de función del teclado.
Mientras que el uso de VC's es algo limitado (después de todo, sólo podemos mirar una por vez), esto debería dar una idea de las capacidades multiusuario del sistema. Mientras estamos trabajando en la VC Nº 1, podemos conmutar a la VC Nº 2 y comenzar a trabajar en otra tarea (inclusive, claro está, con un nombre de usuario diferente), mientras el sistema continúa ejecutando la tarea de la VC Nº 1.
Un intérprete de comandos (también conocido como “shell”) es un programa que toma la entrada del usuario (por ejemplo, las órdenes que teclea) y las traduce a instrucciones del sistema operativo. Esto puede ser comparado con el COMMAND.COM
de DOS, el cual efectúa esencialmente la misma tarea. El intérprete de comandos es sólo una de las interfaces con Unix. Hay muchas interfaces posibles, como la interfaz gráfica X Window, la cual permite ejecutar comandos usando el ratón y el teclado.
Tan pronto como un usuario ingresa al sistema, se ejecuta un intérprete de comandos y éste ya puede teclear órdenes al sistema. Veamos un ejemplo. Aquí, diego
entra en el sistema y es situado en el intérprete de comandos:
micasa login: diego
Password:
Welcome to micasa!
/home/diego$
“/home/diego$
” es el prompt (o indicador) del intérprete de comandos, indicando que está listo para recibir órdenes. Tratemos de decirle al sistema que haga algo interesante:
/home/diego$ make love
make: *** No rule to make target `love'. Stop.
/home/diego$
Bien, como resulta que make
es el nombre de un programa ya existente en el sistema, el intérprete de comandos lo ejecuta (desafortunadamente, el sistema no está siendo muy amigable).
Esto nos lleva a una cuestión importante: ¿Qué es una orden? ¿Qué ocurre cuando tecleamos “make love
”? La primera palabra de la orden, “make
”, es el nombre del comando a ejecutar. El resto de la orden es tomado como argumentos (o parámetros) de la comando. Por ejemplo:
/home/diego$ cp hola mundo
Aquí, el nombre del comando es “cp
”, y los argumentos son “hola
” y “mundo
”.
Cuando se teclea una orden, el intérprete de comandos hace varias cosas. Primero, busca el nombre del comando y comprueba si es un comando interno (es decir, una comando que el propio intérprete de comandos sabe ejecutar por si mismo). Hay bastantes comandos de ese tipo que veremos mas adelante. El intérprete de comandos también comprueba si el comando es un “alias” o nombre sustituto de otro comando. Si no se cumple ninguno de estos casos, el intérprete de comandos busca el programa y lo ejecuta pasándole los argumentos especificados en la línea de comandos.
En nuestro ejemplo, el intérprete 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 intérprete de comandos.
¿Qué ocurre si tecleamos un comando y el intérprete de comandos no puede encontrar el programa de ese nombre? Bien, probémoslo:
/home/diego$ hacer nada
hacer: command not found
/home/diego$
Bastante simple, si no se puede encontrar el programa con el nombre dado en la orden (aquí “hacer
”), se muestra un mensaje de error que debería de ser auto-explicativo. A menudo verá este mensaje de error si se equivoca al teclear un comando (por ejemplo, si hubiese tecleado “mkae love
” en lugar de “make love
”).
Antes de proseguir, deberíamos ver cómo salir del sistema. Desde la línea de comandos usaremos el comando para salir. Hay otras formas, pero esta es la más simple:
/home/diego$ exit
La primera vez que un usuario ingresa al sistema lo hará utilizando la contraseña asignada por el administrador, pero es altamente recomendable que la cambie de inmediato (además, se recomienda realizar este procedimiento de vez en cuando). El comando passwd
nos pedirá la contraseña actual y luego la nueva (dos veces, para validarla). Debemos tener cuidado de no olvidar la contraseña, ya que si esto ocurre, el administrador del sistema deberá modificarla por nosotros.
En la mayoría de los sistemas operativos (Unix incluido), existe el concepto de archivo, el cual es un conjunto de información al que se le ha asignado un nombre.
Ejemplos de archivo son un mensaje de correo, o un programa que puede ser ejecutado. Esencialmente, cualquier cosa almacenada en el disco es guardada en un archivo individual.
Los archivos son identificados por sus nombres. Por ejemplo, el archivo que contiene sus números telefónicos podría ser grabado con el nombre “telefonos
”.
Generalmente trataremos de utilizar letras minúsculas y sin acentos en los nombres de archivos y directorios.Estos nombres usualmente identifican el archivo y su contenido de alguna forma significativa para usted. No hay un formato estándar para los nombres de los archivos como lo hay en DOS y en otros sistemas operativos; en general estos pueden contener cualquier carácter (excepto “
/
”), y están limitados a 256 caracteres de longitud.
Con el concepto de archivo aparece el concepto de directorio. Un directorio es contenedor. Puede ser considerado como una “carpeta” que contiene muchos archivos diferentes. Tienen nombre con el que los podemos identificar y forman una estructura de árbol; es decir, pueden contener a otros directorios.
Un archivo puede ser referenciado por su nombre con camino, el cual esta constituido por su nombre, antecedido por el nombre del directorio que lo contiene. Por ejemplo, supongamos que diego
tiene un directorio de nombre articulos
que contiene tres archivos: historia
, ingles
y tesis
(cada uno de los tres archivos contiene información sobre tres de los proyectos en los que está trabajando). Para referirse al archivo ingles
, puede especificar su camino: articulos/ingles
Como podemos ver, el directorio y el nombre del archivo van separados por un carácter “/
”. Por esta razón, los nombres de archivo no pueden contener este carácter. Los usuarios de DOS encontrarán esta convención familiar, aunque en ese sistema operativo se usa el carácter “\
”.
Como hemos mencionado, los directorios pueden anidarse uno dentro de otro. Por ejemplo, supongamos que diego
tiene otro directorio dentro de articulos
llamado notas
, y dentro de ese directorio, tiene un archivo llamado enlaces
. El camino de este archivo sería: articulos/notas/enlaces
Por lo tanto, el camino realmente es la “ruta” (path) que se debe recorrer para localizar a un archivo. El directorio sobre un subdirectorio dado es conocido como el directorio padre. Aquí, el directorio articulos
es el padre del directorio notas
.
La mayoría de los sistemas Unix tienen una distribución de archivos estándar, de forma que los recursos y archivos puedan ser fácilmente localizados. Esta distribución forma el árbol de directorios, el cual comienza en el directorio “/
”, también conocido como “raíz” o “root”.
No debemos confundir el directorio “root” o “raíz” con el usuario “Directamente por debajo (dentro) deroot
” que es el administrador del sistema, ni con el directorio “home” de éste último, ubicado en “/root
”.
/
hay algunos subdirectorios importantes: /bin
, /etc
, /dev
y /usr
, entre otros. Estos a su vez contienen otros directorios con archivos 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 archivos. En los ejemplos anteriores, todos los archivos de diego
(como enlaces
y historia
) estaban contenidos en su directorio “home”. Usualmente, los directorios “home” de los usuarios cuelgan de /home
y son denominados con el nombre del usuario al que pertenecen. Por lo tanto, el directorio “home” de diego
es /home/diego
.
La siguiente figura muestra un árbol de directorio de ejemplo.
/ ___ bin |____ dev |____ etc |____ home ___ carlos | |____ diego ___ Mail | |____ articulos ___ notas | |____ cartas |____ lib |____ proc |____ tmp |____ usr ___ X11R6 |____ bin |____ lib |____ local ___ bin | |____ etc |____ man |____ src ___ linux |____ tmp
Las órdenes que teclee al intérprete de comandos son dadas en términos del directorio actual de trabajo, en donde estamos situados. Cuando un usuario entra al sistema, su directorio de trabajo se inicial es su directorio “home” (/home/diego
en nuestro caso). Cuando referencie a un archivo puede hacerlo con relación a su directorio de trabajo actual, en lugar de especificar el camino completo del archivo.
Veamos un ejemplo: diego
tiene el directorio articulos
, y articulos
contiene el archivo historia
.
Si deseamos ver el contenido de ese archivo, podemos usar la orden:
/home/diego$ cat /home/diego/articulos/historia
El comando cat
muestra el contenido del archivo. Pero como el directorio de trabajo actual es /home/diego
, podríamos habernos referido al archivo de forma relativa a su directorio de trabajo actual. La orden sería:
/home/diego$ cat articulos/historia
Por lo tanto, si un camino comienza (como articulos/historia
) con un carácter distinto a “/
”, el sistema supone que se está refiriendo al archivo con su posición relativa a su directorio de trabajo. Esto es conocido como “camino relativo”.
Por otra parte, si un camino comienza con el carácter “/
”, el sistema interpreta esto como el camino completo al archivo partiendo desde el directorio raíz (/
). Esto es conocido como “camino absoluto”.
Bajo bash
y tcsh
, dos de los intérpretes de comandos más utilizados, el directorio “home” puede ser referenciado usando el carácter de la tilde (“~
”). Por ejemplo, la orden:
/home/diego$ cat ~/articulos/historia
es equivalente a:
/home/diego$ cat /home/diego/articulos/historia
El carácter “~” es sustituido por el intérprete de comandos con el nombre del directorio “home“. El uso de la tilde es simplemente un atajo; no existe ningún directorio llamado “~”, sólo es una ayuda sintáctica proporcionada por el intérprete de comandos.