Вы находитесь на странице: 1из 34

NDICE

1. USO DEL SISTEMA UNIX...................................................................................................................4


1.1. CARACTERSTICAS DE UNIX. ..........................................................................................................4
1.2. SISTEMAS DE CONTROL Y UTILIZACIN DE RECURSOS. ..................................................................4
1.3. COMPONENTES PRINCIPALES DEL SISTEMA.....................................................................................5
1.4. ENTRADA Y SALIDA DEL SISTEMA. ...................................................................................................5
1.5. CONTRASEA. ...................................................................................................................................6
1.6. RBOL DE DIRECTORIOS. .................................................................................................................6
1.6.1. Principales Directorios del sistema............................................................................................6
1.7. FORMATO DE COMANDOS. ................................................................................................................7
1.8. FORMATO DE LOS COMANDOS SHELL. .............................................................................................7
1.9. COMANDOS DEL SISTEMA. ................................................................................................................7
1.9.1. Comando passwd........................................................................................................................7
1.9.2. Comando pwd.............................................................................................................................8
1.9.3. Comando ls.................................................................................................................................8
1.9.4. Trabajo con directorios. .............................................................................................................9
1.9.4.1. Comando cd. ....................................................................................................................9
1.9.4.2. Comando mkdir................................................................................................................9
1.9.4.3. Comando rmdir. ...............................................................................................................9
1.9.4.4. Comando rm.....................................................................................................................9
1.9.5. Gestin bsica de ficheros........................................................................................................10
1.9.5.1. Comando cat. .................................................................................................................10
1.9.5.2. Comando cp. ..................................................................................................................10
1.9.5.3. Comando mv. .................................................................................................................10
1.9.5.4. Comando ln....................................................................................................................11
1.9.6. Mensajes en el terminal............................................................................................................11
1.9.6.1. Comando who. ...............................................................................................................11
1.9.6.2. Comando finger..............................................................................................................11
1.9.6.3. Comando tty...................................................................................................................11
1.9.7. Permisos de acceso...................................................................................................................12
1.9.7.1. Comando chmod. ...........................................................................................................12
1.9.7.2. Comando umask.............................................................................................................13
1.9.7.3. Comando chown. ...........................................................................................................13
1.9.7.4. Comando chgrp. .............................................................................................................13
1.9.8. Recepcin y envo de correo. Comando mail. ..........................................................................14
1.10. COMANDOS DE USO GENERAL. .....................................................................................................15
1.10.1. Editores. .................................................................................................................................15
1.10.1.1. El editor joe. ....................................................................................................................15
1.10.1.2. El editor vi. ......................................................................................................................15

1.10.2. Comandos relacionados con la fecha del sistema. .................................................................16


1.10.2.1. Comando date. .................................................................................................................16
1.10.2.2. Comando cal....................................................................................................................17
1.10.2.3. Comando calendar. ..........................................................................................................17
1.10.3. Comandos para la visualizacin de ficheros. .........................................................................17
1.10.3.1. Comando pg.....................................................................................................................17
1.10.3.2. Comando more. ...............................................................................................................18
1.10.3.3. Comando hexdump..........................................................................................................18
1.10.3.4. Comando bpe...................................................................................................................18
1.10.4. Comandos de comparacin de ficheros..................................................................................18
1.10.4.1. Comando cmp..................................................................................................................18
1.10.4.2. Comando comm...............................................................................................................18
1.10.4.3. Comando diff...................................................................................................................18
1.10.4.4. Comando uniq. ................................................................................................................18
1.10.5. Operaciones sobre ficheros de texto.......................................................................................19
1.10.5.1. Comando sort...................................................................................................................19
1.10.5.2. Comando cut....................................................................................................................19
1.10.5.3. Comando paste. ...............................................................................................................19
1.10.5.4. Comando join. .................................................................................................................19
1.10.5.5. Otros comandos. ..............................................................................................................20
1.10.6. Localizacin de ficheros.........................................................................................................20
1.10.6.1. Comando find. .................................................................................................................20
1.10.6.2. Comando grep..................................................................................................................21
1.10.6.3. Comando sed. ..................................................................................................................22
1.11. EL SHELL ......................................................................................................................................24
1.11.1. Redireccionamientos y pipes. .................................................................................................24
1.11.2. Variables del Shell..................................................................................................................25
1.11.3. Variables de entorno. .............................................................................................................26
1.11.4. Fichero .profile.......................................................................................................................26
1.11.5. rdenes internas del shell. .....................................................................................................27
1.11.6. La orden eval y el operador grave..........................................................................................27
1.12. IMPLEMENTACIN DE SHELL-SCRIPTS.........................................................................................28
1.12.1. Construccin if-then-else........................................................................................................28
1.12.2. La orden test. ..........................................................................................................................28
1.12.3. Construcciones de control iterativas ......................................................................................29
1.12.3.2. Construccin while o until...............................................................................................29
1.12.3.3. Comando expr..................................................................................................................30
1.12.4. Sentencias read, exit y break. ................................................................................................30
1.12.5. Sentencia case ........................................................................................................................31
1.12.6. Declaracin de funciones. ......................................................................................................31

1. USO DEL SISTEMA UNIX.


1.1. Caractersticas de UNIX.
-

Portabilidad: Es posible adaptar fcilmente este Sistema Operativo a diferentes ordenadores de


diferentes fabricantes.
Portabilidad del software: Las aplicaciones software escritas para el UNIX son fcilmente
adaptables a los diferentes ordenadores.
Propsito General: El UNIX es un Sistema Operativo de propsito tal general por lo que es
aplicable a muchos y diferentes entornos de usuarios.
Multitarea: Es posible utilizar diferentes lenguajes en diferentes funciones y que un usuario
pueda estar realizando simultneamente varias tareas. Permite la ejecucin simultnea de varias
tareas (llamadas procesos).
Tiempo Compartido: A cada proceso se le asigna un mnimo de ejecucin de programa por
unidad de tiempo (SCHEDULER).
Multiusuario: Ms de un usuario puede acceder al sistema al mismo tiempo (limitado por el
nmero de terminales).
Interactivo: Cualquier usuario puede comunicarse directamente con el sistema y recibir respuesta
inmediata a su solicitud de ejecucin.
Fcil Modificacin y mantenimiento: El uso del lenguaje C permite al Sistema Operativo ser
fcilmente mantenido y modificado. Esto le da una buena portabilidad.
Su estructura de archivos basada en nodos-i: El uso de una estructura jerrquica permite un fcil
organizacin de archivos, tanto del sistema como de los usuarios.
Silencioso: nicamente visualiza informacin en el caso de producirse un error.
Usa Procesos Fore/Background: Permite a un usuario tener ms de un proceso ejecutndose al
mismo tiempo.
Proceso de textos y documentos: El sistema aporta una serie de herramientas que facilitan esta
labor.
Utilidades de edicin: Creacin, Edicin, Manejo de documentos
Utilidades de Formateado: proporciona herramientas para modificar formatos e imprimir con
calidad.
Comunicaciones: Se pueden establecer redes de comunicaciones UNIX a UNIX por medio de las
utilidades aportadas por el Sistema Operativo. Ningn otro sistema operativo incluye unas
posibilidades de conexin en red tan ajustadamente acopladas y ningn otro sistema operativo
posee la flexibilidad incorporada de estas mismas caractersticas. Tanto si se necesita hablar con
otro usuario a travs de una utilidad de correo como si se necesita transferir archivos extensos de
otro sistema que se encuentra en el otro extremo del pas.
Accounting: Se pueden instalar, para cada usuario, sistemas de conteo, por el cual perdern
acceso al sistema cuando el sistema lo determine.
Proporciona Shell programables El shell programable es una caracterstica que hace que UNIX y
por tanto Linux sea lo que es: el sistema operativo ms flexible de los existentes. Dentro del
marco del shell hay un nuevo mundo accesible a todos aquellos que sean lo suficientemente
aventureros para dominar los entresijos de la sintaxis de los comandos de Linux.
Independencia de dispositivos UNIX. Evita los problemas que supone agregar nuevos
dispositivos contemplando cada perifrico como un archivo aparte. A medida que se necesitan
nuevos dispositivos, el administrador del sistema aade al kernel el enlace necesario. Este
enlace, tambin denominado controlador de dispositivo, garantiza que el kernel y el dispositivo
se fusionan del mismo modo cada vez que se solicita el servicio del dispositivo. A medida que se
van desarrollando y facilitando perifricos mejores para el usuario, el sistema operativo UNIX
permite un acceso inmediato y sin limitaciones a sus servicios, una vez se han enlazado los
dispositivos con el kernel. La clave de la independencia de los dispositivos estriba en la
adaptabilidad del kernel

1.2. Sistemas de control y utilizacin de recursos.


UNIX proporciona sistemas para ayudar al mantenimiento de programas. Proporciona
herramientas con gran cantidad de facilidades en el tema de oficina: Correo, Agenda, Mensajes, Envo de
Documentacin, y otras utilidades. Adems UNIX provee de varios lenguajes de programacin como
pueden ser: COBOL, FORTRAN, Basic, RPG, Pascal, y por supuesto C. UNIX usa generalmente dos
tipos de editores: Editores de lnea y Editores de pantalla (JOE, VI).

1.3. Componentes principales del sistema.


1.
2.
3.

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

Maneja los procesos: asignando recursos, planificando Procesos (Multiusuario) y manejando


solicitudes de servicios del Kernel.
Maneja Unidades: supervisando la transmisin de datos entre las unidades y las aplicaciones.
El Kernel contiene un manejador para las unidades fsicas de cada ordenador. Estos manejadores
son propios para cada ordenador y dispositivo perifrico.

Esencialmente, el KERNEL es el conjunto de programas que controlan el acceso al ordenador,


maneja su memoria y asigna los recursos del sistema a los usuarios, cuando as lo demanden.
Shell
El Shell es realmente la nica parte del Sistema UNIX que el usuario ve. Acta como un
intrprete, permitindole comunicarse con el Sistema Operativo UNIX. Cuando los usuarios introducen
un comando, el Shell, que es un programa que est en constante ejecucin, lo analiza y llama a ejecucin
al programa que realiza la funcin especificada por el comando. Cada usuario que trabaja en el Sistema
UNIX tiene su propio programa Shell o "entorno". Hay ms de un tipo de prompt, dependiendo del
SHELL: Bourne, Berkeley, Creados por los usuarios, Super User.
Un usuario puede utilizar diferentes SHELLS al mismo tiempo. Tambin acta como un
lenguaje de programacin: ya que se combina mediante estructuras de control grupos de comandos
almacenados en archivos llamados SHELLSCRIPTS pudiendo as crear aplicaciones que pueden realizar
tareas complicadas.
1.4. Entrada y salida del sistema.
Dada la caracterstica multiusuario del sistema UNIX y por motivo de seguridad, el acceso al
mismo est restringido.
Slo tendrn acceso al sistema aquellos usuarios a los que el administrador haya asignado
previamente un identificativo (ID). El identificativo de usuario, asignado por el administrador, puede
tener longitud variable, pero tan slo sern significativos los primeros ocho caracteres. No estn
permitidos los espacios.
Para incrementar la seguridad, cada usuario puede aadir opcionalmente una contrasea de
acceso al sistema. La existencia de contrasea puede ser impuesta por el administrador.
Cuando se va a trabajar desde un terminal conectado directamente al ordenador, nada ms
encenderlo aparecer un mensaje solicitando la identificacin del usuario. Este mensaje puede ser
modificado por el administrador.
login:
En este momento el usuario puede introducir el identificativo que se le haya asignado y pulsar
Intro. Es importante que el identificativo sea introducido en minsculas, pues en caso contrario el sistema
asume que el terminal slo dispone de maysculas y mantendr la comunicacin de esta forma durante
toda la sesin de trabajo. Esto puede traer complicaciones, pues el sistema UNIX diferencia maysculas
de minsculas.

En el caso de que el usuario tuviera contrasea de acceso al sistema, le ser solicitada a


continuacin por medio de la palabra passwd. Para mayor seguridad, la contrasea tecleada por el
usuario no aparece jams en la pantalla. Cualquier equivocacin al teclear el identificativo har que el
sistema solicite una contrasea y una vez tecleada sta, contestar con login incorrect y volver a pedir
el identificativo. Tan slo cuando el identificativo de usuario y la contrasea de acceso se han introducido
correctamente, aparecern en pantalla una serie de mensajes y el sistema quedar preparado para recibir
las rdenes del usuario.
Siempre que el sistema est en espera para recibir rdenes, aparecer en la pantalla un mensaje
indicativo o prompt.
Para finalizar la sesin de trabajo basta mantener pulsada la tecla control-d, o teclear exit +
Intro. Una vez finalizada la sesin, el sistema vuelve a mostrar los mensajes con los que solicita el
identificativo de usuario. En este momento se podr apagar el terminal.
1.5. Contrasea.
La contrasea puede ser modificada siempre que se desee. Tiene las siguientes caractersticas:
- Cada contrasea deber tener al menos seis caracteres, pero es configurable.
- Son significativos los ocho primeros caracteres.
- Deber tener al menos dos caracteres alfabticos y al menos un carcter numrico o carcter
especial. Cada contrasea deber diferir del login del usuario en tres caracteres.
- Las nuevas contraseas debern diferir de las anteriores al menos en tres caracteres.
- Puede tener limitado su tiempo de efectividad.
1.6. rbol de directorios.
-

La estructura de directorios del S.O. UNIX es arborescente.


El directorio raz se representa con la barra inclinada a la derecha ( / ), que tambin se utiliza
como separador en los nombres de ruta (pathnames).
El nombre de los ficheros en UNIX puede tener hasta 255 caracteres de longitud, y en ellos
el punto (.) es uno ms.
Directorio HOME de un usuario.- es aqul directorio donde se le deja al usuario cuando
entra al sistema. Es un directorio definido por el superusuario al crear la cuenta de cada
usuario, donde normalmente el usuario tiene plena libertad para crear y gestionar sus
ficheros.

1.6.1. Principales Directorios del sistema.


-

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.

1.7. Formato de comandos.


El formato de los comandos shell es una secuencia de palabras, cada palabra se separa de la
siguiente por uno o ms espacios. En este contexto, una palabra es una serie de caracteres contiguos no
blancos. El comando es terminado con el carcter Nueva Lnea (\n), el cual se introduce cuando se pulsa
Intro.
La primera palabra es el comando, las restantes palabras son argumentos del comando. Los
espacios son usados como separadores entre argumentos. Si por alguna razn fuera necesario incluir un
espacio en algn argumento, entonces todo el argumento deber ser encerrado entre doble comillas (), o
bien entre comillas simples ().
Comando Opciones Argumentos
cp R ./etc /mnt
Opciones.- es un literal, que usualmente va precedido por el signo menos. Las opciones
modifican la accin de un comando, o indican cmo operar el comando. El efecto de las opciones vara
con cada comando.
Argumentos.- En ciertos comandos del primer argumento suele ser una serie de caracteres que
son utilizados como entrada a un comando, en otros muchos comandos suelen ser nombres de archivos o
directorios que van a ser utilizados.
1.8. Formato de los comandos Shell.
Los comandos shell constan de una sola palabra que se introduce a continuacin del prompt
shell, seguida de un <CR> o una lista de opciones o argumentos. Los argumentos estn separados por
espacios.
La notacin estandarizada es:
- arg: Opciones o argumentos que pueden no estar presentes.
- ....: Indica repeticin de argumentos.
- |: Indica una condicin OR.
Ejemplo:
- comando [argA | argB] .- argA o argB son opcionales.
- comando argA.... .- argA deber estar presente, al menos una vez.
- comando argA [argB...] argA deber estar presente y argB podr estar una o ms veces.
1.9. Comandos del sistema.
1.9.1. Comando passwd.
Este comando permite al usuario cambiar o asignar una contrasea.
Observaciones:
- Es obligatorio su uso.
- Para cambiar una contrasea se necesita conocer la antigua.
- El administrador puede asignar una contrasea nueva.
- Nadie puede visualizar ninguna contrasea.
- La contrasea queda registrada en el archivo /etc/passd y /etc/shadow.
- La contrasea puede tener un mnimo de tiempo efectivo.

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]

1.9.4.2. Comando mkdir.


Permite crear un subdirectorio, donde camino_subdirectorio puede ser un nombre de ruta
relativo o absoluto.
Sintaxis:

mkdir

camino_subdirectorio

1.9.4.3. Comando rmdir.


Permite borrar el subdirectorio, siempre y cundo el subdirectorio est vaco.
Sintaxis: rmdir camino_subdirectorio
1.9.4.4. Comando rm.
Permite borrar ficheros del sistema, aunque para ello necesitamos disponer de ciertos derechos
sobre el fichero y sobre el directorio donde ste se encuentre. La opcin r de esta orden nos permite borrar
incluso directorios, aunque estos no estn vacos. Por tanto, la orden rm r debe manejarse con
cuidado.

1.9.5. Gestin bsica de ficheros.


Un fichero es una secuencia de bytes que reside en disco o cinta. En Unix no se realiza una
interpretacin de la estructura lgica de los ficheros, de forma que todos son tratados por igual,
independientemente de su contenido. As, todos los ficheros (ya sean ficheros de texto, ficheros de datos
con una cierta estructura lgica o ficheros ejecutables) se consideran como una secuencia finita de bytes.
El sistema operativo reconoce el fin de fichero mediante un carcter especial situado al final de todos los
ficheros (Control-d).
1.9.5.1. Comando cat.
Permite visualizar el contenido de ficheros de texto. Su formato es el siguiente:
cat [camino_fichero]
La salida se enva al dispositivo de salida por defecto, que habitualmente ser la pantalla.
Podremos redireccionar la salida a un fichero, mediante el smbolo >, de la forma siguiente:
cat nombre_fichero > nuevo_fichero
Esta orden adems, nos permitir crear pequeos ficheros de texto, mediante la siguiente
sintaxis:
cat > nuevo_fichero o bien cat-> nuevo_fichero
Una vez pulsado Intro, se podrn escribir lneas de texto, que se irn aadiendo al fichero. Se
finaliza la entrada de lneas de texto tecleando Control-d.
Adems, el comando cat se puede usar tambin para concatenar ficheros, con el siguiente
formato:
cat fichero1 fichero2 ... ficheron > fichero_union

1.9.5.2. Comando cp.


Realiza la copia de ficheros. Con esta orden se pueden realizar dos tipos de operaciones:
- Si fuente y destino son ambos nombres de ficheros, entonces se realiza la copia de fuente a
destino.
- Si destino es el nombre de un directorio, entonces fuente pueden ser varios ficheros
(separados por blancos, o definidos por medio de * e ?), y la orden copiar entonces los
ficheros indicados sobre el directorio destino.
En todos los casos, se requieren ciertos derechos para poder realizar esas acciones.
La opcin r de la orden permite hacer operaciones de copia de subrboles de directorios
completos.
Su sintaxis es:
cp [-r] fuente destino

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

1.9.5.4. Comando ln.


Establece ligaduras. Crea una nueva entrada de directorio que corresponde a un fichero ya
existente (el nombre de la ligadura no puede coincidir con el nombre de otra entrada de directorio ya
existente en el directorio en que va a ser creada). El usuario percibe la sensacin de que otro dichero ha
sido creado (el especificado como destino), con el mismo contenido del fichero fuente. Sin embargo, la
copia es ficticia, ya que el fichero destino es el mismo que el fuente, y cualquier modificacin posterior
de uno afectar al otro, ya que se trata de dos nombres para un mismo fichero ( en disco existe un nico
fichero fsicamente almacenado).
Sintaxis:
ln [-s] fuente destino.
Cuando se borra una ligadura a un fichero, slo se borra el nombre especificado en la orden rm.
El fichero slo se borra (su contenido) cuando se borra la ltima referencia al mismo. Hay que indicar que
un fichero puede estar, por medio de ligaduras, en varios directorios al mismo tiempo. Sin embargo, esto
no ser posible si los directorios estn en distintos dispositivos.
Tambin es posible establecer ligaduras entre directorios, con la opcin s del comando ln (se
crea lo que se llama una ligadura simblica, que es una entrada de directorio cuyo contenido es
nicamente un nombre de ruta). Las ligaduras simblicas no se contabilizan en el nmero de ligaduras al
directorio que aparece en el listado obtenido con la orden ls l.
Las ligaduras (simblicas o no) se borran siempre con la orden rm, incluso aunque apunten a un
directorio.
Ejemplo1.- Cread una ligadura de un fichero a otro y obtener los atributos asociados a ambas
ligaduras (derechos, tamao, etc...). Comprobad que coinciden, y que ambos se ven afectados por
cualquier modificacin sobre uno de ellos.
Ejemplo2.- Cread una ligadura simblica a un directorio. Obtener los atributos de las dos
entradas y compararlas. Observad que si en este caso se borra el directorio, la ligadura permanecer como
entrada de un directorio, pero no apuntar a ningn sitio.
1.9.6. Mensajes en el terminal.
Los usuarios pueden enviarse mensajes (cortos) que aparecern sobre el terminal del destinatario
(si ste no ha desactivado tal posibilidad) con la orden write. Con esta orden se enva el mensaje que se
teclee a continuacin al usuario especificado, que debe estar conectado al terminal indicado. El mensaje
se termina de escribir tecleando Control-d. Es posible evitar que otros usuarios interfieran nuestro
trabajo con mensajes en pantalla mediante la orden mesg n. Para permitir de nuevo la recepcin de
mensajes se teclea mesg y. Su sintaxis es:
write usuario [terminal]
1.9.6.1. Comando who.
Permite conocer qu usuarios estn conectados al sistema en un momento dado. Dicha orden
nos indica en la segunda columna el terminal sobre el que estn trabajando los usuarios conectados al
sistema.
1.9.6.2. Comando finger.
Permite conocer qu usuarios estn conectados al sistema en un momento dado y tambin nos
indica el tiempo que los usuarios llevan sin acceder al terminal, y desde dnde estn conectados al
sistema.
1.9.6.3. Comando tty.
Permite conocer el terminal sobre el que se est trabajando en un momento dado, puesto que esta
orden devuelve el nombre del fichero especial de caracteres asociado al terminal.
Es posible enviar el contenido de ficheros a los terminales, mediante una operacin de escritura
sobre el fichero especial que tengan asociado.

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*

1.9.7.2. Comando umask.


Un usuario puede modificar la mscara de derechos por defecto que se aplica sobre los ficheros o
directorios recin creados mediante la orden umask:
Sintaxis:

umask mascara

donde mascara se obtiene de acuerdo a los siguientes valores octales


0400
0200
0100
0040
0020
0010
0004
0002
0001

Lectura para el propietario


Escritura para el propietario
Ejecucin para el propietario
Lectura para el grupo
Escritura para el grupo
Ejecucin para el grupo
Lectura para otros
Escritura para otros
Ejecucin para otros

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

1.9.8. Recepcin y envo de correo. Comando mail.


Tecleando mail + Intro se visualiza el primer mensaje. Si se teclea ? se muestra un men de
ayuda con las distintas opciones del mail:
+
! comando
d
q
h
r
s fichero
w fichero
p
+n
-n

Visualiza el mensaje anterior


Visualiza el mensaje siguiente
Ejecuta el comando del sistema operativo indicado
Borra el mensaje actual
Sale al sistema operativo
Visualiza las cabeceras de los mensajes
Enviar respuesta al emisor del mensaje actual
Salva el mensaje actual en el fichero indicado
Salva el mensaje actual en el fichero indicado, pero sin la cabecera
Visualiza de nuevo el mensaje actual
Ver mensaje n-simo siguiente
Ver mensaje n-simo anterior

Para enviar un mensaje a otro usuario se ejecuta la orden


mail direccion_usuario
A continuacin se escribe el texto del mensaje, finalizando con <Control-d>. La direccin del
usuario puede especificarse de diversas formas, dependiendo del sistema de que se trate. En todo caso, si
se desea enviar un mensaje a un usuario en nuestro sistema local basta con poner su nombre de login en el
sistema.
Es posible tambin escribir primero el texto del mensaje en un fichero, y despus ejecutar la
orden:
mail usuario < fichero

14

1.10. Comandos de uso general.


1.10.1. Editores.
Los sistemas Unix actuales vienen dotados de editores manejables para usar sobre entornos XWindows. An as, los siguientes editores han sido y son los ms usados, sobre todo el joe.
1.10.1.1. El editor joe.
Se trata de un editor de pantalla completa de libre disposicin. Se invoca al editor poniendo
como argumento el nombre del fichero que se desea editar, es decir:
joe fichero.txt
Las acciones de edicin ms complicadas se realizan a travs de combinaciones de pulsaciones
de teclas con la tecla de Control. Para conocerlas todas pulsar Control-K-H y nos proporcionar un men
de ayuda.
Control-K-H
Proporciona un men de ayuda
Control-F
Cursor a la derecha
Control-N
Cursor abajo
Control-L
Buscar el siguiente
Control-V
Pantalla siguiente
Control-E
Ir al final de la lnea actual
Control-K-V
Ir al final del fichero
Control-K-B
Marcar inicio de bloque
Control-K-M
Mover bloque
Control-K-W
Escribir bloque en fichero
Control-D
Borra carcter actual
Control-R
Actualiza pantalla
Control-K-Z
Crea un shell
Control-K-R
Inserta fichero
Control-T-T
Insercin/Sobreescribe
Control-T-I
Autoindentacin
Control-B
Cursor a la izquierda
Control-P
Cursor arriba
Control-K-F
Bsqueda, bsqueda y sustitucin
Control-U
Pantalla anterior
Control-A
Ir a comienzo de lnea actual
Control-K-U
Ir al comienzo del fichero
Control-K-L
Ir a lnea n
Control-K-K
Marcar fin de bloque
Control-K-C
Copiar bloque
Control-K-Y
Borrar bloque
Control-Y
Borra lnea actual
Control-K-X
Salva fichero y abandona
Control-K-D
Salva fichero
Control-C
Abandona sin salvar fichero
Control-T-D
Ancho de tabulacin
Control-K-n
Ejecuta macro nmero n
Opciones del editor joe
1.10.1.2. El editor vi.
La principal caracterstica del editor vi es su funcionamiento en dos modos de operacin: modo
texto y modo comando. Es precisamente esta dualidad la que nos crea dificultades a la hora de trabajar
con este editor. Cuando entramos al editor, ste se encuentra en modo comando.
vi fichero.txt

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

Desplazamiento del cursor a izda, dcha, arriba, abajo


Desplaza el cursor al comienzo de lnea siguiente
Desplaza el cursor al comienzo de la palabra
Desplaza el cursor al final de la palabra
Desplaza el cursor al comienzo de lnea
Desplaza el cursor al final de lnea
Aade texto detrs del cursor
Inserta texto antes del curso
Crea una nueva lnea por encima del cursor
Crea una nueva lnea por debajo del cursor
Borra carcter bajo el cursor
Borra lnea actual
Reemplaza carcter bajo el cursor
Deshace la ltima operacin
Deshace las ltimas operaciones sobre la lnea actual
Une la lnea actual con la inmediata inferior
Abandona el editor vi y entra al ex
Almacenar fichero y abandonar
Almacenar fichero y abandonar
Salvar fichero a disco
Abandonar (si no hay cambios)
Abandonar en todos los casos
Desplaza la pantalla 12 lneas abajo
Desplaza la pantalla 24 lneas abajo
Desplaza la pantalla 24 lneas arriba
Desplaza la pantalla 12 lneas arriba
Posiciona el cursor en lnea n
Posiciona el cursor en el final del fichero
Visualiza n de lnea actual
Actualiza pantalla
Comandos del editor vi

1.10.2. Comandos relacionados con la fecha del sistema.


1.10.2.1. Comando date.
Cuando no se especifica ningn argumento, el comando date devuelve la fecha y hora actual del
sistema. El superusuario tambin puede utilizar este comando para establecer la fecha y hora del sistema,
con la sintaxis:
date mmddhhmm[yy]
Tambin es posible indicar al comando date un formato de presentacin de la fecha y hora, con
la sintaxis:
date +formato
El formato se especifica mediante los llamados descriptores de campo, que van precedidos por el
smbolo %, y son reemplazados en la salida en pantalla por sus valores asociados.

16

n
t
m
d
y
D
H
M
S
T
w
a
h
r

Inserta un carcter de retorno de carro


Inserta un carcter de tabulacin
N del mes del ao
N del da del mes
ltimos dos dgitos del ao
Fecha en el formato clsico: mm/dd/yy
Hora (de 00 a 23)
Minutos (de 00 a 59)
Segundos (de 00 a 59)
Hora en el formato clsico: HH:MM:SS
Da de la semana (de 0 a 6, siendo el Domingo el 0)
Da de la semana de forma abreviada (Sun, , Sat)
Mes abreviado (Jan, ... , Dec)
Hora en formato AM/PM
Descriptores de campo del comando date.

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

1.10.3. Comandos para la visualizacin de ficheros.


1.10.3.1. Comando pg.
Con esto comando podemos visualizar ficheros de texto de cierto tamao, que no quepan en una
sola pantalla, pues muestra sus contenidos pantalla a pantalla.
Cuando se ejecuta la orden pg fichero, aparece el comienzo del fichero en pantalla y una lnea
de ordenes en la parte inferior de la misma.

17

1.10.3.2. Comando more.


Permite tambin visualizar un fichero pantalla a pantalla. En este caso, con la tecla de espacio se
va pasando de una pantalla a otra, mientras que si se pulsa q se termina la visualizacin del fichero, y se
abandona la ejecucin.
El comando more se utiliza con mucha frecuencia en pipes para ir mostrando pantalla a
pantalla los resultados de algn programa:
ls lR / |more
1.10.3.3. Comando hexdump.
Es posible visualizar el contenido de ficheros en ascii (-c), octal (-b), decimal (-d) y
hexadecimal(-x).
1.10.3.4. Comando bpe.
El comando bpe nos permite ver y editar ficheros binarios. Se invoca poniendo como
argumento el nombre del fichero a editar.
1.10.4. Comandos de comparacin de ficheros.
1.10.4.1. Comando cmp.
Permite comparar dos ficheros, para ver si son idnticos. Si los ficheros resultan diferentes, se
muestra el n de lnea y el n de carcter dentro de la lnea donde se ha encontrado la primera diferencia.
Si ambos ficheros son idnticos no se muestra ningn resultado en pantalla. En este caso puede
comprobarse que realmente son idnticos consultando el valor de errorlevel (echo $?), que debera ser 0.
El programa cmp admite la opcin s, que suprime los mensajes en pantalla, y retorna:
- 0 si los ficheros son idnticos.
- 1 si los ficheros son diferentes.
- 2 si algn fichero es inaccesible.
1.10.4.2. Comando comm.
Este comando nos permite comparar dos ficheros ordenados alfabticamente por lneas. Como
resultado nos indica en una primera columna las lneas que nicamente se encuentran en el primer
fichero, en una segunda columna las lneas que nicamente se encuentran en el segundo fichero, y en una
tercera columna las lneas que pertenecen a ambos ficheros.
1.10.4.3. Comando diff.
Localiza las diferencias entre dos ficheros de texto, indicando las acciones que habra que
realizar para hacerlos coincidir. Adems, el errorlevel devuelto es como el del comando cmp.
1.10.4.4. Comando uniq.
El comando uniq elimina las lneas duplicadas de un fichero ordenado alfabticamente.
Ejemplo1: Consideremos los ficheros siguientes y probar las rdenes comm y diff con ambos:
fichero1:
linea 1 de fichero1
linea 2 de fichero1 y fichero2
linea 3 de fichero1 y fichero2
linea 4 de fichero1

fichero2:
linea 1 de fichero2
linea 2 de fichero1 y fichero2
linea 3 de fichero1 y fichero2
linea 4 de fichero2

18

1.10.5. Operaciones sobre ficheros de texto.


1.10.5.1. Comando sort.
Ordena ficheros de texto alfabticamente, presentando el resultado en la salida estndar. Si se
indican varios ficheros argumento, el programa realiza la ordenacin sobre la unin de todos ellos.
sort fichero fichero ...
Otra posibilidad de este programa es organizar el fichero o ficheros de entrada por campos,
utilizando un cierto carcter como delimitador de campos. Mientras no se especifique otra cosa, el
separador es una blanco.
c

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

1.10.5.2. Comando cut.


Se emplea para eliminar una parte en cada lnea de un fichero de texto, ya sea atendiendo a una
divisin en campos, o bien segn una delimitacin de columnas.
cut [opciones] b lista_columnas f lista_campos
Con la opcin b, se especifica la lista de columnas (separadas por comas) o un rango de
columnas (utilizando un guin para indicarlo) que deben ser visualizadas. Se entiende que cada carcter
de una lnea ocupa una columna, numeradas desde 0 en adelante.
Con la opcin f se especifica una lista de campos (o un rango) que deben ser visualizados. Por
defecto se emplea como delimitador un tabulador. Para establecer un delimitador distinto se emplea la
opcin d:
1.10.5.3. Comando paste.
Este comando toma dos ficheros como argumento, y va procesndolos simultneamente, leyendo
en cada etapa una lnea de cada fichero, unindolas separndolas por un tabulador. Con la opcin d puede
especificarse un separador diferente.
1.10.5.4. Comando join.
Se emplea para unir las lneas de dos ficheros de texto de acuerdo a una clave comn. Se
considera que cada fichero argumento constituye una tabla relacional, siendo cada lnea de texto en
ambos ficheros un registro de la tabla, dividida en campos segn el separador empleado (un blanco por

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

Visualiza las 10 primeras lneas del fichero indicado


Visualiza las 10 ltimas lneas del fichero indicado
Visualiza el fichero con sus lneas numeradas
Rompe el fichero de texto indicado en trozos, cada uno de num lneas de
texto (1000 por defecto), creando para ello nuevos ficheros, cuyo nombre
est prefijado por prefijo.
Contabiliza lneas, palabras y caracteres del fichero indicado
Visualiza las lneas del fichero indicado que empiezan con la cadena cad.
Para ello el fichero debe estar ordenado alfabticamente

1.10.6. Localizacin de ficheros.


1.10.6.1. Comando find.
Permite localizar ficheros que satisfacen un determinado criterio, para realizar a continuacin
alguna accin sobre los mismos. La bsqueda comienza en el directorio que se especifica como primer
argumento, y desciende a todo el subrbol de directorios que dependen de ste.
La sintaxis de esta orden es la siguiente:
find

nombre_de_directorio

criterio_de_bsqueda

accin

Las acciones posibles son:


- print: Muestra en pantalla los nombres de los ficheros localizados.
- exec programa: ejecuta el programa indicado. Los ficheros localizados pueden ser pasados
como argumento del programa empleando para ello un juego de llaves (que representan a
cada fichero localizado). Si se emplea la opcin exec, debe finalizarse la lnea de rdenes
con \;.

Es posible localizar ficheros siguiendo criterios de bsqueda ms complejos, basados en


expresiones condicionales ms generales. Para ello se emplean las conectivas lgicas (! Para la negacin,
-a para el AND y o para el OR), pero en tal caso, cada subexpresin de bsqueda debe estar encerrada
entre parntesis.
Cuando las subexpresiones van conectadas por conectiva -a pueden omitirse los parntesis..
Para seguir escribiendo la orden en una siguiente orden, se teclea una barra hacia atrs. Vase
ejemplo5

20

Los criterios de bsqueda del comando find son:


-name nombre_fichero

-type x

-links n
-user nombre_usuario
-group nombre_usuario
-size n

-atime n

-mtime n
-ctime n
-perm [-] m

Busca el fichero cuyo nombre se indica. Tambin puede especificarse una


mscara de bsqueda, encerrando todo el nombre entre comillas dobles,
mediante la sintaxis siguiente:
*
Cualquier tira de caracteres
?
Un carcter cualquiera
[...] Cualquier carcter encerrado entre los corchetes
[^...] Cualquier carcter, excepto los encerrados entre corchetes
Busca ficheros de dispositivo de bloques (x=b), de caracteres (x=c),
directorios (x=d), pipes (x=p), ligaduras simblicas (x=l), o ficheros
regulares (x=f)
Busca aquellos ficheros que tienen n ligaduras (hard links) establecidas
Busca aquellos ficheros que pertenecen al usuario indicado
Busca los ficheros que pertenecen al grupo de usuarios indicado
Busca aquellos ficheros que ocupan en disco n bloques (512 bytes por
bloque). Si el n n va seguido de una c, se buscan los ficheros que tengan
ese tamao n en bytes
Localiza los ficheros que fueron accedidos hace exactamente n dias. La
orden find por s misma modifica la fecha de acceso. Si se pone +n se
interpreta como localizar los ficheros accedidos hace ms de n das, y si se
pone n se interpreta como localizar los ficheros accedidos en los ltimos
n das.
Localiza los ficheros que fueron modificados hace exactamene n das.
Tambin son vlidos +n y -n
Localiza los ficheros que fueron cambiados (modificados sus atributos)
hace exactamente n das. Son vlidos +n y n.
Localiza ficheros cuya mscara de derechos sea exactamente m. Si se pone
un signo menos delante de la mscara, entonces busca ficheros que tengan
como mnimo los derechos indicados en la mscara.

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

Representa un carcter cualquiera


Puede ser reemplazado por cualquier carcter de los encerrados entre corchetes
Puede ser reemplazado por cualquier carcter no incluido en la lista
Considera nicamente aquellas lneas que comiencen por la expresin que precede al $.
Considera nicamente aquellas lneas que acaben en la expresin que sigue al ^.
Se reemplaza por el carcter c, al margen del significado especial que grep asocia a dicho
carcter para constituir expresiones regulares.
Por ejemplo grep \.f fichero buscar .f tal cual, sin emplear el punto como formato de
sustitucin
Formatos de sustitucin del comando grep.

n
v
c
i
x

Cada lnea visualizada se acompaa del n de lnea correspondiente en el fichero.


Indica que se muestren las lneas que no encajen en el patrn.
Indica que se muestre nicamente el n de lneas que encajan en el patrn
Ignora la distincin entre maysculas y minsculas
Selecciona slo aquellas lneas que encajen enteras en el patrn.
Opciones del comando grep

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

Las acciones a realizar se obtienen desde el fichero indicado.

Ejemplo: Si se considera la expresin regular siguiente:


^E[ls].* [ml]e regalo un \(.*\)
-

tenemos que lneas como:

Ella me regalo un disco


Ese le regalo un libro
El le regalo un ordenador personal

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

Aade la lnea de texto que sigue al comando a la salida estndar despus de


procesar las lneas del fichero de entrada afectadas por el rango indicado
c\ linea_texto
Visualiza sobre la salida estndar la lnea de texto que sigue al comando,
descartando las lneas de texto del fichero de entrada afectadas por el rango
indicado.
d
Borra la lneas indicadas
i\ lnea texto
Visualiza la lnea de texto que sigue al comando, y a continuacin procesa las
lneas afectadas, incluso bajo la opcin n
p
Visualiza el resultado de procesar las lneas afectadas, incluso bajo la opcin n
q
Abandona
r fichero
Lee un fichero, aadiendo el contenido del mismo a la salida estndar, antes de leer
y procesar la siguiente lnea desde el fichero de entrada
s/e_reg/n_exp./flags Sustituye n_exp por toda ocurrencia de la expresin regular e_reg. Algunos
flags admisibles son: g (sustitucin global, para que afecte a todas las ocurrencias
de la expresin regular, y no slo a la primera), p (visualiza el resultado del
procesamiento si el reemplazamiento fue llevado a cabo), w fichero (aade las
lneas procesadas al fichero indicado si se realiz el reemplazamiento). Si en
e_reg se han delimitado campos por medio \(, \), es posible referenciarlos en
n_exp por medio de \1, \2, etc
s/e_reg/&n_exp/
Inserta n_exp detrs de la expresin regular e_reg, para toda lnea que contenga
una cadena que encaje en la citada expresin regular.
w fichero
Aade las lneas afectadas al fichero indicado
=
Visualiza el nmero de lnea actual sobre la salida estndar
Principales acciones aceptadas por sed.
Ejemplo1: Indicar la orden que borre la lnea 3 de un fichero.
sed 3d fichero
Ejemplo2: Indicar la orden para borrar las lneas 2,3, y 4 de un fichero.
sed 2,4d fichero

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

Para el redireccionamiento de salida se usa >


Para el redireccionamiento de entrada se usa <
Para aadir informacin sobre un fichero ya creado, se usa >>
Tambin es posible redireccionar el dispositivo al que los procesos envan sus mensajes de
error. Dicho dispositivo es por defecto la pantalla. Para ello se redirecciona la salida con el
smbolo 2>, que significa que los mensajes de error se dirijan hacia el fichero que se
indique a continuacin.

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

1.11.2. Variables del Shell.


Una de las posibilidades del shell es la definicin de variables, para lo cual se emplea la sintaxis:
$ nombre_variable=valor
Posteriormente, para leer el contenido de las variables definidas se emplea la sintaxis:
$nombre_variable.
Si se quiere asignar un literal constituido por varias palabras, ste debe aparecer entrecomillado.
La diferencia entre el uso de comillas dobles y comillas simples es que con las dobles podemos incluir
dentro de la cadena nombres de variables, y su valor actual ser reemplazado por el nombre de la
variable, situacin que no ocurre con las comillas simples.
Ejemplo:
$ pepe=10
$ echo el me debe $pepe pesetas -> el me debe 10 pesetas
$ echo el me debe $pepe pesetas -> el me debe $pepe pesetas
$?
$$
$!
$$#
$@
$0
$i (para i>1)

Valor de errorlevel devuelto por el programa anterior (entre 0 y 255)


Nmero de identificacin de proceso (PID) del shell
Nmero de identificacin del ltimo proceso lanzado en background
Opciones actuales del shell
Nmero de argumentos posicionales (en un shell-script)
Argumentos posicionales (en un shell-script)
Nombre del comando en ejecucin (shell-script)
Argumento posicional i (en un shell-script)

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

${variable:?palabra}: Si existe la variable indicada y tiene asignado un valor no nulo se le asigna


el valor palabra. En otro caso, visualiza el literal variable:palabra y abandona la ejecucin del shell
actual.
${variable:+palabra}: Si la variable indicada existe y tiene un valor no nulo, se referencia el
valor literal palabra. En caso contrario, se referencia una cadana vaca.
Los dos puntos (:) pueden omitirse, y en tal caso slo se realizan las comprobaciones de existencia
de la variable, no las relativas a si tiene asignado un valor vaco.
1.11.3. Variables de entorno.
Las variables tienen visibilidad en principio sobre el shell donde han sido declaradas. Para
extender su visibilidad a nuevos shells anidados se emplea la orden export, con la sintaxis:
$ export variable variable variable ...
Esta orden hace que los valores de las variables indicadas como argumentos sean visibles en los
nuevos shells anidados. Sin embargo, hay que observar que en realidad en cada uno de estos nuevos shells
se creara una nueva copia de cada variable, asignndole inicialmente el valor que tena en el shell
anterior; evidentemente, al retornar al shell anterior la variable tendra el ltimo valor asignado en este
shell, sin tener en cuenta las modificaciones realizadas en los shells anidados. A las variables del shell
exportadas con esta orden se las llama variables de entorno.
Tecleando esta orden sin argumentos se muestran las variables exportadas actualmente.
Podemos ver las variables de entorno asignadas en un momento dado con la orden env.
A continuacin se indican algunas de las variables de entorno predefinidos en el shell:
HOME. Indica el directorio home del usuario actual. Cada vez que se ejecuta el proceso sh para invocar
un nuevo shell, el sistema asigna el valor de esta variable segn la informacin introducida por el
administrador durante la creacin del usuario.
PATH. Indica los directorios en los que el shell buscar las rdenes que se le ofrecen para ejecutarlas.
Los directorios que constituyen el PATH se separan por :.
MAIL. Se asigna mediante esta variable el fichero que acta como buzn de nuestro correo.
PS1. Es el literal que constituye el inductor principal (habitualmente $ para usuarios normales y # para el
superusuario).
PS2. Es el literal que constituye el inductor secundario (habitualmente >).
IFS. Es el carcter separador por defecto de los campos de un fichero (generalmente ser un blanco o un
retorno de carro).
SHELL. Indica el tipo de shell asignado al usuario. El tipo de shell de cada usuario lo fija el superusuario
en el momento de crear el usuario.
TERM. Indica el tipo de terminal que se est empleando. Es importante que est definido correctamente
este valor, porque en caso contrario no funcionarn correctamente algunos programas.
MAILCHECK. Especifica cada cuanto tiempo (en segundos) se revisa el buzn para ver si hay correo
(su valor por defecto es 0, por lo que antes de visualizar cada vez el inductor, el sistema mira en el
buzn). Lo mejor es cambiar dicho valor a un nmero mayor (por ejemplo: 600 segundos). Si se
encuentra correo en el buzn, el sistema informa al usuario de ello con el mensaje: You have mail.
1.11.4. Fichero .profile.
Este fichero oculto contiene un conjunto de rdenes que se ejecutan cada vez que un usuario entra
al sistema, antes de mostrarle el inductor. Adems de ejecutarse las rdenes contenidas en el fichero
.profile se ejecutan (previamente) las rdenes contenidas en el fichero /etc/profile, cuyo propietario es el
administrador, que es el nico que puede modificar su contenido.
El fichero .profile puede ser ejecutado directamente (sin abandonar el shell) con la orden
$ . .profile

26

1.11.5. rdenes internas del shell.


:
Solo tiene por objeto devolver 0 como retorno de errorlevel
. fichero. Ejecuta las rdenes contenidas en el fichero de comandos indicado. Esta orden no crea
un nuevo shell que se encargue de la ejecucin de las rdenes del fichero, sino que usa para ello
el shell actual. Sin embargo, no podemos pasar parmetros al fichero de comandos.
exec [args...].- Se ejecuta el proceso especificado como argumento en lugar del shell (no crea un
nuevo proceso, sino que sobrescribe el espacio de memoria ocupado por el shell, por lo que
cuando concluye su ejecucin retorna al proceso padre del shell).
exit.- Abandona el shell
login.- su objeto es introducirnos en una nueva secuencia de logina, para acceder a un nuevo
usuario, abandonando el anterior. Su ejecucin slo se permite mediante la orden:
exec login [args]
newgrp. su objeto es cambiar el grupo del usuario que la ejecuta. El usuario debe estar
autorizado para realizar dicho cambio. Habitualmente su ejecucin es posible en la forma:
exec newgrp [args]
read variable. Lee desde la entrada estndar el valor de la variable indicada.
readonly [nombre nombre ... ].- Marca las variables de la lista como de solo lectura, de forma
que no pueda alterarse su valor. Esta orden debe darse una vez asignado o ledo un valor para las
variables.
shift.- Su objetivo es rotar los valores de los parmetros posicionales: $i pasa a ser $i-1, para i>1.
times.- Visualiza los tiempos acumulados de gasto de CPU por el sistema y por el usuario para
ejecutar los comandos que ste lanz (el gasto del sistema corresponde al tiempo consumido por
las llamadas al sistema realizadas durante la ejecucin del programa del usuario, as como por las
interrupciones atendidas entre tanto.
1.11.6. La orden eval y el operador grave.
La orden eval tiene la sintaxis siguiente:
eval [argumento argumento ... ]
Cuando se ejecuta sin argumentos devuelve siempre 0 como retorno de errorlevel. En caso
contrario, se concatenan los argumentos para conformar una lnea de rdenes, la cual es a continuacin
ejecutada. El valor de errorlevel obtenido como resultado de la ejecucin de dicha lnea de rdenes es el
valor de errorlevel devuelto por eval.
La orden eval suele emplearse junto al operador grave , que se emplea habitualmente para
ejecutar una lnea de rdenes (encerrada entre dos apstrosfos hacia la izquierda), y asignar su salida de
resultados estndar como valor de una cierta variable del shell.
Ejemplo1: Para asignar a la variable x el tipo de terminal que se est empleando:
$ x=echo $TERM
$ echo $x
Ejemplo2: Ejecutad la orden siguiente y observar su resultado:
$ echo ls l

27

1.12. Implementacin de shell-scripts.


En esta seccin se describen las construcciones de control del lenguaje de rdenes aceptado por el
shell Bourne, utilizadas habitualmente en shell-scripts.

1.12.1. Construccin if-then-else.


La sintaxis es
$ if comando; then comando; [else comando;] fi
Para introducir varios comandos en la parte then o else, estos deben aparecer en lneas distintas,
tecleando \ al final de cada lnea. Tambin pueden dividirse las distintas partes de esta orden en varias
lneas, omitiendo en este caso los puntos y coma.
Se puede utilizar como comandos true (devuelve como errorlevel 0) o false (devuelve errorlevel
distinto de 0).
Ejemplo1:
$ if true
then
echo va bien
fi
Ejemplo2: Crear un shell-script para asignar ciertos derechos (especificados como primer
argumento) a un fichero pasado como segundo argumento.
$ cat derechos
if chmod $1 $2
then
echo Asignados derechos $1 sobre fichero $2
else
echo No pueden establecerse esos derechos
1.12.2. La orden test.
Mediante esta orden podemos evaluar expresiones condicionales. Su funcin es evaluar una
expresin condicional, de forma que si sta resulta cierta devuelve un errorlevel igual a 0, y si sta es
falsa devuelve un errorlevel distinto de 0. La sintaxis es:
test expresin

o bien

[ expresin ]

Pueden emplearse los siguientes operadores para construir expresiones condicionales


compuestas:
! Operador not
-a
( ) Construccin de subexpresiones.

Operador and

28

-o Operador or

Las expresiones bsicas admitidas por la orden test son:


-r fichero
-w fichero
-x fichero
-f fichero
-d fichero
-c fichero
-b fichero
-h fichero
-p fichero
-u fichero
-g fichero
-s fichero
-t [fildes]
-z s1
-n s1
s1=s2
s1!=s2
s1
n1 eq n2
n1 lt n2
n1 gt n2
n1 le n2
n1 ge n2
n1 ne n2

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

1.12.3. Construcciones de control iterativas


1.12.3.1. Construccin for.
for nombre [in palabra palabra ... ]
do
comandos
done

Ejemplo1:
$ for VAL in 1 2 3 4
do
echo $VAL
done
Ejemplo2:
$ for FICHERO in *
do
echo $FICHERO
done

1.12.3.2. Construccin while o until.


while comando
do
comando/s
done

until condicin do
comando/s
done

29

1.12.3.3. Comando expr.


El objeto de este comando es evaluar una expresin aritmtica.
Ejemplo:
$ VAL=1
$ while [ $VAL lt 11 ]
do
echo $VAL
VAL=expr $VAL + 1
done
1.12.4. Sentencias read, exit y break.
El comando read permite solicitar un valor por teclado y asignrselo a una variable. Su sintaxis es:
read variable
El efecto del comando exit es abandonar el shell con un valor de errorlevel igual a n. Si no se pone
el argumento, entonces se abandona el shell arrojando como errorlevel el valor devuelto por la ltima
orden ejecutada. Su sintaxis es:
exit [n]
La orden break se emplea para abandonar un bucle (for o while) en tantos niveles de anidamiento
como se especifique (si no se pone el argumento, se supone que ste es 1, que es lo habitual). Su sintaxis
es:
break [n]

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

1.12.5. Sentencia case


Su sintaxis es la siguiente:
case palabra in
[patrn[ |patrn]..) comandos;;]..... ..... esac

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

EJERCICIOS PRCTICOS DE UNIX.


1.

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.

Escribe un fichero de texto con el siguiente contenido:


echo Ejemplo de shell-script
ls F /usr/alumnos
pwd
who
Ponte de acuerdo con otro usuario, para envirselo por correo. A continuacin, este usuario debe
leer su correo, y salvar el texto del mensaje en un fichero llamado s1, sobre su propio
directorio HOME. Despus, este usuario debe asignar derechos de ejecucin para el usuario
propietario para dicho fichero s1, y ejecutarlo techeando directamente s1 sobre el inductor
del shell.

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.

Que se muestre la fecha y la hora con el formato siguiente:


Hoy es Mircoles, 20 de Abril de 2005
Son las 13:30

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.

11. Crea el fichero siguiente:


Fichero libros.txt:
Sistemas Operativos. Conceptos y Diseo:Milenkovic, M.:Mc Graw-Hill:1994
Solucionario del programador para IBM/PC,XT,AT:Jourdain, R.:Anaya:1988
UNIX. The complete reference:Coffin, S.:Mc Graw-Hill:1988
Concepts of Operating Systems:Brookes, G.:Macmillan C.S. Series:1993
Sistemas Operativos:Deitel, H.:Addison-Weslwy:1990
Turbo C.Iniciacin y programacin avanzada:Mata, A.:Paraninfo:1991
Fundamentos de los s.o. de los ordenadores:Krakowiak, S.:Arcadia:1987
Modern Operating Systems:Tanenbaum, S.:Prentice-Hall:1992
Sistemas Informticos Distribuidos:Cornafion:Dunod:1981
Utilizar el comando sort para ordenarlos alfabticamente por autores y numricamente por ao
de publicacin.
12. Localizar y presentar en pantalla los ficheros normales (slo ficheros, ni directorios ni ficheros
especiales) cuyo nombre empiece por p o f, que se encuentren en el subrbol de directorios
/home, y que ocupen en disco menos de 2 bloques.
13. Localizar y borrar en todo el subrbol de directorios desde tu directorio home aquellos ficheros
(slo ficheros) que tengan como propietario a tu usuario, cuyo tamao sea superior a 200
bloques y que no hayan sido accedidos en los ltimos 10 das.
14. El comando fin dispone de la opcin perm para establecer como criterio de bsqueda los
permisos del fichero. Se pide, obtener todos los ficheros y directorios del subrbol de directorios
de tu directorio home que tengan (al menos) la siguiente mscara de derechos:: r - x - -x - - x.
15. Utilizar el comando sed para presentar en pantalla el ttulo del libro de autor Jourdain, R.,
sobre el fichero libros.txt creado anteriormente.
16. Utiliza el comando sed para aadir un nuevo libro a libros.txt (una vez ordenado):
Programacin en Ada:Barnes, J.:Diaz de Santos:1987. Debe aadirse en el sitio que le
corresponda por la ordenacin (mira el autor que ha de precederle y utiliza en coma \i de sed.
17. En un shell-script, los argumentos posicionales se denotan por $1, ... , $9. Su funcionamiento es
similar al del DOS. Crear un Shell-script al que se le pase un nombre de fichero o directorio
como argumento y haga con l lo siguiente:
a. Nos muestre sus atributos (derechos, tamao, etc) en pantalla.
b. Lo compare con el fichero /etc/profile, presentando en pantalla el valor de errorlevel
devuelto por cmp.
c. Lo copia en /usr/tmp.
Utilizar este shell-script para buscar en todo el rbol de directorios los ficheros o directorios cuyo
nombre empieza por pr, cuyo grupo propietario no es users, y someterlos al procesamiento
de dicho shell-script.

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