Está en la página 1de 29

Este material es un breve resumen del

contenido de la Clase Sistemas Operativos I

Manual
básico
operativos I
Guía de estudio v1.6.3
2021

Carlos Amador
Sistemas Operativos I, Primer Parcial

Contenido
1. Introducción........................................................................................................................ 2
2. Unidad I ................................................................................................................................ 2
Introducción .................................................................................................................................... 2
Las rutas absolutas .......................................................................................................................... 3
Las rutas relativas ............................................................................................................................ 4
Fechas de lanzamiento .................................................................................................................... 5
Línea de tiempo del Linux ............................................................................................................... 7
Distribuciones.................................................................................................................................. 8
3. Arquitectura ........................................................................................................................ 8
4. Comandos básicos ............................................................................................................ 9
Ejemplo1 1 parcial ......................................................................................................................... 15

1
Sistemas Operativos I, Primer Parcial

1. Introducción
El siguiente trabajo representa el material de estudio a utilizar para el curso de sistemas
operativos I, aquí se encuentra reunida de forma resumida la información básica para el
desarrollo de la clase, se aclara que de igual forma el catedrático podrá proporcionarles
otros documentos de referencia o direcciones urls que les permitan enriquecer su
fuente bibliográfica.

En este material hablaremos de los elementos básicos a manejar de Linux, se aclara que
el material está diseñado para aquellas personas que no han tenido interacción alguna
con Linux como sistema operativo.

2. Unidad I
Objetivos de Aprendizaje

Al finalizar esta unidad, el alumno será capaz de:


• Describir qué es Linux?
• Describir la Arquitectura de Linux
• Aplicar los Comandos básicos de Gestión de Ficheros

Introducción
Un sistema de computadora es un dispositivo electrónico programable que puede almacenar,
recuperar y procesar datos. Ejecuta un conjunto de instrucciones llamado programa.
La ejecución del programa da al usuario final el resultado deseado. Un ejemplo de ejecución de un
programa es cuando se trabaja con una calculadora en un sistema operativo Windows.

Una computadora es capaz de realizar múltiples tareas, tales como:


• Ejecutar programas de usuario
• Conectar computadoras en una Red de Área Local (Local Área Network – LAN)
• Compartir los recursos
• Controlar su hardware

Para que una computadora sea capaz de hacer todo esto, requiere de un programa especial
llamado sistema operativo. El sistema operativo reside en el disco duro de la computadora y actúa
como un puente entre los programas de usuario y los programas que controlan le hardware de la
computadora.

El sistema operativo trabaja principalmente en segundo plano. Se encarga de los componentes


hardware de una computadora, además de asegurar el inicio y ejecución de diversos programas.
También se encarga de los datos almacenados en los dispositivos de almacenamiento de la
computadora.

2
Sistemas Operativos I, Primer Parcial

El sistema operativo es el responsable de las siguientes funciones del sistema de computadora:


• Arrancar o iniciar la computadora
• Actuar como interfaz entre el CPU y el mundo externo
• Coordinar los dispositivos del sistema
• Coordinar las aplicaciones o programas en ejecución

El sistema operativo controla todo el trabajo de la computadora. Sin el, la computadora solo es un
montón de circuitos electrónicos.

La figura ilustra el rol de un sistema operativo

Linux es un núcleo de sistema operativo libre tipo Unix. Es uno de los principales ejemplos de
software libre. Linux está licenciado bajo la GPL v2 y está desarrollado por colaboradores de todo
el mundo.

También diremos que Linux es un sistema jerárquico de archivos los cuales se desprenden de la
única unidad contenedora existente llamada raíz, / (pleca), root (no confundir con el usuario root),
a diferencia de Windows que puede poseer más de una unidad contenedora y esta usualmente
reciben el nombre de C:,D:,E:,F:, etc..

En la mayoría de los sistemas operativos y sistemas de archivos una ruta se puede expresar en
forma relativa (o parcial) o en forma absoluta:

Las rutas absolutas señalan la ubicación de un archivo o directorio desde el directorio raíz
del sistema de archivos. Por ejemplo es una ruta absoluta /home/usuario/Notas.doc que señala la
ubicación de Notas.doc desde la raíz del sistema de archivos.

Esta sirve para ir a cualquier directorio desde cualquier parte en que estemos. Cuando algo comienza con /,
representa una ruta absoluta.

3
Sistemas Operativos I, Primer Parcial

La imagen muestra el ejemplo de una ruta absoluta: /root/Unicah/Sistemas/Operativos.


Las rutas relativas señalan la ubicación de un archivo o directorio a partir de la posición
actual del sistema operativo en el sistema de archivos. Por ejemplo es una ruta relativa usuario/
Notas.doc que señala al archivo Notas.doc dentro del directorio usuario en la ubicación actual. En
sistemas tipo UNIX, la ruta ~/ es una ruta relativa que lleva al directorio personal del usuario que
ha insertado la ruta relativa; por ejemplo, si el usuario juan tiene una imagen en su directorio
personal, esta imagen podría tener dos rutas de acceso, una relativa y una absoluta:

La absoluta: /home/usuario/Notas1parcial.xls

La relativa: usuario/Notas1parcial.xls

Cuando algo no comienza con /, representa una ruta relativa o parcial.

4
Sistemas Operativos I, Primer Parcial

La imagen muestra el ejemplo de una ruta relativa o parcial: Unicah/Sistemas/Operativos.

Fechas de lanzamiento
Versión Fecha Nota
0.01 17 de septiembre de 1991 Initial Public Release
0.02 5 de octubre de 1991
0.11 8 de diciembre de 1991
0.95 7 de marzo de 1992
1.0.0 13 de marzo de 1994 Primera versión estable
1.1.0 6 de abril de 1994 Versión de desarrollo
1.2.0 6 de marzo de 1995
1.3.0 12 de junio de 1995 Versión de desarrollo

5
Sistemas Operativos I, Primer Parcial

2.0.0 9 de junio de 1996


2.1.0 30 de septiembre de 1996 Versión de desarrollo
2.2.0 26 de enero de 1999
2.3.0 11 de mayo de 1999 Versión de desarrollo
2.4.0 4 de enero de 2001
2.5.0 23 de noviembre de 2001 Versión de desarrollo
2.6.0 18 de diciembre de 2003
2.6.25 16 de abril de 2008
2.6.30 10 de junio de 2009
2.6.35 1 de agosto de 2010
3.0 22 de julio de 2011
3.0 27 de julio de 2012
3.18 7 de diciembre de 2014 Versión estable
3.19 8 de febrero de 2015
4.0 12 de abril de 2015
4.1 22 de junio de 2015
4.2 30 de agosto de 2015
4.3 1 de noviembre de 2015
4.4 10 de enero de 2016
4.5 13 de marzo de 2016
4.6 15 de mayo de 2016
4.7 24 de julio de 2016
4.8 25 de septiembre de 2016
4.9 11 de diciembre de 2016
4.10 30 de abril de 2017
4.11 30 de abril de 2017
4.12 2 de julio de 2017
4.13 3 de septiembre de 2017
4.14 12 de noviembre de 2017
4.15 28 de enero de 2018
4.16 1 de abril de 2018
4.17 3 de junio de 2018
4.18 12 de agosto de 2018

6
Sistemas Operativos I, Primer Parcial

4.19 22 de octubre de 2018


4.20 23 de diciembre de 2018
5.0 3 de marzo de 2019
5.0.5 27 de marzo de 2019 Versión estable

Línea de tiempo del Linux

7
Sistemas Operativos I, Primer Parcial

Distribuciones

Una distribución Linux (coloquialmente llamada distro) es una distribución de software basada en
el núcleo Linux que incluye determinados paquetes de software para satisfacer las necesidades de
un grupo específico de usuarios, dando así origen a ediciones domésticas, empresariales y para
servidores. Por lo general están compuestas, total o mayoritariamente, de software libre, aunque
a menudo incorporan aplicaciones o controladores propietarios.

Además del núcleo Linux, las distribuciones incluyen habitualmente las bibliotecas y herramientas
del proyecto GNU y el sistema de ventanas X Window System. Dependiendo del tipo de usuarios a
los que la distribución esté dirigida se incluye también otro tipo de software como procesadores
de texto, hoja de cálculo, reproductores multimedia, herramientas administrativas, etcétera. En el
caso de incluir herramientas del proyecto GNU, también se utiliza el término distribución
GNU/Linux.

Existen distribuciones que están soportadas comercialmente, como Fedora (Red Hat), openSUSE
(Novell), Ubuntu , Mandriva, y distribuciones mantenidas por la comunidad como Debian y
Gentoo. Aunque hay otras distribuciones que no están relacionadas con alguna empresa o
comunidad, como es el caso de Slackware.

Arquitectura
Cuando se habla de arquitectura nos referimos a la forma en como está construida una
distribución en particular todas las distribuciones utilizan la estructura descrita en este grafico
como base arquitectura a emplear, lo que
hace que unas personas prefieran una
distribución a otra es la manera en cómo
son construidas esas distribuciones.

Cada día es más grande el número de


distribuciones existentes en el mercado
alguna de ellas es para propósitos generales
y otras para propósitos específicos, para el
desarrollo de nuestro curso emplearemos
Lubuntu.

Ahora hablemos de los componentes de


esta estructura general:

8
Sistemas Operativos I, Primer Parcial

• Linux no requiere de un equipo de última generación para su configuración mínima. Sólo requiere de:
• Un procesador 386SX o superior
• 4 MB de RAM (se recomienda tener 8 MB)
• un controlador de disco duro y un disco duro con 20 MB de espacio libre (se recomienda tener 100 MB) (en la práctica, Linux se puede ejecutar
desde un simple disquete)
• una unidad de CD-ROM
Hardware • Con respecto a dispositivos periféricos , es mucho más probable que Linux admita los componentes de hardware comúnmente disponibles en el
mercado.

• En informática, un núcleo o kernel (de la raíz germánica Kern) es un software que actúa de sistema operativo.Es el principal responsable de
facilitar a los distintos programas acceso seguro al hardware de la computadora o en forma más básica, es el encargado de gestionar recursos, a
través de servicios de llamada al sistema. Como hay muchos programas y el acceso al hardware es limitado, también se encarga de decidir qué
programa podrá hacer uso de un dispositivo de hardware y durante cuánto tiempo, lo que se conoce como multiplexado. Acceder al hardware
directamente puede ser realmente complejo, por lo que los núcleos suelen implementar una serie de abstracciones del hardware. Esto permite
kernel esconder la complejidad, y proporciona una interfaz limpia y uniforme al hardware subyacente, lo que facilita su uso al programador.

• Puesto que un sistema operativo no sirve de mucho sin aplicaciones que se ejecuten en el mismo, el sistema operativo de linux provee varias
aplicaciones populares existentes para GNU/Linux, por ejemplo:
• Bases de datos relacionales Multiusuario
• PostgreSQL.
• MySQL (multiplataforma).
aplicaciones
base • Bases de datos relacionales Monousuario
• OpenOffice Base (multiplataforma, necesita Java).

Biblioteca de Funciones
Este punto hace referencia a
Entorno Grafico
bibliotecas de programas en Shell Texto
En Linux se puede elegir varios entornos gráficos, los
Linux,Esto incluye las principales son:
bibliotecas estáticas, librerías
compartidas, bibliotecas KDE: Es un entorno de escritorio con un aspecto
similar al de Windows con muchas funcionalidades El shell es simplemente un programa
dinámicamente cargado. incorporadas. Ideal para PCs que cuentan con un
que lee los comandos que se teclean y
mínimo de 128 Mb de memoria RAM
los convierte en una forma mas
GNOME: Es la principal alternativa existente a KDE
entendible para el sistema Unix/Linux.
para quienes están acostumbrados a Windows. Tambien incluye algunas sentencias
Seguramente GNOME es una buena opción para
quienes prefieren un entorno menos barroco que basicas de programacion que
KDE, aunque quizás posea a primera vista una permiten: tomar desiciones, realizar
interfaz menos familiar para los usuarios de ciclos y almacenar valores en variables.
Windows.

Comandos básicos
A continuación, enumeraremos y explicaremos la lista de comandos básicos a emplear para este
primer parcial. (Para efectos de aprendizaje se irá hablando de cada comando y haciendo un par
de ejercicios prácticos en el laboratorio de clases)

a. man comando

Todos los manuales de Linux están dentro del propio sistema operativo, y este comando permite
acceder a la información correspondiente al comando.

Por ejemplo, con

9
Sistemas Operativos I, Primer Parcial

man who aparecerá por pantalla y de forma formateada por páginas, la explicación del comando
who. Se puede navegar a través de estas páginas con los cursores del teclado, y presionando q
para salir.

man ls: muestra la información sobre el comando de visualización de la pantalla.


man dir: muestra la información sobre el comando que contiene los directorios.
man mkdir: muestra la información sobre la creación de archivos.
man rmdir: muestra la información sobre borrar ficheros.
man pico: muestra la información sobre el uso de este editor de texto.
Linux Función DOS Ejemplo
Muestra la documentación
man [nombreComando] de un determinado help man mkdir
comando.

b. Clear

Este comando limpia la consola.

Linux Función DOS Ejemplo


clear Borra la pantalla. cls clear

c. Comando pwd (Situación actual)

El comando pwd (print working directory) visualiza o imprime la ruta del directorio en el que nos
encontramos en este momento. Este comando es uno de los pocos que no tiene opciones y se
utiliza escribiendo simplemente pwd , como lo vimos en la imagen muestra el ejemplo de una ruta
absoluta.

d. Comando cd: (Cambio de directorio)

Este comando permite cambiar de directorio a partir del directorio actual de trabajo. Por ejemplo,
cd /home/Pedro En este ejemplo pasamos del directorio actual de trabajo al nuevo directorio
/home/Pedro, que será desde ahora nuestro nuevo directorio. cd directory Nos traslada al
subdirectorio directory (que deberá existir como subdirectorio en el directorio actual).

Con cd .. Retrocedemos un nivel en la jerarquía de directorios. Por ejemplo, si estamos en


/home/Pedro y usamos este comando, pasaremos al escalafón inmediatamente superior de la
jerarquía de directorios, en este caso a /home. Nota: al contrario que en MS-DOS en Linux no
existe la forma cd.. sin espacio entre cd y los dos puntos.

Con cd Nos sitúa nuevamente en el directorio personal del usuario.

10
Sistemas Operativos I, Primer Parcial

e. Comando mkdir (Creación de subdirectorios)

Este comando (make directory) permite a cada usuario crear un nuevo subdirectorio, y se emplea
de la siguiente forma: mkdir subdir, donde subdir es el nombre del directorio que se va a crear.

f. Comando rmdir (Borrado de subdirectorios)

Este comando borra uno o más directorios del sistema (remove directory), siempre que estos
subdirectorios estén vacíos. Por ejemplo: rmdir subdir, donde subdir es el nombre del directorio
que se va a eliminar.

g. Comando ls (listado del contenido de directorios)

Una de las acciones más habituales a la hora de trabajar es mostrar el contenido de un directorio,
para lo cual existen herramientas gráficas. No obstante el shell incluye un programa con este
mismo fin: ls.

ls muestra los nombres de los ficheros y subdirectorios contenidos en el directorio en el que se


está. Sólo se obtienen los nombres de los ficheros, sin ninguna otra información.

ls -a Muestra todos los ficheros incluyendo algunos que ordinariamente están ocultos para el
usuario (aquellos que comienzan por un punto). Se recuerda que el fichero punto( . ) indica el
directorio actual y el doble punto ( .. ) el directorio padre, que contiene, al actual.

ls -l Esta es la opción de lista larga: muestra toda la información de cada fichero incluyendo:
protecciones, tamaño y fecha de creación o del último cambio introducido.

h. rm

rm es una orden de Unix usada para eliminar archivos y directorios del sistema de archivos. Esta
orden debe utilizarse con cautela, ya que puede ser muy destructiva, debido a que, al momento de
ser llamada, por omisión borra los archivos sin pedir confirmación.
Proviene de la palabra remove que significa "borrar" en inglés.

Parámetros rm:
-r, Procesa subdirectorios de forma recursiva.
-i, Pide confirmación para cada borrado.
-f, Forzado, ignora archivos no existentes y elimina cualquier aviso de confirmación.

En ocasiones se crea un alias con el nombre "rm", redirigido a "rm -i", con el fin de evitar borrados
accidentales. Si un usuario desea borrar varios archivos sin confirmación, se puede cancelar
manualmente la confirmación con el modificador -f: "rm -f"

"rm -rf" (con variantes, "rm -rf /", "rm -rf *", entre otras) son frecuentemente usados en bromas y
anécdotas sobre desastres en Unix. Esta variante de la orden si es ejecutada por el administrador,
puede causar que todos los contenidos del sistema de archivos sean borrados.
Aunque no es equivalente, su uso en bromas es similar al de format c: en Windows.

11
Sistemas Operativos I, Primer Parcial

• Borra el archivo angel.cpp que está dentro de la carpeta /usr/home/anix/ estando en el


directorio /etc
rm /usr/home/anix/angel.cpp
• Borrar todos los archivos .ogg dentro del directorio /usr/home/anix/musica
rm /usr/home/anix/musica/*.ogg
• Borrar todo el directorio musica (si se omite f de -rf, el sistema solicitará confirmación
para cada archivo que esté en el directorio a eliminar).
rm -rf /usr/home/anix/musica

i. cp

cp es una orden de Unix usado para copiar archivos o directorios del sistema de archivos.
cp proviene de la palabra copy que significa copiar en Inglés.
La orden equivalente en DOS es copy.

j. mv

mv es un comando de Unix usado para mover o renombrar archivos o directorios del sistema de
archivos. El archivo original es borrado y el crea un nuevo archivo con el mismo contenido, el
nombre puede ser diferente o puede ser el mismo. En caso de que se use en la misma ruta con el
nombre del archivo y otro nombre solo cambiara el nombre del archivo.
mv proviene de la palabra move que significa mover en Inglés.

Ejemplos:
mv file1 file_1 renombra un archivo
mv File /file mueve 'File' a '/file'
mv file ./dir/file mueve 'file' a 'dir/file' Relativo al directorio

k. tar

Comprimir y descomprimir archivos es una de las tareas mas comunes que vamos a tener que
realizar en Linux por línea de comandos. Podemos hacerlo mediante diversas herramientas, pero
existen dos que van a estar disponibles en casi cualquier distribución.

Son dos herramientas que se tienen que utilizar de manera complementaria. Se trata de tar, que
simplemente empaqueta varios archivos en un único fichero, y gzip, que hace la compresión
propiamente dicha.

El comando tar tiene la siguiente sintaxis:

tar [opciones] [origen] [destino]

Donde opciones son, por ejemplo, las siguientes:

12
Sistemas Operativos I, Primer Parcial

•c: crear un archivo


•x: extraer de un archivo
•t: listar los contenidos de un archivo
•v: ver un reporte de las acciones a medida que se van realizando
•f: empaquetar contenidos de archivos
•z: para comprimir a la vez que se empaqueta

Como se puede ver, con la opción z se puede comprimir en el mismo paso en el que se
empaqueta, lo que puede hacer las cosas más rápidas y cómodas. De todos modos, tar
simplemente hace el empaquetado y es gzip el que realiza la compresión. Simplemente que
nosotros no tenemos que llamar a gzip, sino que ya lo hace directa e internamente tar.

Ejemplos

1) Si queremos empaquetar un directorio llamado "html" y guardar los datos en "html-paq.tar", lo


haríamos con la sentencia:

tar cvf html-paq.tar html

2) Si queremos comprimir un directorio llamado "archivos" y guardarlo en un fichero llamado


"archivos-comp.tgz", `podríamos hacer algo como esto:

tar czvf archivos-comp.tgz archivos

Si nos fijamos, en este caso el nombre del archivo comprimido le hemos puesto extensión .tgz, que
indica que está empaquetado y comprimido.

3) Si queremos desempaquetar un archivo llamado xxx.tar podemos utilizar un comando como


este:

tar xvf xxx.tar

Eso supone que tenemos el archivo xxx.tar en el mismo directorio desde donde lanzamos el
comando. Los contenidos se desempaquetarán en el mismo directorio donde estamos situados.
4) Si el archivo que queremos desempaquetar está comprimido. Es decir, si queremos
descomprimir y desempaquetar en un solo paso, tenemos que hacerlo con la opción z del
comando tar. Algo como esto:
tar xzvf xxx.tgz

l. gzip

13
Sistemas Operativos I, Primer Parcial

Gzip Nos permite descomprimir, ver y chequear la integridad de los archivos Gz.

m. gunzip

Unzip nos permite descomprimir archivos zip

n. >

Redirección de escritura
Para escribir un archivo se utiliza >. Hay que tener mucho cuidado de no borrar un archivo
sobreescribiéndolo. Cuando se utilizan redirecciones, debido a su utilidad en los scripts, "no se
realizan confirmaciones".

Si el archivo a escribir ya existe desde antes, el redireccionador > lo sobreescribe con flujo de texto
nuevo.

En cambio el operador >> realiza un agregado de texto en el flujo existente.

No hay nada mejor que un ejemplo clarificador:

$ escribe-en-salida-estandar > archivo.txt


El (falso) comando escribe-en-salida-estándar justamente hace eso, escribe unas cuantas cosas en
salida estándar.

Puede ser un comando ls, un comando cal (calendario) o cualquier comando antes visto, así como
también una combinación de comandos por tuberías.

En este punto, el contenido de archivo.txt es lo mismo que saldría en pantalla. Si ejecutamos otro
comando redireccionado a archivo.txt (nuevamente), éste pierde su contenido y el resultado de la
operación pasa a estar en el mismo.

Cuando se necesita tener una lista de acontecimientos, no se quiere que un acontecimiento nuevo
borre a todos los anteriores. Para lograr esto agregamos en vez de sobreescribir.

$ echo Este es el acontecimiento Nro. 1 > bitacora.log


$ echo Este es el segundo acontecimiento >> bitacora.log

Nota:

En caso de emplear otros comandos estos serán explicados en la clase.

14
Sistemas Operativos I, Primer Parcial

Ejemplo1 1 parcial
En base a los comandos enseñados por su maestro cree la estructura aquí propuesta:

/
Respaldo

home

Unicah Facultades
Facultades.zip

UTH Carreras Carrera.mdf


Usuario

Chilo Maestrias Maestrias2019.rar

Unitec Doctorados ListaDoctorados.do


c

Metro Diplomados Diplomados_Diciembre.pdf

1. Cree la estructura aquí señalada


2. Agrupe la carpeta Unicah y copie la agrupación en la carpeta Respaldo
3. Comprima el archivo Diplomados_Diciembre.pdf y lo mueva a la carpeta Respaldo
4. Duplique el archivo Maestrias2019.rar y lo llame Maestrias2011.rar.back
5. Borre la carpeta Unicah y sus archivos recursivamente
Repaso:

Responda con claridad para que se utilizan estos comandos:

1. mkdir 7. tail 14. more 20. Que es el kernel de Linux y


2. rmdir 8. gzip 15. ll que hace
3. rm 9. gunzip 16. > 21. Que el Shell de Linux y que
4. pwd 10. mv 17. ls –l > archivo.txt hace.
5. cd 11. cp 18. Que es la ruta parcial
6. cat 12. clear 19. Que es la ruta absoluta 22. Cuál es la unidad
13. tar contendedora de linux

15
Sistemas Operativos I, Primer Parcial

3. Unidad 2
Objetivos de Aprendizaje

Al finalizar esta unidad, el alumno será capaz de:

1. Describir cómo funcionan los permisos sobre archivos y directorios


2. Crear estructura de control y bucles

Permisos de archivos y directorios

Introducción

¿Has visto esa combinación de r,w,x y - cuando listas un directorio?, tienes cierta idea que son los
permisos, pero ¿como se usan y como funcionan?. En este manual sobre permisos de archivos y
directorios de LinuxTotal entenderás totalmente su uso y la manera correcta de utilizarlos.

En Linux, todo archivo y directorio tiene tres niveles de permisos de acceso: los que se aplican al
propietario del archivo, los que se aplican al grupo que tiene el archivo y los que se aplican a todos
los usuarios del sistema. Podemos ver los permisos cuando listamos un directorio con ls -l:
$> ls -l
-rwxrwxr-- 1 sergio ventas 9090 sep 9 14:10 presentacion
-rw-rw-r-- 1 sergio sergio 2825990 sep 7 16:36 reporte1
drwxr-xr-x 2 sergio sergio 4096 ago 27 11:41 videos

Veamos por partes el listado, tomando como ejemplo la primera línea. La primera columna (-
rwxrwxr--) es el tipo de archivo y sus permisos, la siguiente columna (1) es el número de enlaces al
archivo, la tercera columna (sergio) representa al propietario del archivo, la cuarta columna
(ventas) representa al grupo al que pertence al archivo y las siguientes son el tamaño, la fecha y
hora de última modificación y por último el nombre delarchivo o directorio.

El primer caracter al extremo izquierdo, representa el tipo de archivo, los posibles valores para
esta posición son los siguientes:
• - un guión representa un archivo comun (de texto, html, mp3, jpg, etc.)
• d representa un directorio
• l link, es decir un enlace o acceso directo
• b binario, un archivo generalmente ejecutable

Los siguientes 9 restantes, representan los permisos del archivo y deben verse en grupos de 3.

16
Sistemas Operativos I, Primer Parcial

Los tres primeros representan los permisos para el propietario del archivo. Los tres siguientes son
los permisos para el grupo del archivo y los tres últimos son los permisos para el resto del mundo
o otros.
rwx rwx rwx
usuario grupo otros

En cuanto a las letras, su significado son los siguientes:


• r read - lectura
• w write - escritura (en archivos: permiso de modificar, en directorios: permiso de crear
archivos en el dir.)
• x execution - ejecución

Las nueve posiciones de permisos son en realidad un bit que o esta encendido (mostrado con su
letra correspondiente) o esta apagado (mostrado con un guión -), asi que, por ejemplo, permisos
como rwxrw-r--, indicaría que los permisos del propietario (rwx) puede leer, escribir y ejecutar el
archivo, el grupo (o sea los usuarios que esten en mismo grupo del archivo) (rw-) podrá leer y
escribir pero no ejecutar el archivo, y cualquier otro usuario del sistema (r--), solo podrá leer el
archivo, ya que los otros dos bits de lectura y ejecucción no se encuentran encendidos o activados.

Permisos en formato numérico octal

La cambinación de valores de cada grupo de los usuarios forma un número octal, el bit x es 2 0 es
decir 1, el bit w es 21 es decir 2, el bit r es 22 es decir 4, tenemos entonces:
• r=4
• w=2
• x=1

La combinación de bits encendidos o apagados en cada grupo da ocho posibles combinaciones de


valores, es decir la suma de los bits encendidos:
- - - = 0 no se tiene ningún permiso
- - x = 1 solo permiso de ejecución
- w - = 2 solo permiso de escritura
- w x = 3 permisos de escritura y ejecución
r - - = 4 solo permiso de lectura
r - x = 5 permisos de lectura y ejecución
r w - = 6 permisos de lectura y escritura
r w x = 7 todos los permisos establecidos, lectura, escritura y ejecución

Cuando se combinan los permisos del usuario, grupo y otros, se obtienen un número de tres cifras
que conforman los permisos del archivo o del directorio. Esto es más fácil visualizarlo con algunos
ejemplos:

17
Sistemas Operativos I, Primer Parcial

Permisos Valor Descripción

rw------- 600 El propietario tiene permisos de lectura y escritura.

rwx--x--x 711 El propietario lectura, escritura y ejecución, el grupo y otros solo ejecución.

El propietario lectura, escritura y ejecución, el grupo y otros pueden leer y


rwxr-xr-x 755
ejecutar el archivo.

rwxrwxrwx 777 El archivo puede ser leido, escrito y ejecutado por quien sea.

Solo el propietario puede leer el archivo, pero ni el mismo puede modificarlo o


r-------- 400
ejecutarlo y por supuesto ni elgrupo ni otros pueden hacer nada en el.

El usuario propietario puede leer y escribir, el grupo puede leer el archivo y


rw-r----- 640
otros no pueden hacer nada.

Estableciendo los permisos con el comando chmod

Habiendo entendido lo anterior, es ahora fácil cambiar los permisos de cualquier archivo o
directorio, usando el comando chmod (change mode), cuya sintaxis es la siguiente:

chmod [opciones] permisos archivo[s], algunos ejemplos:


$> chmod 755 reporte1
$> chmod 511 respaldo.sh
$> chmod 700 julio*
$> chmod 644 *

Los ejemplos anterior establecen los permisos correspondientes que el usuario propietario desea
establecer, el tercer ejemplo (chmod 700 julio*) cambiará los permisos a todos los archivos que
empiezen con julio (julio01, julio02, julio_respaldo, etc.) debido al caracter '*' que es parte de las
expresiones regulares que el shell acepta, e indica lo que sea. El último ejemplo por lo tanto
cambiará los permisos a los archivos dentro del directorio actual.

Una opción común cuando se desea cambiar todo un árbol de directorios, es decir, varios
directorios anidados y sus archivos correspondientes, es usar la opción -R, de recursividad:
$> chmod -R 755 respaldos/*

Esto cambiará los permisos a 755 (rwxr-xr-x) del directorio respaldos y de todos los subdirectorios
y archivos que estén contenidos dentro de este.

18
Sistemas Operativos I, Primer Parcial

Estructura de control y bucles


Variables y funciones
#!/bin/bash
#
# Esto es un ejemplo en Bash del clásico "Hola Mundo"
#

echo "Hola Mundo"

Como podemos ver, nada difícil para empezar. Empecemos a explicar un poco que significa cada
línea:

#!/bin/bash: Esta línea indica donde se encuentra el intérprete de comandos en nuestro sistema.
Por defecto todos los sistemas que tengan Bash instalado, lo tendrán en el directorio /bin. Al
utilizar esta línea, podremos ejecutar el script como un programa normal, ya que el sistema sabrá
que es un script en Bash y que tiene que hacer con el.

Si el script de ejemplo lo hubiésemos grabado como ejemplo.sh, lo podríamos ejecutar de la


siguiente manera:

[ralfm@desktop]# chmod ugo+x ejemplo.sh


[ralfm@desktop]# ./ejemplo.sh
Hola Mundo

# Esto es un ejemplo en Bash del clásico "Hola Mundo": Esto es un comentario. Todas las líneas
que empiecen con el simbolo '#' serán tratadas como comentarios y no se ejecutaran.

echo "Hola Mundo": Esto es el comando que imprime la cadena de texto en pantalla.

Variables

En todo script tenemos que trabajar con variables. Vamos a ver como se definen y usan. Una
buena costumbre cuando definamos variables en Bash es utilizar letras mayúsculas, esto no es
necesario, pero nos ayudara a tener un script más fácil de entender.

19
Sistemas Operativos I, Primer Parcial

Definiendo una variable


#!/bin/bash
#
# Esto es un ejemplo en Bash del clásico "Hola Mundo"
#

MENSAJE="Hola Mundo"
echo $MENSAJE

Hemos definido una variable llamada MENSAJE con el valor "Hola Mundo", y la hemos usado con
el comando echo para escribir el valor de la misma. Las variables en Bash se definen como
NOMBRE=valor (sin espacios antes o después del símbolo '=') y su valor se usa, poniendo el
símbolo '$' delante del nombre de la variable, $NOMBRE.

Si al utilizar el valor de una variable, el nombre de variable esta seguido de un carácter que sea
otra letra, numero o el símbolo '_', tendremos que utilizar los símbolos '{}' alrededor del nombre
de la variable.

#!/bin/bash

FICHERO="registro"
echo ${FICHERO}_2006.txt
Usando variables de entorno
#!/bin/bash

echo "El usuario '$USERNAME' ha ejecutado el script $0, en el ordenador '$HOSTNAME'. "

También se pueden usar en nuestro scripts, variables que no hemos definido nosotros. Estas
variables son las llamadas 'variables de entorno' del sistema. En nuestro ejemplo hemos utilizado
$USERNAME y $HOSTNAME para obtener el nombre de usuario y del ordenador. La variable $0
contiene el nombre del script, más adelante explicaremos esto.

Asignado resultados de comandos a variables


#!/bin/bash

ATRIBUTOS_SCRIPT=`/bin/ls -l $0`

echo "El usuario '$USERNAME' ha ejecutado el script $0, en el ordenador '$HOSTNAME'. "

20
Sistemas Operativos I, Primer Parcial

echo "Los atributos del script son: "


echo $ATRIBUTOS_SCRIPT

También podemos asignar la salida que producen los comandos del sistema a una variable. En
nuestro ejemplo hemos asignado la salida del comando 'ls -l a una variable llamada
ATRIBUTOS_SCRIPT. Esto nos será muy útil en nuestros scripts para obtener información del
sistema que podremos utilizar en nuestros scripts.

Usando caracteres especiales en variables

Existen una serie de caracteres que tienen un significado especial en Bash, por ejemplo $ y ". Si
queremos usar literalmente estos caracteres en el valor de una variable tendremos que usar el
símbolo '\' delante de ellos.

#!/bin/bash

MENSAJE="\"Hola Mundo ...\""


echo "El valor de la variable \$MENSAJE es $MENSAJE"
Variables numéricas

Si queremos definir variables numéricas para su utilización en scripts Bash podemos utilizar el
comando let. Nada mejor que un ejemplo para ver cómo se trabaja con variables numéricas.

#!/bin/bash

let A=100
let B=200
let C=$A+$B

echo "A: $A | B: $B | C: $C"


Funciones

En Bash se pueden definir funciones. Una función en Bash (denominada subrutina o


procedimiento en otros lenguajes de programación) se podría definir como un script dentro de un
script. Sirve para organizar un script en unidades lógicas de manera que sea más fácil mantenerlo y
programarlo. En Bash las funciones se pueden definir de la siguiente manera:

21
Sistemas Operativos I, Primer Parcial

function nombre_de_funcion(){
comandos_del_shell
}

Un ejemplo de funcion en un script:

#!/bin/bash

let A=100
let B=200

#
# Funcion suma()
# Suma los variables A y B
#
function suma(){
let C=$A+$B
echo "Suma: $C"
}

#
# Funcion resta()
# Resta los variables A y B
#
function resta(){
let C=$A-$B
echo "Resta: $C"
}

suma
resta

22
Sistemas Operativos I, Primer Parcial

Estructuras de control y bucles

En Bash existen estas construcciones para controlar el flujo de ejecución de un script:

• if/else: Ejecuta una serie de comandos dependiendo si una cierta condición se cumple o
no.
• for: Ejecuta una serie de comandos un número determinado de veces.
• while: Ejecuta una seria de comandos mientras que una determinada condición sea
cumpla.
• until: Ejecuta una serie de comandos hasta que una determinada condición se cumpla.
• case: Ejecuta una o varias listas de comandos dependiendo del valor de una variable.
• select: Permite seleccionar al usuario una opción de una lista de opciones en un menú.

La mayoría de las condiciones utilizadas con estas construcciones son comparaciones de cadenas
alfanuméricas o numéricas, valores de terminación de comandos y comprobaciones de atributos
de ficheros. Antes de seguir viendo como estas construcciones se pueden utilizar, vamos a ver
como las condiciones se pueden definir.

Comparaciones de cadenas alfanuméricas


Operador Verdad (TRUE) si:
------------------------------------------
cadena1 = cadena2 cadena1 es igual a cadena2
cadena1 != cadena2 cadena1 no es igual a cadena2
cadena1 < cadena2 cadena1 es menor que cadena2
cadena1 > cadena 2 cadena1 es mayor que cadena 2
-n cadena1 cadena1 no es igual al valor nulo (longitud mayor que 0)
-z cadena1 cadena1 tiene un valor nulo (longitud 0)
comparación de valores numéricos
Operador Verdad (TRUE) si:
------------------------------------------
x -lt y x menor que y
x -le y x menor o igual que y
x -eq y x igual que y
x -ge y x mayor o igual que y
x -gt y x mayor que y
x -ne y x no igual que y
Comprobacion de atributos de fichero

23
Sistemas Operativos I, Primer Parcial

Operador Verdad (TRUE) si:


------------------------------------------
-d fichero fichero existe y es un directorio
-e fichero fichero existe
-f fichero fichero existe y es un fichero regular (no un
directorio, u otro tipo de fichero especial)

-r fichero Tienes permiso de lectura en fichero


-s fichero fichero existe y no esta vacío
-w fichero Tienes permiso de escritura en fichero
-x fichero Tienes permiso de ejecución en fichero (o de búsqueda si es un directorio)

-O fichero Eres el dueño del fichero


-G fichero El grupo del fichero es igual al tuyo.

fichero1 -nt fichero2 fichero1 es más reciente que fichero2


fichero1 -ot fichero2 fichero1 es más antiguo que fichero2

Podemos combinar varias condiciones con los símbolos '&&' (AND) y '||' (OR), y negar una
condición con '!'. Unos ejemplos más adelante aclararan como utilizarlos.

if/else

La sintaxis de esta construcción es la siguiente:

if "condicion"
then
"comandos"
[elif "condicion"
then
"comandos"]
[else
"comandos"]
fi

Como ya hemos dicho, podemos comprobar los valores de terminación de un comando, y


comparar cadenas alfanuméricas/numéricas y atributos de ficheros. Nada mejor que unos
ejemplos para aclararnos las ideas.

#!/bin/bash
#
# Comprobando terminación de un comando

24
Sistemas Operativos I, Primer Parcial

DIRECTORIO="/tmp/test"

COMANDO="/bin/mkdir $DIRECTORIO"

if $COMANDO
then
echo "$DIRECTORIO ha sido creado"
else
echo "$DIRECTORIO no pudo ser creado"
fi

#!/bin/bash
#
# comparación de cadenas alfanuméricas
#

CADENA1="uno"
CADENA2="dos"
CADENA3=""

if [ $CADENA1 = $CADENA2 ]; then


echo "$CADENA1 es igual a $CADENA2"

elif [ $CADENA1 != $CADENA2 ]; then


echo "$CADENA1 no es igual a $CADENA2"

fi

if [ -z $CADENA3 ]; then
echo "$CADENA3 esta vacía"
fi
--------------------------------------------------
#!/bin/bash
#
# comparación de valores numéricos
#

let NUM1=1
let NUM2=2
let NUM3=3

if [ $NUM1 -ne $NUM2 ] && [ $NUM1 -ne $NUM3 ]; then


echo "$NUM1 es diferente a $NUM2 y $NUM3"
fi

if [ $NUM1 -lt $NUM3 ]; then

25
Sistemas Operativos I, Primer Parcial

echo "$NUM1 es menor que $NUM3"


fi
for

La sintaxis de esta construcción es la siguiente:

for nombre [in lista]


do
comandos que pueden utilizar $nombre
done

Un ejemplo nos aclarara las cosas. Vamos a listar información en el DNS de una lista de direcciones
web:

#!/bin/bash

for HOST in
do
echo "-----------------------"
echo $HOST
echo "-----------------------"

/usr/bin/host $HOST
echo "-----------------------"

done
while

La sintaxis de esta construcción es la siguiente:

while condicion
do
comandos
done

Un ejemplo simple con while en donde escribimos el valor de una variable 10 veces, después de
incrementar su valor:

#!/bin/bash

NUM=0

26
Sistemas Operativos I, Primer Parcial

while [ $NUM -le 10 ]; do


echo "\$NUM: $NUM"
let NUM=$NUM+1
done
until

La sintaxis de esta construcción es la siguiente:

until condicion; do
comandos
done

Un ejemplo simple con until en donde escribimos el valor de una variable 10 veces, después de
incrementar su valor:

#!/bin/bash

NUM=0

until [ $NUM -gt 10 ]; do


echo "\$NUM: $NUM"
let NUM=$NUM+1
done
case

La sintaxis de esta construcción es la siguiente:

case expresion in
caso_1 )
comandos;;
caso_2 )
comandos;;
......
esac

Un ejemplo simple con case para aclarar las cosas:

#!/bin/bash

for NUM in 0 1 2 3
do
case $NUM in

27
Sistemas Operativos I, Primer Parcial

0)
echo "\$NUM es igual a cero";;
1)
echo "\$NUM es igual a uno";;
2)
echo "\$NUM es igual a dos";;
3)
echo "\$NUM es igual a tres";;
esac
done
select

La sintaxis de esta construcción es la siguiente:

select nombre [in lista]


do
comandos que pueden utilizar $nombre
done

Un ejemplo simple para aclarar las cosas.

#!/bin/bash

select OPCION in opcion_1 opcion_2 opcion_3


do
if [ $OPCION ]; then
echo "Opcion elegida: $OPCION"
break
else
echo "Opcion no valida"
fi
done

28

También podría gustarte