Documente Academic
Documente Profesional
Documente Cultură
DE MONTERREY
LABORATORIO DE SISTEMAS OPERATIVOS
Prctica 1
UNIX como usuario: Uso bsico de consola
Autor: Dr. Juan Arturo Nolazco
Co-autores: M.C. Jorge Villaseor, M.C. Roberto Aceves, Ing. Ral A. Fuentes Samaniego
Indice:
Por qu un sistema basado en UNIX?
Que se espera del alumno?
El Shell
Comandos bsicos: ls, cat, mkdir, rm...
Sintaxis
Tutoriales
Direccionamiento absoluto y relativo (path):
Redireccionamiento.
Ejemplos:
Pipes
Ejemplo:
Laboratorio:
Esta es la primera prctica del laboratorio de Sistemas Operativos en el ITESM Campus Monterrey.
Probablemente el alumno slo halla tenido tiempo en la prctica anterior de instalar algn Sistema
Operativo basado en UNIX como lo son las distribuciones GNU/Linux o Ubuntu y solo halla
manejado la interfaz grfica de usuario ( GUI) de estos sistemas que hoy en da son bastante
maduros y realizan bien su funcin de gestionar los recursos del sistema para el usuario de forma
transparente. Pues bien, este ambiente GUI no es el que nos interesa en esta prctica. El objetivo del
laboratorio es ensear al alumno el manejo intermedio a avanzado de sistemas basados en UNIX y
para ello deberemos de utilizar la forma ms tradicional en los que estos S.O. se utilizan: La interfaz
de comando.
CLI - Cualquier interfaz no grfica donde el usuario introduce los comandos, o ejecutar
programas mediantes comandos. Fueron la segunda interfaz usada en las computadoras (las
primeras fueron las tarjetas perforadas).
Shell - Aquellos programas que proveen una interfaz de usuario (CLI o GUI) para acceder a
los servicios del sistema operativo.
Terminal Virtual - Un programa que emula por completo el funcionamiento de la terminal
de computadora (es decir, la interfaz CLI de los S.O. ).
La terminal virtual es lo que la mayora de los S.O. modernos enfocados al usuario poseen. Slo los
S.O.s enfocado a servicios de servidores suelen omitir la interfaz grfica para no malgastar recursos
y por lo mismo manejan exclusivamente una terminal como interfaz de usuario (la cual puede crear
una terminal virtual de forma transparente cuando se usa para acceder a otro equipo ). El alumno al
final del curso ser capaz de la configuracin media de equipos mediante shells en terminales.
Porque el laboratorio esta enfocado a Linux y no por ejemplo en los S.O. de Microsoft que posee el
mercado mundial de sistemas para el hogar y una parte de los sistemas empresariales; o incluso de
Apple que empieza a tomar una posicin fuerte en el mercado de usuarios mundial? Pues bien, la
razn radica primero en la importancia de UNIX/Linux como base de muchos otros sistemas
operativos tales como Android, IOS, OS/X entre otros y como base de Apache, el software de
servidor que se utiliza en la gran mayora de los servidores de pginas web; y segundo porque se trata
de un proyecto de cdigo abierto y por lo mismo es completamente accesible para el alumno para
generar ingenieria inversa en una o ms de sus partes y realizar modificaciones si lo considera till
para su aprendizaje. En cambio los otros S.O son propietarios y sus elementos claves estn ocultos a
la educacin (al menos sin un contrato de confidencialidad).
Pueden hallar de su interes el video de Richard M. Stallman donde habla de la importancia del uso
del Software Libre en el mbito educativo de una duracin aproximada de 11 minutos.
Este documento por lo mismo no entrar a fondo en cada uno de los comandos que mostrar pero s
dar los elementos bsicos para poder comprenderlos y acceder a las herramientas que ms le pueden
servir al alumno.
El Shell
Durante todo el laboratorio el alumno tiene libertad de utilizar diferentes S.O. GNU/Linux (y hasta
cierta medida puede utilizar el cada vez ms popular Mac OS X) y aunque el laboratorio fue realizado
considerando principlamente el S.O. Ubuntu, es posible en la mayora de las prcticas utilizar otras
distribuciones como Debian, Red Hat, Fedora, Arch-Linux, Gentoo entre otros. (S.O. basados en
BSD es preferible evitarlos) as que omitiremos el tutorial para acceder a la terminal virtual pero si
esta teniendo problema hallando el acceso a la terminal desde la GUI una busqueda rapida en Google
es todo lo que necesita.
Lo que si es un hecho es poder interpretar lo que aparece en la terminal virtual cuando esta se abre.
Muy seguramente su terminal desplegara algo similar a la siguiente figura:
La primera parte marcada con el cdigo 1 representa al usuario que est registrado en esa terminal.
El recuadro con el nmero 2 representa a la mquina que esta ejecutando la terminal y lo que esta
despues del recuadro dos y entre el smbolo $ es el directoio en el que se encuentra el usuario en el
momento de ejecutar el comando ( ~ es una abreviacin de /home/<user> ). Todo lo que est a la
derecha de este cuadro ( en el ejemplo el recuadro nmero 3) son comandos introducidos por el
usuario. Las lneas que no inician con el nombre de usuario son lneas arrojadas por comando LS.
Este shell llamado Bash es uno de los ms populares en la actualidad pero no necesariamente el
nico, por ejemplo la siguiente ilustracin muestra el primer shell de sistemas UNIX denominado
Bourne (Sh):
Notaran que el shell solo despliega el smbolo $ y para poder obtener la informacin que el BASH
despliega es requerido utilizar 3 comandos por separado (las lneas sin este smbolo son las respuesta
de los comandos).
en S.O. Ubuntu).
touch: Actualiza el timestamp de un archivo y si no existe el archivo lo crea.
Cada uno de estos comandos tiene ciertas opciones y/o parmetros que sirven para modificar el
funcionamiento del comando. Estos, as como la descripcin del comando se puede encontrar en los
manuales ejecutando el comando man <comando>. Cuando estamos en el man podremos navegar
utilizando las flechas del teclado y para salir del mismo presione la tecla q.
Tip: Si usted busca ayuda en Internet probablemente termine dirigido a una copia de dicho
manual.
Cuando se crea un archivo UNIX asume que se trata de un archivo de texto as que tan pronto es creado
se puede editar con un Editor de Texto. Existe una gran variedad de editores, entre ellos estn los
basados en consola: nano, vim, emacs, ed, jed, y los que utilizan una interfaz grfica: gvim, gedit,
kate, jedit, xedit etc. Puede utilizar cualquiera que tenga disponible aunque los resultados sern
entregados siempre mediante interfaces de lnea de comandos.
Sintaxis
Todos los comandos en todos los S.O.s tienen una cierta sintaxis a seguir y por lo mismo se le invita al
usuario siempre revisar el man del comando para revisar la sintaxis de cada uno de los comandos que
estaremos utilizando durante el laboratorio (le podemos asegurar que incluso los instructores ms
experimentados tendrn que realizarlo durante el laboratorio).
Lo que es importante es entender la escritura de dicha sintaxis , por ejemplo la sintaxis del comando
rm es la siguiente:
rm [OPTIONS]... FILE...
La primera parte es el comando (obviamente) la segunda parte son las opciones (argumentos) pero
observen que estan entre corchetes estos corchetes quieren decir que se tratan de algo opcional (Es un
comando que puede no necesariamente requerir opciones) los tres puntos suspensivos que conforman
la opcin es una forma abreviada de decir uno o ms opciones. El segundo elemento que recibe el
comando es FILE en este caso no hay corchetes por lo que es obligatorio colocar el nombre de un
archivo (En algunos casos se puede hallar como <FILE> que viene siendo similar al decir que es
campo obligatorio pero su valor difiere) y al venir acompaado de ... tambin significa que puedes
colocar uno o mas archivos de entrada.
Otro ejemplo lo podemos apreciar con el comando PWD (utilizado en la figura 2):
Un ejemplo algo ms complejo sera con el comando IFCONFIG (que en la sesin 4 lo veremos ms
a fondo) cuya sintaxis es las siguiente:
ifconfig [interface]
ifconfig interface [aftype] options | address
Aqui notaran que despliega dos lneas, esto es porque hay dos formas distintas de usar el comando. En
el primero acepta de forma opcional una interfaz y en la segunda se trata de configurar una interfaz
en particular.
Tutoriales
Una de las enormes ventajas de un sistema de cdigo abierto es que existen (usualmente) una gran
variedad de lugares de donde tomar informacin y muchos mas pueden unir esfuerzos en crear
excelentes sitios. Algunos de ellos que les pueden servir durante el transcurso del laboratorio son:
- Basic Linux Commands:
http://www.comptechdoc.org/os/linux/usersguide/linux_ugbasics.html
- UNIX Tutorial for Beginners (Tutorial One, Two & Three):
http://www.ee.surrey.ac.uk/Teaching/Unix/index.html
- Listado de todos los comandos
http://www.ss64.com/bash/
Lo que es importante es recalcar que todos los directorios poseen dos directorios lgicos claves que
son: . (Punto) y .. (Punto, Punto) el primero se trata de representar al directorio actual y el
segundo al directorio padre y al ser elementos lgicos pueden ser vlidos como argumentos para uno o
ms comandos. Esto se puede apreciar con la siguiente serie de comandos ejecutados:
La primera ejecucin de LS se hace sin argumentos as que despliega el directorio actual, la segunda
ejecucin del comando LS se hace con un argumento: El directorio lgico . que viene siendo el
directorio actual. El uso del comando pwd es para ver donde nos encontramos ( el directorio de cada
usuario es representado en el bash con el smbolo ~ ) En este caso se vuelve a ejecutar ls pero en esta
ocasin es al directorio lgico .. del directorio lgico .. (es decir, desplegamos el directorio padre del
directorio padre del actual).
El anterior ejemplo sirve para plasmar algo ms: la definicin de Path o camino, que es la forma en
que se apunta a un archivo ( recuerde que todo en Linux es un archivo). Este path puede ser
referido de dos formas: Absoluta o relativa y en el caso del sistema de archivos de Linux al ser
absoluto se identifica cada ramificacin con el smbolo ( / ) tratndose la primera vez del directorio
root. Por ejemplo:
/
/home/
/home/rfuentes/Documentos/Doc1.doc
El primero es el directorio raz del sistema, el segundo es el directorio Home (Que se encuentra a partir
del directorio raz), el tercero es un archivo llamado Doc1.doc que se halla en
/home/rfuentes/Documentos/ . Ahora bien, dijimos que los paths podan ser referidos de forma
absoluta y relativa y el caso absoluto es justamente estos 3 ejemplos, no hay duda de su ubicacin en
el sistema pero el segundo caso depende desde donde nos encontramos, tomemos como base la
siguiente serie de comandos:
Observen que ls Documentos/ no cumple con un path absoluto como entrada al comando y solo la
primera vez despleg contenido. Que cambio? el lugar en donde nos encontramos al momento de
ejecutar el comando. La primera vez estbamos en /home/rfuentes donde efectivamente existe la
carpeta Documentos/ pero en las siguientes movimientos hubo error. Incluso la penltima instruccin
tiene un error tpico cuando uno se esta acostumbrado a usar direcciones lgicas: /Documentos/ hace
referencia a una carpeta Documentos en el directorio Root (Es decir una direccin absoluta en vez de
relativa).
Por ltimo la direccin del directorio del usuario /home/<user> es demasiado utilizada por lo que
existe una forma particular de llamarla y utilizarla en el direccionamiento, esta forma es '~'.
Redireccionamiento.
Al correr un programa automticamente se abren tres archivos denominados conexiones estndar y se
pueden apreciar en la siguiente figura:
La entrada es de donde entran los datos (Argumentos) al programa, la salida es donde se despliegan
los resultados del programa y el error es donde se despliegan mensajes del S.O. cuando ocurren
ciertos tipos de errores en el programa. La entrada estndar se refiere a la entrada por defecto de los
programas y este es el teclado mientras que los otros dos estndares son el monitor.
Los 3 archivos pueden ser desviados hacia un archivo y en el caso de la entrada desde un archivo. La
redireccin de salida deshace la conexin lgica entre el terminal y el programa. En la siguiente imagen
la salida va a un archivo:
Para especificar la redireccin de la salida estndar, al final de una instruccin se deben agregar el
smbolo > y el nombre del archivo o dispositivo al que se desea redireccionar, por ejemplo para
dirigir la salida del comando ls a un archivo de nombre archivos se podra utilizar el siguiente
comando:
- Si se utiliza el smbolo ">>" entonces se: "anexa la salida al final del siguiente archivo". Si el
archivo no existe se crea.
La redireccin de entrada deshace la conexin lgica entre el teclado y el programa. La entrada viene
de un archivo y se puede apreciar en la siguiente figura:
Para ello utilizamos el smbolo "<" que significa: "toma la entrada del siguiente archivo en vez de
tomarlo de la terminal".
Si el comando encuentra problemas, despliega mensajes de error en la terminal, ya que el error estndar
sigue conectado. Para capturar los errores de un programa en un archivo, tambin se puede redirigir el
error estndar.
El smbolo "2>" significa "coloca el error estndar en el siguiente archivo en lugar de la terminal".
Ejemplos:
El siguiente comando agrega el archivo seccion1.4 al archivo seccin1 al desviar la salida estandar de
Cat al segundo archivo.
user@localhost home $ cat seccion1.4 >>section1
La siguiente linea guarda el listado del directorio en el archivo temp, el smbolo ; es par separar el
comando ls de wc. WC hace conteo de las lneas del archivo temp Ejemplo:
En este caso se intenta guardar el contenido de un folder inexistente en un archivo y el error aparece,
en el segundo intento el error es desviado a Archivo y despus desplegado con el comando CAT.
Pipes
Si recordamos que todo en UNIX es un archivo, incluyendo los comandos podemos asumir que
podemos redireccionar estas vias estndares a hacia o desde otros comandos. Para realizarlo se hace
mediante el uso de "pipe" (tubera) permitiendo conectar la salida de un programa a la entrada de otro
programa SIN ningn archivo temporal.
Ejemplo:
user@localhost home $ who
operator tty0 Jul 15 17:44
al702782 pts/1 Aug 05 19:26 (a estas maquinas)
al194834 pts/2 Aug 05 19:29 (131.178.74.107)
al159884 pts/4 Aug 05 19:13 (a estas maquinas)
al333793 pts/7 Aug 05 19:19 (131.178.74.149)
al172871 pts/10 Aug 05 18:35 (131.178.82.22)
amartine pts/12 Aug 05 19:45 (tserv.mty.itesm.)
jnolazco pts/13 Aug 05 19:55 (ciencias.mty.ite)
user@localhost home $ who | wc -l
8
Los pipelines son una de las herramientas ms poderosas de los sistemas basados en UNIX y en la
mayora de las prcticas haremos un fuerte uso de ellos.
Laboratorio:
Para crear y editar archivos utilice el editor que le parezca ms conveniente. Si no conoce algn editor
se recomienda utilizar gedit en modo grfico o nano en consola.
Para la respuesta de esta prctica se contestara en el formulario al que se accede desde esta liga
Asegrese que en el grupo que seleccione este indicado el semestre actual (de lo contrario corre el
riesgo de tener que volver a hacerlo).
1. Vea el directorio en el que est posicionado. Para esto utilice el siguiente comando: pwd.
2. En su carpeta de usuario cree dos directorios. Al primero asgnele el nombre primero y al
segundo el nombre de segundo .
3. Cree directorios dentro de estos dos hasta tener la siguiente estructura:
~
|
|-- primero
| |-- primero1
| |-- primero2
| |-- primero21
| -- segundo
|-- segundo1
|-- segundo2
16. Vea el archivo arch1 utilizando el comando cat mediante direccin absoluta.
17. Despliegue en pantalla la ltima lnea del archivo arch1 utilizando el siguiente
comando: tail -1 arch1
18. Despliegue en pantalla la primera lnea del archivo arch1 utilizando el siguiente
comando: head -1 arch1
19. Utilizando los comandos head y tail seleccione la segunda linea del archivo arch1.
20. Compare los archivos arch1 y arch2 utilizando los comandos cmp y diff.
21. Investigue para que sirve cada uno de estos comandos, use el comando whatis o el
comando man cmd, indquelo aqu, tambin indique que comandos utiliz para comparar
ambos archivos:
22. Crear dentro del directorio primero/primero1/ una liga al directorio segundo/segundo2,
nmbrela mi_dos1, para sto puede utilizar el siguiente comando: ln -s
~/segundo/segundo1 ~/primero/primero1/mi_dos1