Sei sulla pagina 1di 14

INSTITUTO TECNOLGICO Y DE ESTUDIOS SUPERIORES

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:

Por qu un sistema basado en UNIX?


UNIX es bsicamente un sistema operativo simple, pero debes de ser un genio
para entender la simplicidad - Dennis Ritchie co-creador de UNIX y fundador
del lenguaje C (Q.E.P.D.)

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.

Por lo mismo introduciremos al alumno al concepto de interfaz de lnea de comandos (CLI),


shell y terminal virtual que hoy en da son utilizados de forma similar (mas no necesariamente
de forma correcta).

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.

Que se espera del alumno?


Este laboratorio es particularmente para instruir al alumno en estos sistemas, por su simpleza y
apertura al aprendizaje pero el alumno no debe de suponer que slo se tratara de copiar y pegar
comandos con sus argumentos. Se espera que el alumno lea la informacin de los comandos
(MAN pages) para decidir que argumentos utilizar de acuerdo a lo que se le solicita en el
laboratorio. Si el alumno despus de la lectura tiene dudas respecto como utilizarl el comando
puede contactar al instructor en turno sea por correo o en su presencia (El instructor deber de ofrecer
ms informacin).

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).

Comandos bsicos: ls, cat, mkdir, rm...


Bueno, ya tenemos una terminal abierta y ahora es cuestin de aprender a utilizarla. Iniciaremos con lo
ms bsico: Poder movernos dentro del sistema , poder desplegar el contenido de folders y archivos y
ser capaz de modificarlos. Para ello estaremos trabajando en la carpeta del usuario ( /home/<user> ) ya
que slo en ella tenemos total libertad (en futuras prcticas haremos uso del usuario Root para
administrar otros recursos).

ls: Lista archivos y directorios


mkdir: Crea un directorio.
rmdir: Borra un directorio. Nota: el directorio debe de estar vaco.
cd: Cambia el directorio actual a otro.
less: Permite visualizar un documento de texto.
cat: Lee, concatena y despliega archivos de texto en stdout.
head: Despliega en stdout las primeras lneas de un archivo de texto.
tail: Despliega en stdout las ltimas lneas de un archivo de texto.
rm: Remueve archivos.
pwd: Imprime la direccin del directorio actual.
tree: Muestra la estructura de rbol de los directorios. (No instalado por defecto

en S.O. Ubuntu).
touch: Actualiza el timestamp de un archivo y si no existe el archivo lo crea.

Curiosidad: Notara que gran parte de estos comandos despliegan texto en


diferente formas. Tal vez en sistemas modernos sea inecesario porque cuenta
con una barra desplazadora en la terminal virtual, pero cuando no usamos
las virtuales no contamos con tal recurso, si el dato se sale de la pantalla el
administrador deber de volver a ejecutar el programa.

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):

pwd [-L | -P]

El smbolo | Indica un operador OR o en otras palabras puedes introducir -L -P y de forma


opcional (porque estn entre corchetes) pero no existe ningn otro argumento posible para este
comando.

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/

Direccionamiento absoluto y relativo (path):


El sistema de archivos en linux se organiza en forma de rbol. Hay un directorio raz del sistema, y
cada usuario tiene un directorio personal home que es el espacio asignado para su uso personal. El
usuario tiene la autoridad de administrar y disear la organizacin de sus archivos y directorios a partir
del directorio "home". Respecto a los dems directorios estos quedan bajo el resguardo del Sistema
Operativo y los maneja para la instalacin de aplicaciones, montaje de dispositivos, repositorios entre
otras cosas. En lo general la siguiente figura da una idea de esta estructura y el uso de cada uno de los
directorios importantes:

Los sistemas basados en GNU/Linux (generalmente llamados Linux) mantienen la filosofa en la


que "todo es un archivo", esto significa que un dispositivo cualquiera, el teclado, mouse, monitor,
tarjeta de video, etc as como las ligas, y los mismos archivos tienen la misma representacin dentro del
sistema de archivos. ESto para el usuario novato se traduce que vera drivers, archivos, atajos y
carpetas de formas similar. Por ejemplo /media/Flash/ podra referirse a un dispositivo de memoria
Flash montado en el equipo ( o cualquier otro tipo de dispositivo extrable), mientras que /home/Flash/
se refiere a una carpeta o archivo llamado Flash en sus archivos personales y la nica diferencia es
su ubicacin (como se aprecia en la figura anterior).

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:

user@localhost home $ ls > archivos


- El smbolo ">" significa: "coloca la salida en el siguiente archivo, en vez de la terminal". Si el
archivo existe se reemplaza el contenido, y si no existe se crea.

- 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

El siguiente comando agrega una nota al archivo notas

user@localhost home $ cat >> notas


Llevar leche cuando regrese del trabajo
<Ctrl-D>

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:

user@localhost home $ ls > temp ; wc -l < temp


28

El siguiente ejemplo es direccionamiento de error al usuar el comando LS


user@localhost:~$ ls /Documentos > Archivo
ls: cannot access /Documentos: No such file or directory
user@localhost:~$ ls /Documentos 2> Archivo
rfuentess@Muud-Linux:~$ cat Archivo
ls: cannot access Documentos: No such file or directory

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.

user@localhost home $ comando1 | comando2

corre comando1 La entrada llega a traves del "pipe".


la salida se salida a la pantalla.
enva a cmd2.

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

6. Ejecute los comandos ls -R ~/primero y ls -R ~/segundo


7. Crear el archivo: primero/primero1/arch1 mediante el comando cat que contenga la
siguiente informacin:
Juan corrio muy rapido
Pedro brinco muy alto
Mario bailo muy bonito
Arnulfo tambien corrio muy rapido
7. Dirigase al directorio donde se halla el archivo recien creado
8. Alimente el comando cat arch1 arch1 arch1 | wc
9. Alimente el comando more arch1 | wc
10. Por que difiere la salida de los ultimos dos pasos?
11. Utilizando comandos de UNIX copie el archivo arch1 al directorio segundo/segundo1
12. Cmbiese al directorio segundo/segundo1
13. Escriba el siguiente comando mv arch1 arch2
~
|-- primero
|
|
| `--primero21
`-- segundo
|-- segundo1
|
`-- segundo2

15. Mueva el archivo primero/primero1/arch1 al directorio segundo/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

1. Cual fue la palabra _______________

18. Despliegue en pantalla la primera lnea del archivo arch1 utilizando el siguiente
comando: head -1 arch1

1. Cual fue la linea_______________

19. Utilizando los comandos head y tail seleccione la segunda linea del archivo arch1.

1. Como lo hizo? ____________________________

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

1. Comprubelo con el siguiente comando: ls -la primero/primero1

23. Ejecute la siguiente lineals -R ~/primero ; ls -R ~/segundo


24. Borre el directorio primero y su contenido, para ello investigue en la ayuda como
hacerlo usando el comando rm de forma recursiva, es decir, sin tener que borrar el contenido
primero y despus el directorio vacio.
25. Borre el directorio segundo y su contenido.
Lab de Sistemas Operativos: Dr. Juan Arturo Nolazco, Roberto Aceves, Jorge Villaseor. 2010.

[1]Path Definition. The Linux Information Project. 2007. http://www.bellevuelinux.org/path.html

Potrebbero piacerti anche