You are on page 1of 16

Captulo I.

Introduccin y repaso (Sistemas Operativos I)


1. Introduccin
En este punto vamos a ver los comandos vistos en 1er curso de Ingeniera Informtica de
Sistemas que van a ser usados en programacin en shell.

1.1. Comandos bsicos


mkdir: Creacin de un directorio

rmdir: Eliminado de un directorio (solo si est vacio)

cd: Cambiamos de directorio

pwd: Nos indica el directorio actual.

ls: Muestra el contenido del directorio local. Opciones:

-l: muestra los detalles.


-a: muestra los archivos ocultos.
-al: -a y -l simultneamente

1.2. Comandos para el uso de archivos


cp ruta_origen ruta_destino: comando para copiar ficheros.

mv nombre_inicial nombre_final: comando para renombrar un fichero.

rm nombre_fichero: elimina el fichero.

rm -r directorio: permite eliminar un directorio aunque no est vaco.

1.3. Tipos de ficheros en unix


En unix tenemos dos tipos de ficheros, los ordinarios (ficheros de datos, texto, ...) y los
directorios, que son un tipo especial de fichero que puede contener mas directorios y ficheros
ordinarios.

2. Operadores de redireccin
El operador > redirige la salida del comando que est a su izquierda hacia el fichero que est
a su derecha. A la izquierda tendremos un comando y a la derecha un fichero.

Ej: ls > fichero1

Si el fichero no existe lo crear y si existe lo "machaca".


El operador >> redirige la salida del comando que est a su izquierda al final del fichero que
est a su derecha, de tal manera que si el fichero ya existe pues simplemente aade lneas al
final del mismo y si no existe, lo crear.

En el operador <, la entrada del operador a la izquierda la toma del fichero de la derecha.

Ej: mail destinatario < fichero_mensaje

Las tuberas (pipes) provocan que la salida del comando a la izquierda sea la entrada del
comando a la derecha.

Ej: cat fichero | sort (muestra el fichero y adems muestra sus lneas ordenadas)

3. Filtros
3.1. cut
Es un filtro que nos permite cortar un fichero y obtener alguna serie de sus campos, los cuales
han de estar diferenciados o delimitados por algn tipo de carcter. Ejemplo:
nombre_login:contrasea:PID:GID:

Sintaxis: cut -d(carcter separador de campo) -fx nombre_fichero

X=n de la columna que queremos cortar

Ejemplo: cut -d: -f1 prueba

cut -d: -f1,2 prueba (obtendramos el campo 1 y el campo 2)

3.2. head
Muestra las n primeras lineas de un fichero:

head -n fichero

En este caso la entrada es el fichero "fichero" pero tambin podemos escribir head -n "a
secas", entonces la entrada sera la entrada estndar (teclado), hasta que pulsramos CTRL +
D.

3.3. tail
Muestra las n ltimas lneas:

tail -n fichero: Muestra las n ltimas lneas de un fichero.


tail +n fichero: Muestra de la n en adelante lneas.

3.4. cat
Toma una entrada y la muestra por la salida. Es como un filtro nulo. Si ponemos solo cat, lo
que escriba por teclado, saldr por pantalla.
3.5. uniq
Elimina las lneas que se repiten. Para trabajar con este filtro tenemos que tener todas las
lneas que se repiten consecutivamente almacenadas, es decir, que tendremos que utilizar el
comando sort que veremos ms adelante.

uniq [opciones] entrada salida

Opciones:

- u: Saca slo las lneas que no se repiten.


-d: Saca slo las lneas que se repiten, pero slo saca una copia de las mismas.
-c: Saca en la columna de la izquierda el nmero de veces que se repite y en la columna
de la derecha la lnea propiamente dicha.

3.6. tr
Traduce caracteres de un archivo de una forma a otra.

tr [opciones] de_cadena a_cadena fichero

3.7. tee
Permite dividir la salida de un comando para que por un lado quede almacenada en un fichero
y por otro vaya a la pantalla. Ejemplo: ls | tee fichero ? Saldra por pantalla y se grabara en el
fichero llamado "fichero".

3.8. sort
Permite ordenar ficheros de texto.

sort [opciones] archivo

Podemos ordenar por campos lgicos o por columnas. Ahora las columnas las empezamos a
numerar desde 0 y no desde 1 como hacamos en el filtro cut. Opciones:

-t: donde los dos puntos es el carcter separador de campo.


-r hace una clasificacin descendente.
-n permite ordenar nmeros
-b para que no tenga en cuenta los espacios en blanco
-o permite especificar un fichero de salida en el cual quedarn grabados los datos
ordenados. Ej: sort fichero1 o fichero2 sort fichero1 o fichero1 (quedara el resultado
almacenado en el mismo fichero)
sort t: +1 practica3 ? ordenaramos el fichero "practica3" que tendr como caracteres
separadores de campo los dos puntos y lo ordenaremos teniendo en cuenta la segunda
columna (ya que empezamos a numerar 0, 1, 2, )

3.9. find
Permite buscar ficheros que cumplan determinadas caractersticas. No tenemos en cuenta el
contenido del fichero.

- name nombre ? Nos busca los ficheros que coincidan con un determinado nombre o
patrn de bsqueda
- type d f: nos dice si es un fichero normal o un directorio
- user nombre_login ? Nos busca los ficheros de un determinado propietario
- exec nos permite ejecutar un comando por cada uno de los ficheros encontrados

3.10. paste
Es lo contrario al cut. Permite producir una salida en forma de columnas desde uno o ms
ficheros.

paste fichero1 fichero2 ? hace una lnea por cada pareja de lneas de los ficheros fuente.

Si no ponemos nada hace una fabulacin como carcter separador, pero si ponemos d: pues
pone los dos puntos de carcter separador de campo.

3.11. egrep
Sirve para buscar cadenas o patrones dentro de un fichero. El sistema devuelve la lnea o
lneas que contiene el patrn de bsqueda.

Ej: grep pepe fichero

Expresiones regulares mas usadas:

^cadena: la cadena aparece al principio de la lnea


cadena$: la cadena aparece al final de la lnea

egrep -v patron fichero: Saca las lneas que no contienen un patrn determinado.

3.12. sed
Comando que sirve para sustituir palabras o patrones dentro de un fichero.

sed s/cadena_original/cadena_nueva/g

Para eliminar una cadena:

sed s/cadena_a_borrar//g
3.13. wc

wc [opciones] fichero

El comando wc realiza un recuento de un fichero de texto, puede contar lneas, caracteres o


palabras, dependiendo de la opcin que utilicemos.

Opciones:

-w ? Cuenta palabras
- c ? Cuenta caracteres
- l ? Cuenta lneas

Captulo II. Programacin en shell de UNIX


1. Introduccin
La programacin en shell de unix surgi como respuesta a las tareas que se realizaban
secuencial mente para conseguir hacer algo con el sistema. Como esas tareas se realizaban
muchas veces y prcticamente en el mismo orden, pues surgi esto, que lo que hace es
ejecutar secuencial mente ordenes en el intrprete de comandos sin tener que escribirlos a
mano. Es algo parecido a los antiguos ficheros .bat de MS-DOS.

Nosotros usaremos Bourne Shell (sh) puesto que hay muchas modalidades de shell en unix.
Para que el sistema siempre interprete que utilizaremos Bourne Shell tendramos que aadir al
principio de nuestro script la lnea #!/bin/sh

2. Variables
Las variables en la shell de unix no necesitan ser declaradas previamente para su posterior
utilizacin. Las variables tienen un nombre y para acceder a su contenido tenemos que
anteponer el $ al nombre de la variable. Ejemplos:

variable1=2
echo variable1: Sacar por pantalla la cadena variable1
echo $variable1: Como hace referencia a su contenido, sacar un 2

Hay un tipo de variables que se denominan variables de entorno que son definidas por el
sistema al iniciar la sesin y algunas sern diferentes para cada usuario (PATH, LOGNAME,
).

3. Paso de argumentos a un script


El paso de parmetros se realiza escribindolos en la lnea de comandos detrs del nombre
del script. Dentro del mismo podremos acceder a los parmetros con las variables $1, $2, $3,
hasta $9.

Ej: sh script1 hola que tal adis

Dentro del script:

$1 = hola
$2 = que
$3 = tal
$4 = adis

Con el comando shift dentro de un script logramos un desplazamiento de los parmetros,


entonces en este caso quedara as:

$1 = que
$2 = tal
$3 = adis

Podemos observar que hola se habra perdido. El comando shift es el que me permite
pasarle ms de 9 parmetros a un script, puesto que el $10 nunca lo podremos utilizar.

Las variables $# y $* usadas dentro de un script tienen un significado especial:

$#: Contiene el nmero de parmetros pasados al script.


$*: Contiene todos los parmetros pasados al script.

4. Lectura de una variable desde teclado. Read


Utilizamos read nombre_variable. Tambien podemos leer ms de una variable a la vez.
Ejemplo:
read var1 var2. Entonces la entrada si es, 1 2, pues tendremos:
$var1 = 1
$var2 = 2

5. Expresiones. Comando expr


expr permite evaluar una expresin:

+
-
\*
/
%

ejemplo: c=`expr $a + $b`

En c se almacenara el valor de evaluar la expresin a + b, es decir, su suma.

6. Condiciones
test permite realizar comparaciones lgicas.

- comparaciones numricas:

= -eq
< -lt
<= -le
<> -ne
> -gt
>= -ge

test $a ne $b

- cadenas

= (con espacios) es para distinguirlas de la asignacin.

test $cad1 = $cad2

!= verdadero si son distintas.

-z verdadero si cadena es nula

-n verdadero si la cadena es no nula

- ficheros.

-a verdadero si el fichero existe (directorios o ficheros)


- f verdadero si el fichero existe y es un fichero ordinario.
- d verdadero si existe y es un directorio.
- h verdadero si es un enlace simblico.
- r verdadero si tiene permisos de lectura
- x verdadero si tiene permisos de ejecucin
- w verdadero si tiene permisos de escritura
- s verdadero si el fichero existe y no est vaco
and: -a
or: -o
not: !

7. Ejecucin condicional
Lo primero que necesitamos es definir la variable $? que contendr el cdigo de salida del
ltimo comando ejecutado en el sistema. Tomar el valor 0 si el ultimo comando se ha
ejecutado con xito y <> 0 si no ha sido as. Esto nos servir para comandos como el egrep
que si se ha encontrado el patrn con xito, pues devolver un cdigo de salida igual a 0.

* Operador grave: Se utiliza para realizar la ejecucin de un comando y poder trabajar o bien
con su cdigo de salida o con su salida.

7.1. Bucle if
if

then


#parte opcional
else


#fin de la parte opcional
fi

7.2. Bucles for


for variable in conjunto_de_valores
do



done

7.3. Bucles while


while condicion
do


done

7.4. Bucles until


until condicion
do


done

7.5. Sentencia case


case $variable in

valor1)

;;
valor2)

;;


#opcional el otherwise
*)

;
esac

7.6. Break, continue y exit


Dentro de los bucles while y until se pueden usar:
Break: termina la ejecucin del bucle.
Continue: Vuelve a la sentencia inmediatamente anterior al bucle.

Break x: Termina la ejecucin de x bucles anidados.

Exit nos permite la terminacin del script.

Exit x permite especificar el cdigo de salida del script.

8. Funciones y procedimientos
Las funciones en unix han de ser declaradas al principio del script:

function nombre()
{


$1 ? primer parmetro que le hemos pasado


}

#resto del script.

Una funcin devolver un valor, siempre que haga una nica salida por pantalla que ser la
almacenada en la variable a la que est asignada la llamada de la funcin.

Ejemplo:
function cuadrado()
{
cuad=`expr $1 \* $2`
echo $cuad
}

read num
a=`cuadrado $num`
echo el cuadrado de $num es $a

Desde dentro de una funcin accedemos a los argumentos pasados al igual que desde
dentro de un script, es decir con $1 $2 $3,

Podemos escribir todas las funciones en un archivo de texto y luego cargarlas para que el
sistema las tenga en memoria.

Para cargarlas en memoria: . nombre_fichero

9. Operadores && y ||
9.1. &&
Sintaxis: comando1 && comando2

El comando 2 se ejecuta s y solo si el comando 1 se ha ejecutado con xito.

9.2. ||
Sintaxis: comando1 || comando2

El comando 2 se ejecuta s y solo si el comando1 no se ha ejecutado con xito.

Ejemplo: (mv $1 $2 && echo xito!!) || echo error

Captulo III. Sistema de arranque y parada del Sistema


Operativo en Unix
1. Arranque
Cuando el sistema inicia su funcionamiento crea el proceso INIT que ser el padre de todos
los procesos. Su PID ser el 1. A partir del estado INIT, el sistema ejecutar una serie de
procesos. La informacin sobre los ficheros y procesos que tiene que ejecutar durante el
arranque estar en /etc/inittab.

2. Estado INIT: o nivel de ejecucin


Es una configuracin software del sistema que indica que procesos pueden existir durante y
despus del arranque del sistema operativo. El nmero de servicios disponibles en el sistema
depender del estado en el que se encuentre el mismo. En un instante determinado un
sistema solo puede encontrarse en uno de los estados INIT.

Hay dos grupos:

Monousuario: El sistema slo es accesible desde la consola y nicamente puede acceder


al mismo el sper usuario.
Multiusuario. El sistema puede ser accedido desde cualquier terminal o desde la red y
cualquier usuario puede acceder al mismo.

Estados:

Estado 0: Significa desconexin o estado de apagado. Equivale a apagar la mquina de


forma ordenada.
Estado 1 o estado de administracin. Slo root puede acceder al sistema. Se puede
acceder a todo el sistema de ficheros multiusuario. Es usado para administracin y
mantenimiento.
Estado S: Estado monousuario. Slo root puede acceder pero solo se puede acceder al
sistema de ficheros raiz.
Estado 2: Estado multiusuario sin NFS( network file sistem ). Cualquier usuario puede
acceder al sistema pero no a travs de la red.
Estado 3: Estado multiusuario con NFS.
Estado 5: Modo X11. La consola del sistema arranca con las X (modo grfico).
Estado 6: Parada y reinicio del sistema. Se para la mquina y se inicia de nuevo.

Para pasar de un estado a otro escribimos:


init

3. /etc/inittab
identificador:runlevel:action:process o script
Identificador: Secuencia de 2 o ms caracteres que identifica la linea. Para lneas que
contienen procesos getty contendr el numero del terminal donde se ejecutar el proceso.
Runlevel: Nivel de ejecucin. Especifica el estado INIT en el que deben ejecutarse los
procesos indicados.
Action: Especifica como tratar el proceso, es decir, cuando y como se ejecuta el proceso
correspondiente. Acciones:

- INIT default: Especifica el nivel de ejecucin por defecto.


- respawn: el proceso una vez que finalice va a ser ejecutado de nuevo.
- wait: indica al proceso INIT que espere hasta su terminacin antes de continuar con la
siguiente entrada.
- once: el proceso se ejecuta una sola vez.
- boot: se ejecuta durante el arranque del sistema operativo, ignorndose el nivel de ejecucin.
- sysinit: Durante el arranque del SO pero antes que cualquier otro proceso y adems el
sistema espera hasta su finalizacin.
- ctrlaltdel: se ejecuta cuando se pulsa esa combinacin.
- powerwait: cuando hay un fallo de corriente.
Process o script: Suelen ser scripts que se encargan de arrancar o de parar una serie de
servicios.

/etc/inittab

Captulo 4. Usuarios y grupos. Procesos


1. Usuarios y grupos
Una cuenta de usuario nos permitir acceder a un sistema unix.

Un sistema engloba los usuarios en grupos, con una serie de permisos similares para todos
ellos, en lugar de establecer los permisos individualmente.

1.1 Usuarios

/etc/passwd
login:contrasea:uid:gid:inf_user:dir_home:shell

La contrasea encriptada se encuentra en el fichero:


/etc/shadow
login:contrasea:::::::

Para crear un usuario hay que hacer lo siguiente:


- Incluir una linea con sus datos en los fichero anteriormente descritos.
- Crear su directorio home y darle permisos y propiedad.
- Copiar los ficheros de esqueleto (/etc/skel/) en el directorio home del usuario.
usermod: Comando que modifica la informacin del usuario.
- u uid
- g gid
- h dir_home

finger: comando que proporciona informacin acerca de los usuarios conectados al sistema.

1.2. Grupos
/etc/group
nombre:contrasea:gid:user1,user2,

Cada usuario pertenece a un grupo por defecto y en la lista de usuarios del grupo al que
pertenece por defecto, no aparecer dicho usuario.

2. Comandos varios
2.1. Fichero /etc/fstab
Su nombre es File System Table o tambin tabla de sistema de ficheros. Contiene una entrada
para cada sistema de ficheros o archivos que hay que montar durante el arranque del Sistema
Operativo.

Puede haber un error en el arranque, con mount a se puede volver a montar todo el sistema
de ficheros.

La estructura que tiene es:

dispositivo_a_montar
punto_de_montaje
tipo_del_distema_de_ficheros
opciones_sobre_montaje

Con el comando mount a montara todos los sistemas de ficheros que hay en el fstab sin
tener que arrancar la mquina.

2.1. Montaje de sistemas de ficheros


mount [opciones] <fichero_de_dispositivo> <punto_de_montaje>
-t especifica el tipo de sistema de ficheros que queremos montar.
VFAT NTFS ISO9660
HPFS NFS SMBFS

Ej: mount t vfat /dev/fd0 /mnt/floppy

umount fichero_de_dispositivo punto_de_montaje

2.2. Comandos de sistemas de ficheros


mkfs [opciones] <fichero_de_dispositivo>
-p?permite comprobar el formato del sistema de ficheros que queremos crear.

fsck: Permite comprobar, revisar y reparar un sistema de ficheros.

mknod: Permite crear un fichero de dispositivo.

mkdev: permite crear automticamente todos los ficheros asociados a una familia de
dispositivos. Un fichero de dispositivos apunta a una serie de rutinas que permiten manejarse
con ese dispositivo.

df: Nos informa del espacio libre en un sistema de ficheros.

2.3. Enlaces

Duros: ln fichero_existente nuevo_fichero


Simblicos: ln l fichero_existente nuevo_fichero

2.4. Modos de ejecucin


a) Background (segundo plano):
comando&
b) Ejecucin continuada:
nohup ? Ejecuta un comando aunque cierre la sesin.
La salida del comando se almacenar en nohup.out
c) Unin de ambos: Se puede conseguir ejecutar un proceso en segundo plano y que adems
contine ejecutndose aunque se finalice la sesin en la maquina:
nohup comando&

jobs: Muestra los trabajos interrumpidos o que se estn ejecutando en 2 plano.

bg mando un trabajo interrumpido a background.


fg mando un trabajo a primer plano

2.5. Ejecucin programada de procesos


at: Permite planificar un trabajo para su ejecucin en un instante de tiempo determinado.

crontab: permite planificar trabajos para su ejecucin peridica. Usa un fichero que se llama
crontab que tiene una serie de campos que especifican cuando se ejecutar el trabajo.

2.6. Prioridades de procesos


nice: Ejecuta un proceso con una prioridad determinada.
renice: Altera la prioridad de un proceso que ya est ejecutndose

2.7. Comando ps (informacin de proceso)


ps [opciones]

Opciones:
-l ? listado completo de todos los procesos.
UID ? Nmero identificador del usuario.
PID ? Nmero identificador del proceso.
PPID ? Identificador del proceso padre.
C ? ndice de utilizacin reciente del procesador.
STIME ? Tiempo de inicio del proceso.
TTY ? Id del terminal.
TIME ? Tiempo de CPU consumido por el proceso.
COMMAND ? Nombre del comando que ejecuta.

S ? Estado del proceso.


O: ejecucin.
S: durmiendo.
Z: zombie.
X: En espera de ms memoria.
-a ? Lista de todos los procesos en ejecucin.

3. Copias de seguridad
3.1. tar
tar funcin [opciones] archivo.tar
c: permite crear un fichero de salida que guarda un grupo de ficheros.
x: opcin inversa.
t: listar el contenido de un fichero tar.
r: permite reemplazar un fichero existente por una nueva versin.
u: permite aadir un fichero que no existe al fichero tar.
Opciones:
-v: Va mostrando informacin.
-z: permite comprimir o descomprimir.
-f: para poder usar un fichero de salida

Ejemplo: tar cvf fichero.tar dir_backup


El tar es recursivo por defecto. Hay que incluir la extensin .tar en el fichero destino.

3.2. Zip / unzip


zip fichero.zip dir_backup ? comprimir.
Le aade la extension .zip automticamente.
Ej: zip r fichero_destino directorio

unzip fichero.zip ? descomprimir.


4. Funciones del shell
Sustitucin del history.

Alias: Determinar o sustituir alias.


o alias dir=ls l (derecha del 0)
o unalias dir (lo deshace)
Redireccin
comando > fichero (antes de la ejecucin del comando, el shell mira permisos, existencia
del fichero, )
Sustitucin de variables y sustitucin de comandos.
Expansin de ficheros (comodines, *?)
Ejecucin del comando.

You might also like