Professional Documents
Culture Documents
KERNEL
Shell
Utilidades.- conjunto de aplicaciones que normalmente suele suministrar UNIX para facilitar
todo tipo de tareas.
KERNEL
Es el corazn del Sistema UNIX. Es la porcin del Sistema Operativo que trabaja ms cerrada e
independientemente del usuario. Es el manejador del Sistema UNIX. Se encarga de realizar las funciones
de ms bajo nivel con respecto al hardware del sistema, permitiendo por lo tanto, la no dependencia del
hardware del resto de las partes del Sistema Operativo. La utilidades de UNIX, as como las aplicaciones
de los usuarios, lo utilizan para que realice por ellas los servicios de interfaces necesarios con el hardware
(status, etc). Reside permanentemente en la memoria. El kernel maneja los procesos y los recursos del
siguiente modo:
-
Directorio raz: en muchos sistemas Unix es el directorio HOME del superusuario. Contiene
un fichero muy importante para el arranque del sistema, el unix (depende del sistema el
nombre del fichero: dgux, xenix, vmlinux, etc), que es el ncleo del sistema operativo. Por
lo dems, habitualmente no habr ms que entradas de directorios en la raz.
Directorio usr: es el directorio de los usuarios. De l cuelgan normalmente los
subdirectorios de los diferentes usuarios del sistema. Adems contiene otros subdirectorios
(bin, sbin, doc, include, lib, man, tmp, spool) , que esencialmente tienen por objeto
proporcionar herramientas para la programacin.
Directorio bin: Contiene algunas rdenes de uso habitual por los usuarios del sistema.
Directorio sbin: Contiene algunos programas relacionados con la administracin del
sistema, y que por tanto, estn reservados al superusuario.
Directorio dev: Contiene un conjunto de ficheros especiales destinados a la gestin de
perifricos (console, hda, fd0, lp0, tty,...).
Directorio etc: Contiene ficheros y herramientas empleados para la administracin del
sistema. Contiene un subdirectorio default en el que se almacenan los valores por defecto de
algunas variables del sistema, as como un subdirectorio rc.d, en el que se encuentran los
ficheros de comando (shell-scripts) que sern ejecutados segn el nivel de inicializacin
elegido.
Directorio tmp: Al igual que /usr/tmp es otro directorio de uso temporal.
Directorio var: Complementa al directorio usr. De hecho, muchos subdirectorios de usr en
realidad son ligaduras a directorios de var, e.d., estn fsicamente ubicados como
subdirectorios de var, aunque tambin pueden accederse a travs de usr.
Directorio mnt: Habitualmente todos los sistemas Unix disponen de este directorio, que se
emplea para montar sobre l otros sistemas de ficheros. Por ello este directorio estar
generalmente vaco.
Descripcin:
Este comando cambia la contrasea para usuarios y grupos. Un usuario normal, slo puede
cambiar su propia contrasea, aunque el superusuario puede cambiar todas las contraseas del
sistema. El administrador de un grupo puede cambiar cualquier contrasea del grupo. Tambin
se cambia la informacin sobre la cuenta, como el nombre completo, el login de entrada o la
caducidad de la cuenta y los intervalos de caducidad de la contrasea.
Sintaxis
passwd
Si el administrador quiere cambiar alguna contrasea passwd nombre_usuario
passwd [-f|-s] [name]
-s se usa para el cambio del shell
-f se usa para el cambio de la informacin del usuario
passwd [-g] [-r|R] group
-g para cambiar la contrasea de un grupo.
-r para eliminar la contrasea de un grupo.
-R para restringir el grupo a todos los usuarios
passwd [-x max] [-n min] [-w warn] [-i inact] name
-x indica el n de das que la contrasea es vlida.
-n indica el mnimo n de das durante los cuales la contrasea no puede ser cambiada
-w indica el n de das en los que el usuario recibir un aviso de contrasea a caducar.
-i se utiliza para desactivar una cuenta que no se utiliza durante un periodo de das.
passwd l|-u|-d|-S|-e name
-l desactiva la cuenta cambiando la clave a un valor que no valida una entrada nunca.
-u reactiva la cuenta y deja la clave a su valor anterior.
-d para borrar la clave de un usuario.
-S para consultar el estado de una cuenta.
-e para que la clave caduque de forma inmediata.
1.9.2. Comando pwd.
Permite conocer en cada momento el directorio en el estamos situados.
1.9.3. Comando ls.
Se utiliza para visualizar los ficheros del directorio actual. La orden ls presenta los ficheros por
orden alfabtico. Tambin puede indicarse como argumentos los nombres de ficheros o directorios, y
adems se pueden utilizar las mscaras * e ? igual que en DOS. Si se indican varios ficheros como
argumentos, estos deben ir separados por espacios en blanco.
ls l, o simplemente l, es similar a la salida del comando DIR en el DOS. Con esta orden, adems
de indicar los nombres de los ficheros, se presenta la siguiente informacin (atributos):
- Tipo de fichero: ocupa un carcter (-: normal, d:directorio, p:pipe, c:fichero especial de
caracteres, b: fichero especial de bloques, l:ligadura simblica).
- Permisos de lectura/escritura/ejecucin: ocupan los siguientes 9 caracteres, y se dividen en
permisos de usuario (los 3 primeros), permisos del grupo (los 3 siguientes) y permisos para
otros usuarios.
- N de ligaduras no simblicas al fichero: n de entradas de directorio que se refieren al
fichero.
- Usuario propietario del fichero.
- Grupo propietario.
- Tamao del fichero en bytes.
- Fecha y hora de la ltima modificacin del fichero.
- Nombre del fichero.
-a
-R
-F
-C
-r
-d
-1
-m
Con esta opcin se visualizan tambin los ficheros ocultos. Un fichero es oculto si su primer
carcter es un punto.
Si el argumento es un directorio, la opcin R visualiza el subrbol de directorios que cuelga de l,
as como los ficheros contenidos en cada uno de esos subdirectorios.
Indica para cada fichero su tipo (/si es un subdirectorio, * si es un ejecutable y @ si es una ligadura
simblica).
Realiza el listado de una forma ms compacta, por columnas.
Realiza la salida en orden alfabtico inverso.
Si el argumento pasado a la orden es el nombre de un directorio, no nos muestra su contenido, sino
que muestra los atributos correspondientes a dicho directorio.
La salida se presenta en una sola columna
La salida se presenta separada por comas.
Otras opciones de inters de la orden ls.
Ejemplo1: Observar la diferencia existente entre los resultados de las dos rdenes siguientes:
- ls dl /etc
- ls l /etc
Ejemplo2: Indica el comando y las opciones correspondientes a usar para mostrar el nombre de
cualquier fichero (incluidos los ocultos) introducido/s como argumento/s desde el directorio actual y en
una sola lnea.
- ls am arg1, arg2, .arg3, ....
- ls a m arg1, arg2, .arg3,
1.9.4. Trabajo con directorios.
Para movernos por el rbol de directorios se usan unas rdenes idnticas a las del DOS.
1.9.4.1. Comando cd.
Con esta orden se cambia el directorio actual, siendo ste ahora el indicado en la orden.
- El punto simple . indica el directorio actual.
- Los dos puntos consecutivos .. el directorio padre del actual.
- La barra hacia la derecha ( / ), el directorio raz.
La orden cd sin argumentos lleva al usuario que la invoca a su directorio HOME.
Sintaxis:
cd [camino_subdirectorio]
mkdir
camino_subdirectorio
Ejemplo: Indicad cmo podramos copiar todo el contenido de un directorio1 (/etc), incluidos
todos sus subdirectorios, en otro directorio2 (/tmp).
cp r /etc/* /tmp
1.9.5.3. Comando mv.
Realiza el movimiento de ficheros. Cuando ambos argumentos son nombres de ficheros esta
orden tiene el significado de cambiar el nombre del fichero fuente, mientras que si destino es un
directorio se trasladan los ficheros indicados en fuente a destino.
mv fuente destino
10
11
Ejemplo1: Qu rdenes podramos usar para enviar el contenido de un fichero determinado llamado
pepe a un terminal determinado (tty2)?
- cat pepe > /dev/tty02
- cp pepe /dev/tty02
Ejemplo2: Qu ocurrir si un usuario cualquiera ejecuta ls -lR / > /dev/tty02
1.9.7. Permisos de acceso.
Son atributos que definen la forma en que puede acceder al fichero o directorio un usuario
cualquiera del sistema.
Cuando un usuario crea un fichero o directorio en el sistema, automticamente se convierte en su
propietario (owner), y en principio puede leer y escribir sobre l. El resto de usuarios (salvo naturalmente
el superusuario) slo podr leerlo. Esta situacin puede cambiarse.
Los usuarios, al ser creados por el superusuarios, se asignan a un grupo de usuarios.
Los permisos de acceso a un fichero se dividen en tres niveles:
- Accesos para el propietario.
- Accesos para un grupo de usuarios.
- Accesos para el resto.
Adems, existen tres clases de permisos:
- De lectura
- De escritura.
- De ejecucin.
En el caso de un directorio, el permiso de lectura indica que se puede examinar el contenido del
directorio (leer sus entradas de directorio), el de escritura que se pueden crear, modificar o borrar entradas
de directorio, y el de ejecucin que se puede acceder al directorio (se puede pasas a travs del directorio
en busca de otros subdirectorios).
Los derechos no se suman, es decir, se aplican exclusivamente aquellos que corresponden a la
categora en la que se enmarca el usuario (usuario, grupo u otros).
Ejemplo: Se han obtenido los atributos de un fichero a.out mediante la orden ls l a.out y el resultado
ha sido el siguiente:
-rwxxr-x
1
al123 alumnos
12798 Dec 31 18:11 a.out
1.9.7.1. Comando chmod.
Para un determinado fichero o directorio, el propietario o el superusuario pueden cambiar los
permisos de acceso por medio de la orden chmod, que tiene la siguiente sintaxis:
chmod [-R][quien] +-=permisos{,quien +-=permisos} ficheros
Donde quien puede ser una combinacin de: a(all) para todos, u (user) para el propietario del
fichero (valor por defecto), g (group) para el grupo, y o (others) para el resto de usuarios.
Los permisos pueden ser una combinacin de: r para lectura, w para escritura y x para ejecucin.
La opcin R se emplea para que la orden se aplique no slo a los ficheros que respondan al
patrn indicado, sino tambin en todo el subrbol de directorios que cuelgue del directorio afectado.
OBSERVACIONES:
Para borrar un fichero se necesitan derechos de acceso y escritura sobre el directorio en donde se
encuentre el fichero, as como el derecho de escritura sobre el fichero. Sin embargo, para modificar el
fichero (sin borrarlo) slo se necesita el derecho de acceso al directorio, y el derecho de escritura sobre el
fichero (aunque sin derecho de lectura no se podr leer su contenido).
Ejemplo1: Indicad la orden a ejecutar para aadir derechos de lectura y escritura a los ficheros (o
directorios) del directorio /usr/alumnos/al123 que empiecen por a, para los usuarios del grupo al que
pertenece el usuario.
chmod g+rw /usr/alumnos/al123/a*
12
Ejemplo2: Para los mismos ficheros anteriores, quitar derechos de ejecucin al usuario propietario, y
poner el derecho de lectura para los usuarios que no pertenecen al grupo.
chmod u-x, o+r /usr/alumnos/al123/a*
Ejemplo3: Para establecer que el usuario propietario tenga nicamente derechos de lectura, y que los
dems usuarios no tengan ningn derecho:
chmod u=r, go-rwx /usr/alumnos/al123/a*
umask mascara
El sistema utiliza este valor umask para definir los derechos de los ficheros y directorios recin
creados, sustrayendo este valor al indicado en la llamada al sistema realizada para la creacin del fichero
o directorio (open o creat). De esta forma, como el sistema crea normalmente los ficheros y directorios
con la mscara 0666, si el valor de umask es 0022, la diferencia es 0644, que son los derechos que
finalmente se asignan al fichero o directorio.
Ejemplo: Para conseguir que los ficheros o directorios recin creados adquieran como mscara
de derechos por defecto rw-rww- tendramos que considerar el valor octal 0004. Por qu?.
1.9.7.3. Comando chown.
Permite transferir la propiedad del fichero o directorio a otro usuario. Su sintaxis es:
chown [-R] usuario ficheros
siendo usuario el nombre del nuevo usuario propietario de los ficheros indicados. Por supuesto,
slo el propietario (NO EN LINUX) de los ficheros indicados o el superusuario pueden ceder la
propiedad de los mismos. La opcin R se emplea de nuevo para que la orden se aplique no slo a los
ficheros que respondan al patrn indicado, sino tambin en todo el subrbol de directorios que cuelgue del
directorio afectado.
1.9.7.4. Comando chgrp.
Permite transferir la propiedad del dichero a todo el grupo. La sintaxis es similar al comando
chown y funciona del mismo modo. En Linux, slo la puede ejecutar el superusuario al igual que chown.
chgrp [-R] grupo ficheros
13
14
15
Los comandos aceptados por vi son combinaciones de unas pocas letras, y algunos de ellos
provocan la entrada del editor en modo texto. En el modo texto el editor acepta caracteres desde teclado
para introducirlos en el fichero, as como la tecla de borrado (Del). Para volver al modo comando se pulsa
la tecla de escape.
hlkj
retorno de carro
b
e
0
$
a
i
O
o
x
dd
r
u
U
J
Q
ZZ
:wq
:w
:q
:q!
Control-d
Control-b
Control-f
Control-u
nG
G
Control-g
Control-L
16
n
t
m
d
y
D
H
M
S
T
w
a
h
r
Ejemplo1: Indicar la orden correspondiente a usar por el usuario para establecer como fecha y
hora del sistema el 27 de Abril del 2005, a las 16:30 horas.
date 0427163005
Ejemplo2: Indicar la orden correspondiente para obtener la fecha con el siguiente formato:
FECHA DEL SISTEMA: 04/27/05
HORA: 16:40:23
date +FECHA DEL SISTEMA: %m/%d/%y%Nhora:%H:%M:%S
1.10.2.2. Comando cal.
El comando cal presenta un calendario en pantalla, correspondiente al ao indicado como
argumento. Su sintaxis es:
cal [mes] ao
1.10.2.3. Comando calendar.
Proporciona un sencillo servicio de agenda. Su objeto es inspeccionar un fichero llamado
calendar, en el directorio HOME del usuario. Cada lnea de este fichero contiene un aviso o
recordatorio, que debera ser mostrado (ejecutando el comando calendar en la fecha indicada). Para
ello, cada uno de estos avisos debe ir acompaado de la fecha en que debe mostrarse. El formato en que
puede ir indicada la fecha es (mes-da), y no se impone una ubicacin concreta dentro de la lnea,
pudiendo ir en cualquier parte de sta.
Ejemplo1: Contenido de un fichero calendar:
8/5
16/7
9/24
CUMPLEAOS DE PEPE
BODA DE ANTONIO
RECARGAR TARJETA MVIL
17
fichero2:
linea 1 de fichero2
linea 2 de fichero1 y fichero2
linea 3 de fichero1 y fichero2
linea 4 de fichero2
18
Comprueba si todos los ficheros indicados estn ya ordenados. Si lo estn, devuelve como
errorlevel un 0, mientras que si no lo estn, muestra un mensaje indicativo en pantalla, y el
errorlevel es 1
m
Mezcla los ficheros argumentos, que deben estar ya ordenados, para presentar en la salida
estndar el resultado de ordenar el conjunto (se utiliza cuando los ficheros son grandes por
razones de eficiencia).
d
Ordena considerando nicamente los caracteres alfabticos, numricos y blancos, ignorando
los dems.
f
Ignora la distincin entre las maysculas y minsculas
o fichero
Enva la salida del programa al fichero indicado.
r
Realiza la ordenacin en sentido inverso
t separador El carcter indicado como separador se utiliza para delimitar campos dentro de cada lnea
del fichero o ficheros indicados como argumento (por defecto es un blanco)
n
Realiza una ordenacin aritmtica cuando aparece al comienzo de la lnea una cadena de
caracteres numrica, precedida opcionalmente por un cierto n de blancos, y un signo
aritmtico (+,-)
M
Se consideran los tres primeros caracteres de cada lnea como un nombre abreviado de mes
(Jan, Feb, etc), de modo que se ordena siguiendo su enumeracin.
u
Para aquellas lneas que tengan igual clave, slo considera una de ellas.
+n
Se salta n campos antes de empezar a ordenar
19
defecto). Por defecto, se emplea como clave el primer campo de cada lnea en ambos ficheros, los cuales
deben estar ordenados de acuerdo a dicha clave.
En la salida por defecto se muestra una lnea por cada par de lneas de los ficheros argumento
que tengan la misma clave, que corresponde a la unin de ambas lneas, pero sin duplicar la clave comn.
Se emplea la opcin t para indicar un separador diferente. Asimismo, si se desea utilizar un
campo distinto como clave se emplea la opcin -jn m, siendo n el n del fichero (1 2), y m el n de
campo en el fichero argumento n.
1.10.5.5. Otros comandos.
head fichero
tail fichero
nl fichero
split [-num] fichero prefijo
wc fichero
look cad fichero
nombre_de_directorio
criterio_de_bsqueda
accin
20
-type x
-links n
-user nombre_usuario
-group nombre_usuario
-size n
-atime n
-mtime n
-ctime n
-perm [-] m
Ejemplo1: Indicar la orden que permita eliminar todos los ficheros del directorio actual (y de sus
subdirectorios) que no han sido utilizados en los ltimos cien das.
$ find . atime +100 exec rm \{\} \;
Ejemplo2: Indica la orden que permita localizar y presentar en pantalla los ficheros cuyo nombre
comience con pe, que se encuentren en el subrbol de directorios /usr/alumnos.
$ find /usr/alumnos name pe* -print
Ejemplo3: Indicar la orden que permita localizar y presentar en pantalla los ficheros regulares cuyo
nombre empieza por f o g y que ocupan en disco 3 o ms bloques, dentro del subrbol de directorios
/usr.
$ find /usr -type f name [fg]* size +2 print
$ find /usr \( -type f a name [fg]* a size +2 \) -print
Ejemplo4: Indicar la orden que permita localizar y presentar en pantalla los ficheros del usuario al123
cuyo nombre empieza por pe (en todo el rbol di directorios).
$ find / -name pe* a user al123 -print
Ejemplo5: Indicar la orden que localiza y presenta en pantalla el nombre y atributos de los ficheros y
directorios que o bien pertenecen al usuario al123 y su nombre empieza por f o p, o bien no
pertenecen al grupo escuela (en todo el rbol de directorios).
$ find / \(\(\( -user al123 \) a \( -name [fp]* \) \) o \
\( ! group escuela \) \) exec ls l \{\} \;
1.10.6.2. Comando grep.
Permite localizar una palabra clave o una frase en varios ficheros, indicando las lneas y ficheros
en los que aparece.
grep [opciones] patrn ficheros
El patrn utilizado puede contener espacios en blanco, pero en tal caso tenemos que encerrarlo
entre apstrofos o comillas dobles. Asimismo, para expresar el nombre de los ficheros podemos utilizar
las mscaras (* y ?).
21
Los patrones de bsqueda no tienen por qu limitarse a palabras o frases determinadas. Pueden
construirse patrones ms generales utilizando los formatos de sustitucin siguientes:
.
[...]
[^...]
^...
...$
\c
n
v
c
i
x
Ejemplo1.- Indicar la orden que busca la palabra pepito en los tres ficheros indicados: pepe1, pepe2,
pepe3.
$ grep pepito pepe1 pepe2 pepe3
Ejemplo2.- Indicar la orden que localiza las lneas que contienen la palabra con en los ficheros del
directorio actual cuyo nombre empiece por fic. Diferenciar entre stas dos rdenes:
$ grep con fic*
$ grep con fic*
Ejemplo3.- Indicar que hace la siguiente orden:
$ grep ^La.*[ns]$ *.txt
Esta orden va a mostrar las lneas (y los ns de lnea) de los ficheros del directorio actual
cuyo nombre acabe en .txt que contengan lneas que empiecen por la palabra La, y
acaben en n s.
Ejemplos posibles:
Fic.txt:2: La pinto de colores
Fic.txt:5: La cancin
1.10.6.3. Comando sed.
Permite procesar el contenido de un fichero de texto lnea a lnea, sometiendo a las mismas a
determinadas acciones, envindose el resultado de este procesamiento a la salida estndar. La sintaxis
bsica de este comando es:
sed [opciones] comandos-sed fichero
El formato de las instrucciones aceptadas por sed es el siguiente:
[Direccin, [Direccin]] funcin [argumentos]
donde las direcciones pueden ser n decimales especificando lneas concretas del fichero, o
rangos de lneas (en la forma l1, l2 para indicar el rango de lneas desde la l1 hasta la l2), un $
representando la ltima lnea del fichero e incluso expresiones regulares encerradas entre /. La forma de
22
construir expresiones regulares es la misma que la descrita para el comando grep. Adems, se puede
utilizar \( y \) para delimitar campos sobre la lnea que encaja en la expresin regular considerada.
Si se desea utilizar ms de un comando de edicin hay que introducir un comando por lnea y
encerrar la lista completa entre apstrofos.
Si no se introduce ninguna direccin, la accin indicada afectar a todas las lneas del fichero.
El programa sed acepta las dos opciones siguientes:
-n
Suprime las salidas al dispositivo de salida estndar, salvo que se indique de forma
explcita la visualizacin en la accin de procesamiento.
-f fichero
encajaran en dicha expresin regular. Adems, se ha delimitado un campo sobre dicha expresin regular
(el objeto regalado en este caso). Este campo se puede referenciar posteriormente mediante \1. Si se
definen ms campos, estos se referencian de la misma forma: \1,\2,etc...
Si se desea utilizar ms de un comando de edicin hay que introducir un comando por lnea y
encerrar la lista completa entre apstrofos.
a\ linea_texto
23
Ejemplo3: Indicar la orden que permita borrar las lneas de un fichero que contengan la palabra clave.
sed /clave/d fichero
Ejemplo4: Indicar la orden para insertar una lnea en blanco detrs de cada lnea de un fichero.
sed i\> fichero
Ejemplo5: Indicar la orden para borrar todas las lneas vacas de un fichero:
sed /^$/d fichero
Ejemplo6: Indicar la orden para mostrar el campo comentario del fichero /etc/passwd, que contiene la
informacin de los usuarios del sistema (en dicho fichero cada lnea corresponde a la informacin de un
usuario, y esta informacin est dividida en campos separados por :)
sed n s/^al123:.*:.*:.*:\(.*\):.*:.*$/ \1 /p /etc/passwd
Ejemplo7: Indicar la orden para obtener el valor asignado a la variable PATH en el fichero .profile de
vuestro usuario.
sed n s/^PATH=//p /usr/alumnos/al123/.profile
Ejemplo8: Probar finalmente el siguiente ejemplo, y descubrir su efecto:
sed /^c[aeh].*.*.*[^n]$/d fichero > fichero2
1.11. El Shell
El shell es el intrprete de comandos en Uns. Acta como interface del usuario con el sistema
operativo, traduciendo sus rdenes y ejecutando sus programas. Los sistemas Unix suelen ir dotados de
varios shells, de forma que el usuario puede elegir aqul que le resulte ms cmodo para trabajar. Entre
ellos, los ms utilizados son el shell Bourne y el shell-C. Siendo el primero el que vamos a ver.
El proceso asociado al intrprete de comandos se identifica por el nombre sh (si se trata del shell
Bourne), y un usuario puede en cualquier momento crearse un shell integrado dentro del actual
ejecutando este programa:
$ sh
Al ejecutar esta orden aparece de nuevo el inductor o prompt del sistema ($), pero ahora este
prompt corresponde al nuevo shell creado. Para abandonar estos shells anidados se debe teclear la orden
exit o bien Control-d, y en tal caso se retorna al shell anterior.
Tambin podemos lanzar un shell anidado y ejecutar bajo l un fichero de comandos, que en Unix
se llama shell-script, de forma que cuando ste termine se regrese al shell progenitor. Para ello se requiere
el derecho de lectura sobre el fichero de comandos. La sintaxis es:
$ sh shell-script
Tambin es posible ejecutar un shell-script de forma directa, tecleando su nombre sobre el prompt
del shell. Tambin se creara en este caso un nuevo shell integrado en el actual para la ejecucin de dicho
shell-script, pero se necesitan derechos de lectura y ejecucin sobre el fichero de comandos:
$ shell-script
Podemos construir lneas de rdenes ms complejas de la forma siguiente:
- & Todos los programas separados por & se ejecutan de forma simultnea.
- ; Los programas separados por ; se ejecutan secuencialmente, es decir, conforme termina
uno se ejecuta el siguiente en la lnea de rdenes.
- && Se ejecuta el programa que aparece a la izquierda de &&, y si ste retorna al terminar
un valor de errorlevel 0, entonces se ejecuta el programa que aparece a la derecha de &&.
- || Es similar al anterior, pero slo ejecuta el siguiente proceso si el anterior devolvi un valor
de errorlevel destinto de 0.
1.11.1. Redireccionamientos y pipes.
-
24
Otra de las posibilidades del shell es la creacin de pipes, cuyo objetivo es ejecutar en
paralelo dos procesos, haciendo que la salida de uno de ellos sea la entrada del otro. La
creacin de pipes se realiza mediante el smbolo |!, que separa los dos procesos
considerados.
Ejemplo: Mediante la orden siguiente obtenemos un listado alfabtico de los ficheros del
directorio actual.
ls r | sort
-
Los sistemas Unix disponen de diversas herramientas, llamadas filtros, que se emplean
habitualmente en pipes para modificar en cierta forma la salida de algn proceso.
o
Uno de estos programas es tr, cuyo objeto es transformar algn carcter o grupo
de caracteres. Puede indicarse en una sola orden tr un cambio mltiple.
$ ls l | tr e t
$ ls l | tr ap bc
Otro de estos programas es tee, que enva la salida del proceso precedente en la
pipe hacia la salida estndar y hacia un fichero (indicado como argumento).
$ ls l | tee salida
La referencia a variables admite algunos formatos de sustitucin, segn la variable est definida o
tenga un valor no vaco:
${variable}: Se referencia el valor de la variable (las llaves se ponen slo cuando en la lnea en
que aparece referenciada, aparece detrs alguna informacin, de forma que stas actan como
separadores.
${variables:-palabra}: Si la variable es no vaca, se referencia su contenido, pero si tiene
asignado un valor nulo (o no ha sido declarada) se referencia el valor literal palabra, pero no se asigna
nada a la variable.
${variable:=palabra}: Si la variable tiene asignado un valor no vaco, se referencia su contenido.
En caso contrario se le asigna el valor literal palabra y se referencia dicho valor (esta orden no sirve para
los parmetros $0, $1, ...).
25
26
27
o bien
[ expresin ]
Operador and
28
-o Operador or
Evala a cierto si el fichero existe y tiene permiso de lectura para el usuario que accede
Evala a cierto si el fichero existe y tiene permiso de escritura para el usuario que accede
Evala a cierto si el fichero existe y tiene permiso de ejecucin para el usuario que accede
Evala a cierto si el fichero existe y es un fichero regular
Evala a cierto si es un directorio.
Evala a cierto si el fichero existe y es un fichero especial de caracteres.
Evala a cierto si el fichero existe y es un fichero especial de bloques
Evala a cierto si fichero existe y es una ligadura simblica
Evala a cierto si fichero existe y es una pipe
Evala a cierto si fichero existe y tiene activo su bit SETUID
Evala a cierto si fichero existe y tiene activo su bit SETGID
Evala a cierto si fichero existe y tiene tamao mayor que 0
Evala a cierto si fichero abierto cuyo descriptor es el n fildes (1 por defecto) est
asociado a un terminal
Evala a cierto si la longitud de la cadena s1 es 0
Evala a cierto si la longitud de la cadena s1 es distinta de 0
Evala a cierto si ambas cadenas son idnticas
Evala a cierto si ambas cadenas no son idnticas
Evala a cierto si s1 no es la cadena vaca
Evala a cierto si los dos enteros (n1,n2) son exactamente iguales
Evala a cierto si el entero n1 es extrictamente menor que n2
Evala a cierto si el entero n1 es extrictamente mayor que n2
Evala a cierto si el entero n1 es menor o igual que n2
Evala a cierto si el entero n1 es mayor o igual que n2
Evala a cierto si el entero n1 es distinto que n2
Ejemplo1:
$ for VAL in 1 2 3 4
do
echo $VAL
done
Ejemplo2:
$ for FICHERO in *
do
echo $FICHERO
done
until condicin do
comando/s
done
29
Ejemplo1: Escribid un shell-script que al ejecutarlo pida un valor para la variable vari. Si el valor
introducido es exactamente igual a la cadena pepe, abandona la ejecucin. En caso contrario vuelve a
solicitar otro valor para dicha variable.
Fichero: salta
while true
do
echo INTRODUZCA EL VALOR DE LA VARIABLE
read vari
if [ $vari=pepe ]
then
echo ABANDONO EJECUCION
break
fi
done
Ejemplo2: Ejecutar el siguiente fichero de comandos y estudiad su funcionamiento
Fichero: saltadoble
while true
do
echo INTRODUZCA EL VALOR DE LA PRIMERA VARIABLE
read var1
while true
do
echo INTRODUZCA EL VALOR DE LA SEGUNDA VARIABLE
read var2
if [ $var1=pepe a $var2 =juan]
30
then
echo ABANDONO EJECUCION
break 2
else
if [ $var2=juan ]
then
break
fi
fi
done
done
Ejemplo: Escribid un shell-script que listen los ficheros del raiz o del home segn la palabra
introducida por el teclado sea todos o local. Si la palabra introducida no es ninguna de ellas,
se ejecuta echo no has introducido una opcin vlida
Fichero: procesos
echo INTRODUZCA PALABRA
read vpal
case $vpal in
todos) ls l / ;;
local) ls l /home/usuario;;
*) echo NO HAS INTRODUCIDO NINGUNA OPCIN VLIDA
esac
1.12.6. Declaracin de funciones.
Es posible la creacin de funciones dentro de un shell-script (los argumentos de la misma se
acceden como argumentos posicionales: $!, $2, etc). La sintaxis para ello es la siguiente:
nombre_funcion ( ) { comandos }
Entre los posibles comandos est return nmero, que finaliza la ejecucin de la funcin
devolviendo el valor indicado como retorno de errorlevel (es el valor devuelto por las funciones del shell).
31
2.
3.
4.
5.
En el fichero /etc/profile hay un conjunto de rdenes que se ejecutan cada vez que un usuario
entra al sistema. Obtn los atributos de dicho fichero con el comando ls l, para ver quin es el
usuario y grupo propietarios. Qu derechos tienes sobre dicho fichero?. Puedes ver su
contenido?.
Determina el terminal al que ests conectado con el comando. Quita entonces los derechos de
lectura y escritura sobre dicho terminal al resto de usuarios del sistema, pero hazlo directamente,
sin usar el comando mesg.
Un usuarios (dai1d20) ha quitado el derecho de ejecucin para los usuarios del grupo users (al
que l pertenece) sobre su directorio HOME. Entonces dai1d20 crea un subdirectorio dentro de
su directorio HOME, al que llama dire, y sobre ste pone los derechos rwx---rwx. Podr el
usuario dai1d20 crear una ligadura simblica a dicho subdirectorio?. Podr posteriormente
utilizar dicha ligadura para acceder a dicho subdirectorio?. Qu mnimos derechos le hacen
falta para poder utilizar la ligadura para acceder a ese subdirectorio?.
Ejecuta la orden siguiente desde tu directorio HOME: ls dl. Cuntas ligaduras aparecen, por
qu?.
Crea en tu directorio HOME un subdirectorio pepe, y dentro de l, otro subdirectorio juan.
Crea dentro de juan una ligadura a pepe, y ejecuta la orden:
ls dl /home/usuario/pepe /home/usuario/pepe/juan/ligadura, donde cada usuario debe
poner su nombre. Qu ocurre con la primera columna?. Qu ocurre con los derechos en la
ligadura?. Modifica los derechos sobre el directorio a travs de la ligadura, quitando por
ejemplo al resto de usuarios del sistema los derechos de lectura y escritura. Vuelve a
ejecutar la orden anterior y mira qu sucede.
6.
Ejecuta la orden chmod ugo-rwx . desde tu directorio HOME. Ejecuta entonces las siguientes
rdenes, y observa el resultado:
pwd
cd
cd ..
ls l
cd /
Asigna finalmente derechos de lectura, escritura y ejecucin para el usuario propietario para tu
directorio HOME.
7.
8.
Crea en tu directorio HOME un fichero fic utilizando el comando cat. Crea entonces una
ligadura (hard link) a dicho fichero llamada fic, tambin en tu directorio HOME. Ejecuta la
orden:
ls l fic1 fic2
Indica la primera columna que fic2 es una ligadura a fic?. Borra ahora fic1, y ejecuta la
orden:
cat fic2
9.
Crea un subdirectorio xdir en tu directorio HOME, y una ligadura a este subdirectorio ydir.
Borra entonces el subdirectorio. Cmo afecta eso a la ligadura simblica?. Puedes acceder
todava al subdirectorio?. Finalmente, borra la ligadura simblica.
32
10. Edita tu fichero .profile (en tu directorio home), y adele rdenes para que se realicen las
siguientes acciones cada vez que entres al sistema:
a.
b.
c.
d.
Que te indique la ltima vez que entraste al sistema (utilizar el comando date
redireccionando la salida a un fichero .lastlogin, que deber ser visualizado al entrar al
sistema.
Obtener los servicios de agenda (calendar) o del comando (cal).
Te muestre los usuarios conectados al sistema.
33
18. Indicar que hacen las siguientes rdenes sort sobre un fichero con ocho campos delimitados con:
a)
b)
c)
d)
sort t: +3 fichero
sort t: +3 4 fichero
sort t: +0 1 +5 fichero
sort t: +2.3 fichero
19. Sobre el siguiente fichero, indicar las rdenes correspondientes para obtener las siguientes
salidas:
fichero
ab: Albacete:145
cr:Ciudad Real:50
cu:Cuenca:20
Salida1
Salida2
ab:
cr:
cu:
ab: Albacete
cr: Ciudad Real
cu:Cuenca
20. Indicar la orden para mostrar el campo comentario del fichero /etc/passwd, que contiene la
informacin de los usuarios del sistema (en dicho fichero cada lnea corresponde a la
informacin de un usuario, y esta informacin est dividida en campos separados por :).
21. Indicar la orden para obtener el valor asignado a la variable PATH en el fichero .profile de
vuestro usuario.
22. Indicar el efecto de la siguiente orden:
sed /^c[aeh].*.*.*[^n]$/d fichero >fichero2
23. Crear un shell_script para asignar ciertos derechos (especificados como primer argumento) a un
fichero pasado como segundo argumento.
24. Crear un shell_script que nos indique si un fichero pasado como argumento existe y si el usuario
puede leer su contenido.
25. Crear un shell_script que compruebe si el usuario que lo invoca tiene derecho de lectura y
ejecucin sobre el fichero pasado como argumento.
26. Crear un shell_script que copie el primer fichero pasado como argumento al segundo, el tercero
lo copia al cuarto y as sucesivamente.
27. Realizar un script que le pases como parmetro el nombre de un fichero donde guardar la
informacin, y que te pida por teclado un nombre y un telfono, lo guarde en el fichero que le
hemos introducido como parmetro, hasta que le introduzcas la palabra fin.
28. Modificar el fichero anterior, para que me pregunte si queremos sobrescribir el fichero o
queremos seguir escribiendo en l sin borrarlo.
29. Hacer un script que te permita consultar la agenda anteriormente creada por nombre o por
telefono, se le da al script el nombre del fichero donde estn los datos, como parmetro.
30. Hacer un script que se pueda consultar la agenda tantas veces como quieras, hasta que
introduzcas la palabra fin, se le da al script el nombre del fichero donde estn los datos, como
parmetro.
31. Escribir un script que pueda hacer las dos cosas, introducir datos o consultarlo.
32. Escribir un script que muestre por pantalla el n de argumentos que recibe el programa y que te
muestre cuales son.
33. Qu hace el siguiente script?
for i in *
do
grep $1 $i && ls l $I
done
34. Crear un script que te muestre el dia, y el mes actual (en castellano)
35. Crear un script que compruebe que existe el fichero que le introducimos como parmetro de
entrada y si tiene permiso para leerlo, en tal caso muestre su contenido.
36. Escribir un script que lea tres palabras por teclado separadas por blancos y te compare cuales son
iguales y cuales distintas.
37. Escribir un script que introduzca nmeros comprendidos entre 1 y 15, como parmetro. Dar
error en caso de que algn argumento no est dentro del rango y terminar sin hacer nada. En
caso contrario generar una lnea por cada argumento con tantos asteriscos como indique el
argumento.
34