Curso de iniciacion al Unix

 

PRESENTACION

 

Antes que nada quisiera agradecer el apoyo de todos aquellos que

me han dado la lata para conseguir que acabara en este

berenjenal.

 

Este curso de UNIX no pretende ser una guía de referencia del

sistema, ni siquiera pretende sentar cátedra . Con el quiero,

simplemente, facilitar, a todos, el acercamiento a un sistema

operativo que desde su nacimiento se tilda de lúgubre y

complicado.

 

Si solo UNO de todos aquellos que leáis esto, se siente atrapado

por la belleza del UNIX , este pequeño esfuerzo se verá

automáticamente recompensado.

 

Toda la información contenida en este pequeño curso podrá ser

utilizada por terceros bajo la condición de incluir en ella el

nombre del autor y el origen de la misma. Si bien, el autor se

reserva el derecho de publicarla por otros medios o modificar

estas condiciones sin previo aviso .

 

En estos textos se hacen referencia a una serie de nombres de

empresas y marcas registradas que son citadas sin ningún ánimo

comercial ni propagandístico sino simplemente como una manera de

ser lo mas fiel posible a la histora real del sistema operativo

UNIX. Quiero hacer constar que en ningún momento intento con ello

favorecer a ninguna de ellas en especial .

 

Asi mismo como autor de esta recopilación de información me hago

responsable directo de cualquier imprecisión que en los datos

expuestos en adelante se deje traslucir. NO ASI de los errores

tipográficos o aquellos generados por la transmisión de estos

datos a través de algun medio magnetico ,lineas de transmisión

telefónicas etc .

 

Este curso esta estructurado en lecciones que tendrán una

periodicidad semanal y quisiera que no fueran simplemente leídos.

Estas lecciones se enviarán en forma de mensajes en el área de

UNIX LOCAL de forma que no será necesario "DOWNLODEAR" ningún

fichero .

 

CURSO DE INTRODUCCION AL UNIX

Por Luis Garcia Rosales y de Lossada.

 

LECCION PRIMERA

 

 

LA HISTORIA DEL UNIX

 

El sistema operativo UNIX nació en los laboratorios de la BELL

en Murray Hill ( New Jersey - USA ). La razón de ser del sistema

fue servir como software de base para un juego de ordenador .

 

Se desarrollaba entonces en el M.I.T un sistema grandioso llamado

MULTICS que acabo siendo abandonado por la Bell debido a

problemas de desarrollo.

 

En este momento un grupo de buenos programadores huérfanos de

sistema comienzan a implementar sobre una vieja PDP/7 un sistema

operativo que les permitiera rodar su "SPACE TRAVEL". Utilizando

el diseño de estructura de ficheros de RUDD CANADAY, KEN THOMPSOM

y DENNIS RITCHIE programan UNIX en ensamblador para dicha

máquina. El sistema era en este momento MONOPROCESO y costo el

equivalente a 5 años hombre su desarrollo.

 

El nombre de UNIX se lo daría BRIAN KERNINGHAN en 1.971 quien por

esa época y junto a DENNIS RITCHIE trabajaban en un compilador

de un lenguaje llamado "B" basado en otro anterior llamado "BCPL"

y que mas tarde se llamaría "C".

 

Este echo es importante pues se utilizo "C" para portar el UNIX

a la nueva PDP 11/40 y PDP 11/45 quedando solo una parte muy

pequeña ( 700 líneas) del núcleo en ensamblador.

 

Al contrario de otros sistemas, UNIX estaba creado por SUS

propios usuarios , POCO personal pero de MUY alto nivel técnico

y por lo tanto sin ninguna idea comercial. Se basaba en dos ideas

muy simples, "Lo pequeño es bello" y una abreviatura curiosa

"KISS" (keep it simple and Stupid = manténlo simple y tonto).

Es decir, muchas pequeñas utilidades que cumplen su trabajo

limpia y silenciosamente, sin mensajes, sin errores. Además, se

crea un concepto nuevo hasta entonces, el "pipping". Una técnica

que permitía que un comando utilizara para su trabajo el

resultado de una orden anterior.

 

En el mismo PDP 11 , el "C" se rehízo ampliándolo en muchas

funciones, aproximadamente un 35 % del código original, de manera

que se parece mucho al "C" actual.

 

En 1.971 , KEN THOMPSOM abandona el proyecto temporalmente y se

toma un año sabático, desplazándose a la universidad de BERKELEY

en California y allí nace una versión paralela del UNIX que se

denominara "BSD" ( Berkeley Software Distribution ) en la que un

gran numero de alumnos incluirían varias utilidades así como un

nuevo tipo de estructura de ficheros, memoria virtual etc..

El echo de que este sistema se convirtiera en el más usado en las

universidades es decisivo para su crecimiento posterior , ya que

los jóvenes licenciados acostumbrados a el , lo solicitaban como

sistema de base en sus nuevos trabajos y centros de cálculo.

 

Una curiosidad es que en 1.972 se citaba en el "Manual del

programador UNIX" que existían ya 10 ordenadores corriendo UNIX

y que se esperaba su expansión.

 

En AT&T se continúa trabajando y en 1.974 se hace una versión

mínima de UNIX para una maquina LSI-11/03 con solo 56 Kb. de RAM.

 

Hasta esta versión, la V6, el sistema era algo interno de la BELL

y es entonces cuando comienza a comercializarse en una cinta

magnética con una copia impresa de los pobres manuales y sin

ningún tipo de contrato de soporte, actualización o

mantenimiento.

 

Así mismo se firman convenios para suministrar a las

universidades versiones en código fuente a bajo coste.

 

¿fue esto un error ? Por aquel entonces AT&T no creía en la

rentabilidad del sistema ¿?.

 

A la versión 6 se la añade el PWB "Programmers Work Bench" y se

modifican versiones para VAX, IBM 370 y UNIVAC 1100.

 

La versión 7 tiene ya soporte y herramientas para manejo de

grandes ficheros y la DEC (Digital Equipment Corporation)

realiza la primera implementación para una máquina de 32 Bits.,

el VAX 11/780 y en la universidad en Australia S.C. Jhonson

desarrolla la actual versión de "C" mas potente aún que las

anteriores y las herramientas de depurado y mantenimiento de

aplicaciones.

 

Corre ya el año 1.978 y AT&T decide no volver a distribuir el

código fuente y cambia además el sistema de nomenclatura del

sistema que ahora se llama UNIX SYSTEM III. que se suministra

bajo contrato hasta el año 1.982 en el que es sustituido por el

UNIX SYSTEM V ( el actual) .

 

El UNIX SYSTEM IV nunca salió al mercado y se considero una

versión de transición interna para los laboratorios BELL de AT&T.

 

Además en esta época nace USL ( Unix Systems Laboratories ) , la

entidad de AT&T encargada del desarrollo organizado del sistema.

 

A mediados de los 80 la gigantesca MICROSOFT crea XENIX , el UNIX

para sistemas basados en procesadores INTEL 8088 que resulta un

fracaso debido a la lentitud de la máquina, por lo que vende los

derechos a una pequeñísima empresa de la costa de California

llamada SCO ( Santa Cruz Operation) que lo mejoraría hasta llegar

primero al SCO XENIX y luego al SCO UNIX. SCO es en este momento

el Mayor proveedor de UNIX para PC en el mundo.

 

En 1.987 se introdujo la versión 3 que ya soportaba redes ,una

mejora en la gestión de memoria y herramientas para la copia de

seguridad y recuperación de ficheros. También se le añadió "FACE"

(Framed Access Command Enviroment) que permite la creación la

creación de menús para la gestión de tareas.

 

 

LA VERSION BSD

 

En 1.974 , KEN THOMPSOM abandona el proyecto temporalmente y se

toma un año sabático, desplazándose a la universidad de BERKELEY

en California y allí nace una versión paralela del UNIX que se

denominara "BSD" ( Berkeley Software Distribution ) en la que un

gran numero de alumnos incluirían varias utilidades así como un

nuevo tipo de estructura de ficheros, memoria virtual etc..

El echo de que este sistema se convirtiera en el más usado en las

universidades es decisivo para su crecimiento posterior , ya que

los jóvenes licenciados acostumbrados a el , lo solicitaban como

sistema de base en sus nuevos trabajos y centros de cálculo.

Fueron dos estudiantes los que llevaron gran parte del peso de

su desarrollo, Bill Joy y Chuck Haley.Entre otras cosas crearon

el editor "EX" y un compilador de PASCAL . Mas tarde se amplio

el "EX" convirtiéndose en "VI" y el "CSHELL" .

En 1.976 salió la versión 4 de BSD. En 1.978 se hizo la segunda

distribución 2BSD y en 1.979 salió la 3BSD.

A finales del los 70 el departamento "Defense's Advanced Research

Projects Agency (DARPA)" decide basar sus sistemas informáticos

en esta versión de UNIX. Eso supuso que se desarrollara la 4BSD

que seria la primera en implementar completamente el protocolo

de red TCP/IP.

 

 

LA SITUACION ACTUAL

 

 

En el año 1.992 sale al mercado la versión integradora de UNIX,

UNIX SVR4 (Unix System V Revisión 4) que pretende acercar tanto

a las versiones de AT&T como a las de BSD como XENIX

,ULTRIX,SINIX, SOLARIS e incluso AIX, la implementación UNIX de

IBM. Esta versión es el resultado de los dos mas importantes

grupos de trabajo de estandarización UNIX INTERNACIONAL y OPEN

SYSTEM FOUNDATION , agrupaciones de constructores creadas para

unificar los múltiples sistemas UNIX.

POSIX ,SVID, IEEE (P1003),son algunas de las especificaciones que

ha de cumplir un sistema para ser considerado UNIX actualmente

razón por la cual a sido esa versión del UNIX como la base para

la antigua idea de COMPATIBILIDAD REAL.

 

Una versión posterior de este sistema especialmente creada para

maquinas INTEL es el UNIX SVR4.2 en la cual se basan varios de

los UNIX mas destacados del mercado actual.

 

 

LECCION SEGUNDA

 

 

QUE ES UNIX. UNA CUESTION DE FILOSOFIA

 

Antes de comenzar a trabajar ante un terminal o un ordenador trabajando bajo

UNIX , hemos de tener en cuenta una cuestión fundamental: UNIX ES UN SISTEMA

MULTITAREA.

 

¿Porque esta advertencia ? Bien, quizá ,sobre todo si trabajamos en equipos

PC, nos daremos cuenta que las cosas ocurren en UNIX un poco mas lentas que

en un sistema MONOTAREA como DOS (por ejemplo). Lo que de verdad ocurre es

que UNIX esta SIEMPRE realizando muchas mas cosas que las que nosotros vemos

¡ y las hace a la vez ! por lo que esa apreciación primera se torna de esta

forma inexacta. Además de esto, UNIX, es también MULTIUSUARIO, lo que lo hace

diferente y mas productivo que sistemas como WINDOWS NT o OS/2 mas modernos

que el ya viejo UNIX.

 

Es evidente entonces que además de todas las cosas que el UNIX este haciendo

para nosotros , también puede estar realizando tareas para otros usuarios

conectados o no (esto lo explicaré mas adelante ) a nuestro sistema.

 

 

EL PRIMER CONTACTO

 

Una vez que establecemos conexión con un sistema UNIX , ya sea por vía

telefónica o usando un terminal de un sistema o un puesto de RED bajo UNIX

lo primero que encontraremos en pantalla es algo parecido al esto:

 

Bienvenido al UNIX SYSTEM V

 

Este equipo esta restringido a usuarios autorizados.

 

Login:

 

En un sistema UNIX es necesario que el administrador nos de alta en el

sistema y nos asigne un nombre de usuario , que es el

dato que teclearemos en este momento.

 

 

Bienvenido al UNIX SYSTEM V

 

Este equipo esta restringido a usuarios autorizados

 

 

Login :ricardo

Password:

 

También teclearemos la palabra de paso (password) que el administrador nos

asignara . Si no tuviéramos una , simplemente pulsaremos <INTRO> para seguir

adelante.

 

Es importante tener una "password" definida en nuestra cuenta de usuario por

lo que la definiremos en el menor tiempo posible .

( ¿ como hacerlo ? :-)) próximamente en vuestra BBS amiga ).

La "password" no aparece en pantalla mientras se teclea, por lo que habrá que

teclearla con algún cuidado. Tampoco seremos avisados por el sistema si la

"password" o el "login" están mal tecleados hasta haber introducido los dos.

Esta es otra medida de seguridad más. Simplemente se nos indicara el mensaje

 

login icorrect

 

UNIX es lo que los ingleses llaman "CASE SENSITIVE" quiere esto decir que

para UNIX no es lo mismo "Ricardo" que "RICARDO" o que "ricardo" por lo que

tanto el "login" como la "password" hemos de teclearlas tal y como se nos

indicaron. Esto será aplicable a el resto de las cosas que hagamos en

adelante . Todavía hay una limitación mas, UN LOGIN NUNCA SE TECLEA EN

MAYUSCULAS, esto es un axioma que hay que respetar y algunas versiones de

UNIX nos lo advierten .

 

No es que no se nos permita el acceso al sistema si lo hacemos en mayúsculas

, es que CON SEGURIDAD nuestro terminal acabará bloqueado si lo hacemos así.

 

(SVR4) * En UNIX SVR4 que ya implementa el llamado nivel de seguridad "C2"

es obligatorio tener una PASSWORD. Además el sistema tiene un

TIMEOUT de 1 minuto después de cada intento fallido de conexión.La

razón de esto es evitar problemas de violación de sistema.

 

Una vez en el sistema , hasta cumplimentar los pasos anteriores no estamos

realmente dentro, se visualizan algunos mensajes de bienvenida y quizá

algunas noticias del tipo de las que podemos encontrar en las BBS:

 

 

Bienvenido al UNIX SYSTEM V

 

Este equipo esta restringido a usuarios autorizados

 

Login:ricado

Password:

 

Login incorrect

 

login:ricardo

password:

 

Unix System V Release 3.2

 

System USD01

Copyright (c) 1.987,88,89 AT&T

All Right Reserved.

 

El sistema va a ser apagado a las 5 durante una hora para

mantenimiento.

 

El administrador.

news:ricardo

You have mail

 

$

 

Hasta este momento podemos encontrar varios conceptos:

 

"motd".- Viene del inglés "Messaje of Today" (mensaje del día), es lo que

aparece desde la línea de copyright y la de "news". El motd es un

fichero del sistema que el administrador cambiara para avisar de

eventos de tipo general que tendrán lugar en el sistema. Si bien

, solo es usado DE VERDAD en sistemas un poco importantes.

 

 

 

"news:ricardo".- Las "news" son también noticias como su nombre indica

solo que son mas particulares y en muchos casos

automáticas, como la que se suele generar cuando hay un

nuevo usuario. Para verlas teclearemos : news

El indicador news no sale siempre que nos conectamos a

un sistema, como es previsible.Cada nueva noticia viene

con una línea de identificación con la fecha y el

usuario que la genero entre paréntesis.

 

$ news

 

Aviso de nuevo usuario (root) Sun Jan 21 08:26:47 1993

 

El sistema USD01 tiene un nuevo usuario hoy !

Bienvenido ricardo al sistema = root.

 

$

 

"You have mail.".- El correo es otra de las particularidades del UNIX y nos

permite el intercambio de mensajes entre los diferentes

usuarios del sistema .Lo analizaremos mas tarde.

 

"$" .- Este el indicador del sistema, (PROMPT en MS-DOS). Existen

diferentes tipos de indicadores pero este es el mas usado. También

analizaemos los demás en adelante.

 

 

LOS PRIMEROS COMANDOS

 

 

Bueno, una vez dentro del sistema os comentaré aquellos comandos que os

permitirán utilizar vuestra cuenta.

 

El primer comando que quiero enseñaros es el comando "man" , la sintaxis del

comando es :

 

man <nombre de comando>

 

man man : nos permite saber mas cosas del propio comando "man".

 

 

Pero ¿ que es man ? Pues man es la abreviatura de "manual" y nos permite el

acceso al manual interactivo del sistema UNIX que suele estar disponible en

la mayoría de los sistemas.

 

Existe otro comando que forma parte de los sistemas de ayuda al usuario de

UNIX y que también nos permitirá conocer datos de los comandos del sistema.

El comando "help" que devuelve una información básica de los comandos de

UNIX.

 

Quizá no es muy ortodoxo el comenzar a hablar de estos dos comandos pero

permitirán al usuario curioso explorar las diferentes opciones de cada nuevo

comando yendo mas allá de donde el curso llega.

 

 

 

 

 

¿ Donde estamos ?

 

Cuando nos conectamos a un sistema UNIX, nos situamos en lo que se llama

"HOME DIRECTORY" . Es este lugar nuestro reducto en un sistema UNIX y es un

termino que debemos guardar en la memoria ya que nos referiremos a el mas

adelante.

 

Pero ¿donde esta este directorio?

 

$ pwd

/U/ricardo

$

 

Bueno, como veis el comando "pwd" que no tiene opciones, nos dirá en todo

momento en que posición de un sistema UNIX nos encontramos.

 

En el caso del ejemplo el lugar de conexión o "HOME DIRECTORY" del usuario

"ricardo" es /U/ricardo.

 

Un dato curioso, a diferencia del MS-DOS , en UNIX, la barra de separación

de directorios es "/" y no "\"

 

¿ Que tenemos en el directorio ?

 

$ ls

datos

nota

dead.letter

$

 

El comando "ls" permite conocer los ficheros de un directorio, a diferencia

del anterior, este comando tiene muchas opciones. Alguna de las mas

importantes son las siguientes :

 

$ ls -l

total 3

-rw-rw-rw- 1 ricardo group 123 jun 6 19:45 datos

-rw-rw-rw- 1 ricardo group 67 apr 8 10:34 notas

-rw-rw-rw- 1 ricardo group 452 sep 7 11:45 dead.letter

$

 

 

Bien, esta es la salida del comando "ls -l" en el mismo directorio que la

anterior.Se me ocurre otra consideración antes de seguir.Fijaros que en UNIX

las opciones de los comandos se indican con el carácter "-" y no con "/" que

se usa en MS-DOS.

 

Estudiemos esta salida porque muchos conceptos importantes de UNIX se dejan

ver aquí:

 

La primera parte de esta línea es "-rw-rw-rw-" Estos son los diferentes

permisos que tiene este fichero ( el concepto de permiso se explicará mas

adelante ). "ricardo" es el propietario del fichero y "group" el grupo al

que pertenece , en este caso "group" lo siguiente es en tamaño en BYTES que

va seguido de los datos de fecha y hora de creación y por ultimo el nombre

del fichero. El numero 1 que sigue a los permisos es el número de vínculos

"LINKS" del fichero, pero esto lo estudiaremos mas tarde.

 

Otras opciones :

 

-o = excluye la información del grupo.

 

-c = Una versión en columnas de ls

 

-a = Permite ver los ficheros ocultos ( Se estudia mas adelante )

 

-R = realiza un listado RECURSIVO de los ficheros en los directorios por

debajo del que nos encontremos.

 

-p = Distingue los directorios añadiendo un carácter "/".

 

-s = Devuelve el tamaño en bloques de cada elemento del listado.

 

-t = Ordena el listado por orden de antigüedad.

 

-F = Se parece a -p, marca con "/" cada directorio y con "*" cada

fichero ejecutable.

 

Existen muchas mas opciones así que podéis verlas usando el mandato :

 

$ man ls

 

Que os dará mucha mas información o simplemente :

 

$ help ls

 

Que la ofrece de forma mas reducida.

En algunos sistemas hay comandos que sustituyen a "ls" con alguna de sus

opciones, estos comandos no aparecen en todos los UNIX pero os dejo una

pequeña lista :

 

lc = ls -c

lx = ls -c

lv = ls -lR

l = ls -las

 

Podéis probar esta lista en vuestro sistema. Esto es bastante normal ya que

como os se indico, UNIX nació de un grupo bastante grande de programadores

que añadieron su granito de arena al sistema creando utilidades que en muchos

casos o ya existían o simplemente mejoraron a otras mas antiguas.

 

Por otro lado ( y este es uno de los problemas de UNIX ) muchos de estos

programas carecen de documentación por lo que es preferible a veces usar la

versión que conocemos de los mismos y obviar versiones mas vanguardistas aun

a costa de parecer un poco inmovilista.

 

Sobre los nombres de los ficheros

 

Los nombres de los ficheros en UNIX son en principio de hasta 14 caracteres

de largo ( en algunas versiones esto puede variar) y no se dividen en

"NOMBRE.EXTENXION" como en MS-DOS . La única limitación en cuanto al tipo

de caracteres a utilizar es que NUNCA se usara el carácter "/" que en UNIX

,como ya sabemos indica directorio.

Sin embargo los siguientes caracteres tienen algún significado en el sistema

por lo que se recomienda evitarlos:

@ # $ < > " ' ; : ^ & ( ) [ ] \ ` | ! %

 

Así como los caracteres por encima del ASCII 127.

 

Si bien no es necesario podremos dividir los ficheros y ponerles extensiones

que nosotros identifiquemos pero que NO tendrán significado alguno para el

sistema:

 

fichero.datos.agenda

programa.pas

lee.me

 

Si el primer carácter de un fichero es un punto "." , este será tratado como

oculto y será necesaria la opción "-a" para verlo con un "ls".

 

¿ Quien soy y quién esta conectado ?

 

$ whoami

ricardo

 

$ who am i

ricardo tty1a sep 2 16:35

 

$ who

root console sep 2 11:34

elisa ttyp0 sep 2 16:00

ricardo tty1a sep 2 16:35

 

Observemos la salida de estas ordenes. La primera y la segunda me dan

información sobre mi mismo. Y la tercera nos suministra la lista de usuarios

conectados al sistema.

 

Esta información se divide en 3 columnas: La primera es siempre el nombre con

el que el usuario esta registrado, la segunda es el identificador del

terminal desde el que opera y la ultima es la hora de conexión.

"who" no tiene opciones pero podéis informaros de mas cosas con el "man" que

ya conoceis.

 

Operaciones básicas con ficheros

 

A continuación veremos una lista breve de comandos referidos a ficheros, si

bien la estructura de ficheros será algo a tratar en un próximo capitulo.

 

$ rm nota

$

 

El comando "rm" permite borrar ficheros.Al igual que en DOS, también admite

comodines e incluso permite hacer un borrado recursivo si usamos la opción

"-R". Para mas información usar "man".

 

$mv aaa bbb

 

Con "mv" podremos tanto renombrar un fichero cono moverlo físicamente de un

directorio a otro.

 

 

$ cat fichero

Este es un fichero

de pruebas

$

Para ver el contenido de un fichero utilizaremos el comando "cat" , si bien

también este comando se estudiará en profundidad mas adelante.

 

 

¿ Como terminamos una sesión ?

 

Bueno, como ya vimos antes, en UNIX no estamos solos , por eso una vez

terminado el trabajo habrá que salir del sistema sin apagar el equipo.

Para ello hay 2 vías:

 

- La primera consiste en teclear "exit"

 

- La segunda consiste en pulsar simultáneamente <CTRL>+<d>.

 

Cualquiera de las dos formas nos situará de nuevo en el "login" del sistema.

 

Recordad que esta es una aproximación veloz para el acercamiento al sistema,

todos los concepo se explicarán con detenimiento en adelante.

 

 

LECCION TERCERA

 

 

En este momento ya hemos dado nuestros primeros pasos en el sistema así que

comenzaremos afianzar conceptos.

Una claración no hecha antes , el indicador *(SVR4) se utilizará en este

curso para indicar algo que tiene que ver con esta ultima versión de UNIX y

que puede no funcionar en otras versiones.

 

 

EL SISTEMA DE FICHEROS

 

Toda la filosofía de unix esta orientada a un elemento básico de

información. Este elemento básico es "EL FICHERO". El UNIX utiliza los

ficheros para todo y eso es parte de la sencillez o complejidad del sistema.

 

Por otro lado el sistema de ficheros de UNIX ha servido de base para muchos

de los sistemas posteriores entre los que podemos encontrar MS-DOS, THEOS,

OASIS y el FINDER (sistema operativo de los MAC).

 

 

Los sistemas UNIX dividen sus dispositivos de almacenamiento básicos en unas

secciones llamadas "FILESYSTEMS" (sistemas de ficheros ).

 

En este capitulo del curso analizaremos como es un "FILESYSTEM" y todos

aquellos datos asociados a ficheros que un usuario debe conocer.

 

 

¿ que es un fichero ?

 

En un principio un fichero podría clasificarse como una "ristra" o grupo de

caracteres agrupados bajo un mismo identificador en el sistema y que están

almacenados sobre algún medio magnético u óptico de forma estable o

semiestable.

 

Hay que tener en cuenta que un fichero no tiene POR IMPOSICION DEL SISTEMA

que tener ninguna estructura especial pero es muy posible que alguna

aplicación si la impongan de manera adicional.

 

Además de estos ficheros que podremos llamar "simples" , en UNIX podemos

encontrar dos tipos de ficheros adicionales, el primero de ellos el

"directorio". El directorio no es mas que un fichero cuyo contenido es la

lista de ficheros que podremos encontrar en el así como información adicional

sobre ellos.

 

Para comprobar esto podemos ejecutar alguno de los siguientes comandos sobre

el nombre de un directorio y veremos su contenido:

 

$ xd nombre_dir

$ od nombre_dir

 

La salida del comando "xd" es un listado dividido en 3 partes la primera de

las cuales nos muestra la dirección de los datos (offset) dentro de un

fichero, la segunda es un listado en hexadecimal de 16 bytes y la tercera es

el contenido de esos 16 bytes en ASCII.

 

El comando "od" nos permite ver los datos en OCTAL.

 

Como ya sabéis podemos ampliar información con el comando "man".

 

Como indicamos en el segundo capitulo, los nombres de fichero tienen una

longitud de catorce caracteres, los mismos que los nombres de directorios

pero no debemos NUNCA usar los caracteres que ya advertimos anteriormente.

 

(SVR4) * En UNIX SVR4 el nombre de los ficheros no están siempre limitados

a 14 caracteres pudiendo llegar a 255. Simplemente existe un

parámetro que configura esta longitud. Lo que ocurre es que para

evitar problemas de compatibilidad entre sistemas, no es

recomendable usar mas que los 14 caracteres clásicos.

 

Otros ficheros especiales son los llamados "ficheros de dispositivos". Estos

ficheros de dispositivos no tienen un equivalente en MS-DOS. El UNIX se

comunica con los diferentes dispositivos a través de unos elementos que

llamamos "ficheros" pero que realmente NO LO SON.

 

¿porque esta contradicción ?

 

Recordemos que la palabra mágica de UNIX es la "simplicidad". A la hora de

buscar una manera sencilla de administrar todos los datos asociados a cada

elemento físico conectado o conectable a un sistema UNIX era la de tratarlos

como si de un fichero normal se tratara la mas inteligente.

 

Al igual que en DOS, en UNIX podemos redirigir la salida de un comando a

un fichero , pero esto en UNIX implica mas cosas aún. Al considerar los

dispositivos como ficheros, podríamos deririgir la salida de cualquier

comando a ¿ un terminal ? o cualquier otro dispositivo.

 

En UNIX , los dispositivos los encontramos en el directorio "/dev" (devices)

y si bien hay ciertas operaciones que podemos realizar con ellos a modo de

ficheros, esto no es recomendable.

 

Hay dos dispositivos muy interesantes que mas adelante podremos estudiar:

 

/dev/null

/dev/kmem

 

El primero es un dispositivo inexistente. Como en DOS lo usaremos cuando

queramos evitar la salida de mensajes por la pantalla del terminal ( salida

standard ; la estudiaremos mas adelante ).

El segundo no es sino la representación de la memoria del equipo. No es útil

a nivel de usuario pero hay programas específicos de depuración que si la

usan. Hay que tener en cuenta que el permitir el acceso a la memoria seria

un error de seguridad de la información MUY grave.

 

Otra recomendación útil es controlar el acceso a nuestro fichero de

terminal. Hagamos el siguiente experimento :

 

$ who am i

ricardo tty1a sep 2 17:23

 

$ ls >/dev/tty1a

 

Lo que debe ocurrir es que la salida del comando ls va a parar a nuestro

terminal. Sin embargo podríamos hacer esto mismo enviando su salida a otro

terminal conectado. Además de esto existen comandos pera la comunicación

entre usuarios que enviaran cosas a nuestro terminal (talk , wall, write )

en cualquier momento.

 

Es evidente que en muchos momentos no querremos que se nos envíen cosas

desde otros puestos, esto lo controlamos con el comando "mesg"

 

$ mesg n

 

prohibirá a los demás programas escribir sobre nuestro terminal y :

 

$ mesg y

 

restaura ese permiso. Cuando un usuario intente enviar algo a nuestro

terminal recibirá el aviso :

 

Permission denied

 

Para los mas curiosos propongo que efectuéis un "ls -l /dev/<miterminal>"

antes y después de ejecutar los comandos citados y os daréis cuenta que los

permisos del terminal sobre el que trabajamos cambiarán. (tranquilos, los

permisos los explico en la proxima lección :-)) )

 

Otros fichero especiales.

 

El fichero "." aparece el todos los directorios y ".." también. Como en MS-

DOS estas entradas en el directorio no son ficheros propiamente dichos sino

punteros que identifican a:

 

. = El directorio actual

.. = El directorio inmediatamente superior.

 

Otros ficheros podemos encontrar en nuestro directorio que comienzan por ".".

Esos ficheros son tratados como ocultos y para verlos habrá que usar la

opción "-a" del comando "ls" como ya vimos. Algunos ficheros que podemos

encontrar de este tipo en nuestro directorio según que versión de UNIX son:

 

.profile

.logins

.History

.dead_letter

.mscreenrc

 

 

Los "links" .Complicando las cosas ?

 

Los "links" son una curiosa argucia mágica que permite que para un mismo

fichero físico tengamos dos o mas entradas en uno o varios directorios.

 

Para que sirve esto. Imaginémonos un fichero importante al cual han de tener

acceso varios usuarios. Podemos tener el fichero real en un directorio al que

los usuarios no tienen acceso para borrarlo pero tener entradas en los

directorios de los diferentes usuarios para que lo puedan usar. Esta puede

ser una función útil pero quizá alguno pueda verles mas utilidades. Para

crear una nueva entrada a un directorio para un fichero conocido haremos :

 

ln <fichero> <nueva entrada>

 

$ ls -l

total 3

-rw-rw-rw- 1 ricardo group 123 jun 6 19:45 datos

-rw-rw-rw- 1 ricardo group 67 apr 8 10:34 notas

-rw-rw-rw- 1 ricardo group 452 sep 7 11:45 dead.letter

$ ln datos nuevo

 

$ ls -l

total 4

-rw-rw-rw- 2 ricardo group 123 jun 6 19:45 datos

-rw-rw-rw- 2 ricardo group 123 jun 6 19:45 nuevo

-rw-rw-rw- 1 ricardo group 67 apr 8 10:34 notas

-rw-rw-rw- 1 ricardo group 452 sep 7 11:45 dead.letter

 

Si comparamos los ficheros "nuevo" y "datos" veremos que son el mismo.

Podremos borrar el fichero "nuevo" y en cambio "datos" seguirá ahí. Además

hay una diferencia mas entre los 2 "ls" recordemos que en la lección anterior

al describir la línea de salida del comando "ls -l", dejamos un dato sin

revisar ¿ que era el numero 1? y ¿ porque ahora aparece un 2 en estos

ficheros? .Pues bien, os habréis dado cuenta que ese numero nos indica la

cantidad de entradas en directorios que tiene un fichero.

 

Hay una serie de cuidado que hemos de tener al usar "links", por lo pronto

recordemos que un fichero no tiene por que tener sus "links" en el mismo

directorio así que en algunos sistemas buscarlos puede ser complejo . Por

esta razón no recomiendo crear mas de los necesarios.

Otro problema típico suele ocurrir con algunos editores que crean copias de

seguridad de los documentos antes de editarlos:

 

tenemos el fichero "a" original y tiene un "link" "b" . Desde un editor

intento editar "b" pero este lo renombra como "b.bak" y realmente trabajo

con una nueva copia que ahora se llama "b". Pues bien lo que acaba ocurriendo

es que al final no modifique el fichero REAL que yo quería y ahora "a" y "b"

son distintos y en cambio "b.bak" si es igual que "a". ( si alguno no

entiende esto que lo lea tranquilamente 3 veces, pero yo no invente los

"links" y los editores malos).

 

 

Los "links virtuales" !! mas difícil todavía !!

 

*(SVR4)

 

Pues no hemos acabado aquí los líos. La versión de unix SVR4 (system V

revisión 4) de ultima aparición se ha considerado como la versión integradora

de las anteriores. Como ya vimos, se crearon múltiples estandares y se puso

gran interés en que los programas desarrollados para otras versiones, puedan

correr en ella. Sin embargo una de las barreras mas importantes entre

versiones, son sus árboles de directorios ya que son verdaderamente

distintos. ¿ Como solucionar esto ? . Para ello se invento una pequeña

chapuza "los links virtuales" . Un "link" virtual es un directorio que apunta

a otro . En vez de crear TODOS los directorios de TODOS los UNIX, se creo una

estructura mas o menos lógica y se añadieron "links" con los nombres de

directorios usados en distintas versiones pero que en realidad apuntan a los

directorios existentes. Los "links" virtuales son visibles fácilmente pues

aparece indicado tras su nombre el directorio al que apuntan. Pero aun a si

pueden ser un lío por ej:

 

$ pwd

/

$cd /bin

$pwd

/usr/bin

 

En este ejemplo tras colocarnos el directorio "/bin" aparecemos en otro

distinto llamado "/usr/bin" esto es simplemente porque "/bin" es un "link"

de el directorio real "/usr/bin" .

 

Como con los "links" de fichero con los "links virtuales" hemos de tener

cuidado en no realizar un "links" a directorios linkados porque podríamos

organizar un gran lío .

 

Para crear un "link virtual" usamos como antes el comando "ln" pero con la

opción "-v" :

 

ln -v <dir_real> <link_nuevo>

 

El comando PWD

 

Recordamos que el comando "pwd" nos permitía conocer cual era nuestra

posición. En UNIX hay varios interpretes de comandos (SHELLS) como el

"COMMAND.COM" o el "4dos" de MS-DOS. Cada uno de estos "shells" tiene su

propio comando "pwd" y este no se comporta igual ante un "link virtual", de

manera que su información puede ser errónea. Para estar seguros de cual es

nuestra posición os recomiendo utilizar el comando externo :

 

/usr/bin/pwd

 

Siempre nos dará la información correcta.

 

 

LECCION CUARTA

 

EL SISTEMA DE FICHEROS II

 

 

Los permisos de ficheros.

 

 

Durante las lecciones anteriores hemos hablado de los permisos de ficheros

sin aclarar este termino.

 

Recordamos que UNIX es un sistema multiusuario y que el sistema UNIX dispone

también de un "objeto" llamado grupo. Pudiendo un usuario pertenecer a uno

o varios de estos grupos.

 

Partiendo de esta base tenemos el concepto de propiedad de un fichero:

 

$ ls -l

-rwxrwxr-x 1 ricardo group 67 apr 8 10:34 notas

$

 

Si tomamos como ejemplo esta línea de salida del comando "ls" vemos que el

propietario del fichero el usuario "ricardo" y que el grupo de pertenencia

del mismo es "group" un grupo típico por defecto de algunas versiones de

"UNIX". Si un usuario pertenece a varios grupos podrá dar propiedad a

cualquiera de los grupos a los que "EL" pertenece.

 

¿ Para que sirve esto ?

 

El concepto de propiedad nos indica quien tiene o no posibilidad de realizar

diferentes tareas con un fichero. Hemos de fijarnos en los 10 primeros

caracteres de la línea de "ls" y tras analizarla conoceremos quien tiene o

no posibilidades de utilizar ese fichero :

 

-rwxrwxr-x

 

El primer carácter "-" nos indica que tipo de fichero es de cara al sistema,

y en esta posición podremos encontrar los siguientes caracteres:

 

"-" Es indicador de un fichero normal.

 

"l" Es un "link" *(SVR4)

 

"c" Es un dispositivo de "/dev/" orientado a carácter. Por ejemplo un

terminal o una impresora.

 

"b" Es un dispositivo orientado a bloques de información como una

unidad de disco o cinta.

 

"p" Es un fichero temporal de cauce. (Algo especial poco útil para un

usuario normal)

 

"d" Es un directorio.

 

Además e estos es posible que encontremos una "t" o una "s" , estos son

indicadores especiales que solo importan a nivel de administración o

programación avanzada.

 

En cuanto a los restantes nueve caracteres se dividen en tres grupos. los

primeros tres atañen a propietario del fichero, los siguientes se refieren

al grupo al que pertenece dicho fichero y los tres últimos indican las

acciones que sobre el fichero podrán realizar el resto de los usuarios del

sistema.

 

"r" Significa que se tiene permiso para leer el fichero.

 

"w" Si esta este carácter entonces también se podría escribir en el,

modificarlo o borrarlo incluso.

 

"x" Es el permiso necesario para la ejecución.

 

 

Que sacamos en conclusión de la línea anterior :

 

El usuario y su grupo podrían leer, borrar y ejecutar el fichero pero

los demás podrían solamente leerlo y ejecutarlo.

 

 

¿ Como manejar los permisos ?

 

El primer requisito para poder efectuar cambios en los permisos de un

fichero es tener la posesión sobre el mismo, de lo contrario el sistema

devolverá el error :

 

Not owner.

 

El primer cambio que podemos realizar es precisamente el de propiedad, para

ello usamos el comando "chown" (change owner, cambiar propietario) y para

cambiar el grupo de un fichero utilizamos el comando "chgrp" (change group).

Veamos los cambios que se suceden en el fichero al realizar estas

operaciones:

 

$ ls -l

-rwxrwxr-x 1 ricardo group 67 apr 8 10:34 notas

$chown pepe notas

$ls -l

-rwxrwxr-x 1 pepe group 67 apr 8 10:34 notas

$chgrp usuarios notas

$ls -l

-rwxrwxr-x 1 pepe usuarios 67 apr 8 10:34 notas

$

 

En cuanto al cambio de los demás permisos usaremos el comando "chmod"

(change mode, cambiar modo), pero antes veamos como funciona ya que es un

poco liado:

 

Tenemos tres formas de hacer esto y de ahí viene el lío.

 

1 - Para añadir o restar permisos usaremos el argumento "+" o "-" con el

comando chmod, pero antes le indicaremos si el permiso a añadir o quitar

lo es para el usuario propietario "u" , su grupo "g" o otros "o" o

todos "a". Así por ejemplo para añadir el permiso de escritura a "otros"

al fichero anterior realizaremos :

 

$ chmod o+w notas

 

o para quitarle permiso de escritura al grupo realizamos :

 

$ chmod g-w.

 

Esta manera de modificar los permisos se llama "relativa" pues parte de

los permisos que el fichero tiene no son modificados.

 

2 La asignación de derechos absolutos se realiza de forma similar pero

para ello usamos el signo "=" como argumento:

 

$chmod a=r,u=w notas

 

Dejaría el fichero notas con permiso de escritura para "todos" y de

escritura para el usuario propietario del mismo.

 

3 Los permisos también son modificados usando un formato numérico. Hay

quien utiliza una representación en octal de los 9 dígitos :

 

r--r--r = 100100100 = 444 en OCTAL.

 

Yo suelo representar por costumbre cada numero por separado lo cual me

permite trabajar con los permisos de "usuario", "grupo" y "otros" como

si fueran un numero binario independiente , lo explico:

 

r w x

7= 1 1 1

6= 0 1 1

5= 1 0 1

4= 0 0 1

3= 1 1 0

2= 0 1 0

1= 1 0 0

0= 0 0 0

 

Partiendo de esta base si hacemos :

 

$chmod 751 notas

 

tendríamos permiso "rwx" para el propietario, "r-w" para el grupo y

"r--" para los demás. Aunque parezca complejo esta es la manera mas

extendida de trabajar con permisos. Lo único a recordar es que a quien

corresponde cada dígito. Os recomiendo que hagáis pruebas para conocer

los resultados de los diferentes cambios.

 

Mecanismos de control automáticos

 

Si bien como hemos visto, como usuario podemos modificar los permisos, el

sistema por defecto controla algunos aspectos de todo ello. En principio un

fichero tiene por defecto como propietario, el usuario que lo crea y como

grupo, el de dicho usuario también.

 

Para el control de permisos básicos el sistema cuenta con una variable

llamada "UMASK", para saber el contenido de esa variable ejecutamos el

comando "umask" sin parámetros y la mostrará.

 

$umask

022

$

Este es el valor típico de esa variable pero ¿ que significa ? Nos

encontramos aquí con una de las típicas liadas de UNIX.

 

Si tenemos que "777" seria el valor máximo de los tres tipos de permiso ¿

lo recordáis? . Pues restamos el valor de "UMASK" a este "777" y tendremos

los permisos que por defecto tendrán los ficheros que creemos:

 

777-022 = 755 = rwxr-xr-x

 

Recordad que la resta no es la total sino dígito a dígito.

Un poco lío ¿ verdad? os juro que no tuve nada que ver en ello. Por otro lado

este dato no se suele tocar casi nunca.

 

Otro parámetro típico que afectara a los ficheros que creemos es la variable

"ULIMIT". Esta variable la define por defecto el administrador del sistema

de forma global pero nosotros podremos modificarla a la baja para una sesión

determinada.

 

La variable "ULIMIT" define el tamaño máximo en bloques de un fichero o

directorio que un usuario puede crear. Es una potente herramienta para el

control del espacio de disco. Como no podía ser de otra manera también hay

que hacer cálculos pues en general un bloque suele corresponder a 512 bytes

pero eso depende del sistema:

 

 

$ ulimit

4096

 

En este ejemplo y en UNIX SYSTEM V el limite esta en 2 Mb.

 

Para modificarlo solo le daremos como parámetro el nuevo tamaño en bloques

de 512 bytes :

 

$ ulimit 1024

$ ulimit

1024

 

Recordemos que solo el administrador podrá asignar un valor mayor que el que

el comando "ulimit" nos muestra al conectarnos al sistema. Esto es así porque

debido a la peculiar manera de gestionar el disco que tiene UNIX, el llenar

un disco con mas del 90 % de su espacio es especialmente peligroso para la

integridad del sistema.

 

 

Ordenes orientadas al directorio.

 

No tenemos demasiadas ordenes orientadas al directorio , fundamentalmente

son tres :

 

mkdir <nombre directorio> Creará el directorio indicado pero si ya

existiera devolvería el error: Cannot create.

 

rmdir <nombre dir> Borra el directorio indicado pero solo en el caso de que

este se encuentre vacío.

 

cd <nombre dir> Nos permite situarnos en el directorio indicado .

Podemos, al igual que en DOS indicar un camino relativo

o un camino completo. Si realizamos "cd" sin argumentos

volveremos a nuestro directorio "HOME" de forma

automática ¿recordáis que ya definimos HOME? Lo

volveremos a tratar mas adelante en cualquier caso.

 

Ordenes orientadas a ficheros.

 

Para el manejo de ficheros tenemos las siguientes ordenes:

 

ls Como ya vimos lista el contenido de un directorio.

 

mv Permite mover un fichero de un directorio a otro . Es importante revisar

que el fichero no exista ya en el directorio de destino, ya que "mv" no

chequea esto de forma que sobrescribe el fichero existente.

*(SVR4) Aparece en esta versión la opción -i que permite controlar esto

pero os sugiero el uso de "man" para verificar si vuestro sistema

soporta esta ventaja.

 

$ mv notas /usr/pepe

 

 

cp Es el comando que usamos para copiar un fichero. En algunos sistemas

como XENIX es posible encontrar un comando "copy" pero el "cp" es el mas

conocido.

 

$ cp notas fichero

 

rm Es el comando que permite borrar uno o varios ficheros. Si usamos la

opción "-R" realiza un borrado recursivo que hace desaparecer todo lo

que hay debajo del directorio en el que nos encontramos y siempre que

tengamos permisos suficientes para ello.

Quiero destacar un hecho importante. Por la estructura física de UNIX

NO ES POSIBLE la recuperación de un fichero borrado y NO HAY en el

mercado herramienta alguna que lo permita . Solo buceando en el disco

, el administrador podrá , si se atreve, intentar recuperar algún

sector. Yo suelo recomendar que se use SIEMPRE la opción "-i" que

preguntará antes del borrado. Mas adelante , cuando conozcamos la

programación del "SHELL" podremos realizar un programa que permita crear

una papelera donde irá a parar todo lo borrado para así recuperarlo si

queremos mas tarde. ¿ os pone los dientes largos? Un poco de paciencia

;-))).

 

$rm fichero

$

Como ya os habréis dado cuenta, UNIX es muy escueto en respuestas. Eso

quiere decir que realizará eficientemente su trabajo y no dará ningún

mensaje de "ok" si todo funciono como se supone que debe.

 

 

ln Ya vimos que este comando es el usado para crear un "link" así que no

me extiendo mas que tuvimos "links" para rato.

 

cmp Se le dan como argumento dos nombres de fichero y no devuelve mensaje

alguno si los dos son iguales.

 

touch A "touch" se le da como argumento el nombre de un fichero, si este

no existe simplemente añade su entrada en el directorio indicado

y así lo crea con 0 bytes de tamaño; si ya existe , modifica su

fecha y hora de creación poniéndole la de ese momento.

 

 

LECCION QUINTA

 

FICHEROS III

 

A continuación estudiaremos los diferentes comandos relacionados con la

visualización de ficheros. También veremos las herramientas de búsqueda de

ficheros del sistema.

 

Antes de poder ver el contenido de un fichero hemos de saber si este es o

no un fichero de texto. No es que los ejecutables no se puedan ver , lo que

ocurre es que tal como nuestro terminal interpreta la salida de un fichero

binario el resultado es mas bien horroroso.

 

El comando "file" o "files" que toma como argumento el fichero o ficheros

a verificar nos indicará que tipo de fichero tenemos delante . Hay varios

tipos pero de los que este comando reconoce solo cuatro son visibles :

 

Command text.

English text.

Text file.

ASCII file.

 

 

Para los muy curiosos os diré que el comando "file" revisa los primeros 512

Bytes de un fichero y hace pruebas comparándolo con el contenido de un

fichero llamado "/etc/magic" en el cual se encuentran los datos básicos de

los diferentes tipos de fichero.

 

 

Sacando punta a los ficheros binarios.

 

En casi todos los ficheros binarios hay partes en ASCII que quizá en algún

momento nos interese ver o conocer. Para ello tenemos el comando "strings".

Para utilizarlo solo hay que darle como argumento el nombre del fichero a

examinar y presentará en pantalla la parte ASCII de fichero binario.

 

Quizá os parezca poco útil pero en UNIX, un entorno en el que muchos

comandos no están documentados y sus opciones están quizá escondidas.

Podremos tener un conocimiento mejor de estos ficheros si examinamos las

"frases" que hay dentro.

 

 

¿ Como visualizar un fichero ?

 

cat Es la orden para visualizar un fichero de texto. Pero además de eso

también realiza una concatenación de varios ficheros:

 

$ cat notas

esto es un fichero de texto

$ cat varios

esto también es un fichero de texto

$ cat notas varios

esto es un fichero de texto

esto también es un fichero de texto

$

 

 

 

La salida de cat la podemos direccionar a un tercer fichero que

contendrá el resultado ( los direccionamientos los estudiaremos en

profundidad mas adelante ).

 

 

$ cat notas varios >nuevo

$ cat nuevo

esto es un fichero de texto

esto también es un fichero de texto

$

 

Una aclaración importante es no utilizar NUNCA el nombre de alguno de

los ficheros iniciales como fichero final ya que se perdería su

contenido ej:

 

$ cat notas varios >notas

$cat notas

esto también es un fichero de texto

 

Como veis en el ejemplo , el contenido del primer fichero se perdió

durante la operación. "cat" realiza simplemente una salida del fichero

sin formatear por lo que no es la mejor herramienta para visualizar un

fichero aunque es la mas standard y antigua.

 

 

Comandos de visualización con formateado procesamiento on line.

 

 

more Es el comando que sigue en antigüedad al comando "cat". "more"

realiza una paginación del fichero y nos permite avanzar por el

línea a línea , pulsando <INTRO> en cada pausa o página a página

si en cada pausa pulsamos la barra espaciadora.

 

pg Este comando es una versión mas moderna de more. No solo página sino que

permite avanzar o retroceder por el contenido del fichero. Al ejecutar

"pg" aparece un prompt ":" y en el podremos avanzar n páginas "+n" ,

retroceder n páginas "-n" reimprimir una página "." o pedir ayuda "h"

de manera que el comando se autodocumenta. Para salir de pg simplemente

pulsaremos "<ESC>" o <CTRL>+<D>. Pero no todo podía ser tan bonito, mi

propia experiencia me demuestra que el comando pg suele fallar en caso

de que avancemos muchas páginas en ficheros muy grandes (de mas de 500

Kb.) SI realizamos por ejemplo varios avances de "+20" páginas acaba

produciéndose el siguiente error:

 

$ pg cosas

:+20

Memory Fault

Core Dumped

$

 

Si hacemos "ls" veremos en nuestro directorio un gran fichero llamado

"core" que hemos de borrar .( Hablaremos de los "cores" mas adelante )

 

tail "tail" que significa cola en inglés nos permite ver la parte final de

un fichero. En algunas ocasiones en las que lo que nos interesa sabemos

que esta al final de un fichero, por ejemplo al chequear un log de

alguna aplicación, usaremos este comando. Veremos mas aplicaciones

cuando hablemos de cauces y redirecciones.

 

 

head Este comando es similar en cuanto al comportamiento pero lo que permite

ver es la primera parte de un fichero, su cabeza, como su propio nombre

indica.

 

 

 

Si bueno pero ¿ Donde se ha metido el fichero ?

 

 

Este es uno de los problemas típicos. UNIX con un árbol de directorios de

varias páginas todos ellos llenos de megas y megas de ficheros, parece

convertirse a veces en un pozo sin fondo , en el que el usuario y aun mas el

administrador han de introducirse a la caza de algún fichero que !!! ANTES

ESTABA AH_ !!!.

 

La orden "find" nos ayuda en la tarea de localizar un fichero.

Su sintaxis es por lo menos curiosa , aunque tiene muchas opciones os

recomiendo el siguiente formato :

 

$ find / -name pepe -print

/home2/lib/net3/isd/pepe

$

 

Analizamos la línea :

 

find Simplemente el comando de buscar.

 

/ El lugar donde comienza la búsqueda. Podemos decir que empiece en

nuestro directorio . o en otro determinado "/usr" pero con "/"

estaremos seguros de buscar por todo el "filesystem".

 

-name Es la opción que indica que lo que buscamos es un NOMBRE de

fichero.

 

pepe Es el nombre del fichero a buscar. Podemos hacer cosas como "pepe*" o

"*pepe*" que encontrara todos los ficheros en cuyo nombre se encuentre

esta secuencia de caracteres.

 

-print Esta opción es muy importante. Es la forma de decirle a "find" que

queremos que imprima el lugar donde se encuentra ya que sino

simplemente lo buscara y al terminar NO DIRA NADA. ¿ Peculiar ?

¿como va a saber que nos gustaría ver el lugar donde se encuentra

el fichero si no se lo pedimos ? ej:

 

- ¿ tiene Vd hora ?

- si

 

Quien me puede decir que el planteamiento no es correcto.

 

*(SVR4) Ahora veremos una función del comando find muy útil. Imaginemos que

queremos localizar TODOS los nombres y posiciones de un fichero que tiene

varios "links". Además del nombre del fichero, este tiene un identificador

UNICO para el sistema que lo identifica de forma inequívoca. Este

identificador se llama "ínodo". Cada fichero físico tiene UNO y SOLO UNO ,

es por eso que todos los elementos linkados en un sistema UNIX tendrán como

"ínodo" el del fichero físico al que apuntan . Para localizarlos podremos

buscar TODAS LAS ENTRADAS DE DIRECTORIO CORRESPONDIENTES AL INODO INDICADO.

 

$ find / -i 2433 -print

 

Como vemos aqui , hemos cambiado "-name" por "-i" ( busca por ínodo) y

añadimos el número de "ínodo" que buscamos. El resto es igual, el comando

"find" devolverá todos los nombres de ficheros lógicos (links) que

corresponden a ese ínodo.

 

Solo nos queda un detalle y es que hemos de conocer por lo menos el número

de "ínodo" de uno de los ficheros linkados y para ello recurrimos a una

opción nueva de una vieja herramienta:

 

$ ls -i notas

2433

$

 

La opción "-i" devuelve el número de "ínodo" de los ficheros listados así

que ya tenemos todo lo que necesitamos.

 

 

 

El árbol de directorios

 

Revisaremos ahora el árbol de directorios del UNIX SYSTEM V versión 3 . Para

aquellos que trabajéis en UNIX derivados de BSD os parecerá mas conocido el

UNIX SVR4 que estudiaremos en la próxima lección profundamente por ser la

versión mas actual.

 

 

 

UNIX SYSTEM V VERSION 3

 

/

 

¦

+----------------------------+---------------------------------------+

/usr /tmp /mnt /bin /etc /lost+found /dev /lib

¦

¦

/bin

 

 

 

 

Este es el árbol de directorios básico de la versión 3, el contenido de los

directorios es el siguiente.

 

 

/tmp = Es el directorio que utilizan los programas y el sistema para crear

sus ficheros temporales, se suele borrar en cada apagado del

sistema.

 

/mnt = Sobre este directorio se montan las unidades de disco .

Explicaremos el concepto mas adelante.

 

/bin = Originariamente este era el directorio de comandos externos del

UNIX pero la verdad es que ahora es solo un directorio de comandos.

 

/etc = En este directorio se encuentran todos o casi todos los comandos

y ficheros que tienen que ver con la administración y el

mantenimiento el sistema.

 

 

/lost+found = Es un directorio especial que usa el sistema para control de

errores en el disco NO DEBE SER MANIPULADO POR USUARIOS.

 

/dev = En este directorio se encuentran los dispositivos.

 

/lib = Directorios para las diferentes librerías del sistema.

 

/usr = Es el directorio básico de usuarios, si el sistema es un poco

grande podremos encontrar un nuevo directorio llamado "/U" o

"/HOME" del cual cuelgan los programas de usuario.

 

/usr/bin = El directorio de los comandos mas usados por los usuarios.

 

 

LECCION 6

 

FILESYSTEMS

 

Antes de plantear la estructura de directorios del UNIX SYSTEM V REV. 4

vamos a profundizar en un concepto que anteriormente tratamos de forma

somera, los "FILESYSTEMS" .

 

En principio podríamos asimilar el concepto de "filesystems" al de partición

en MS-DOS. Sin embargo existe una diferencia fundamental, si en MS-DOS cada

partición es tratada como una nueva unidad de almacenamiento lógico , en UNIX

cada partición es tratada como parte de la estructura de directorios.

 

Hemos citado anteriormente que la estructura de directorios de UNIX es de

tipo árbol jerárquico. Cuando tenemos diferentes particiones , en algún

momento le decimos al sistema a partir de donde puede "colgarse", lo vemos

gráficamente:

 

Tenemos una partición "a" con su estructura de directorios

 

 

Partición a =+ /pepe

¦

+ /prog.c

¦

+ /MILIB --- /LIB.C

+ /LIB.ASM

 

 

Para poder usarla hemos de disponer en nuestro "filesystem" "root" ( el

principal del sistema ) de un directorio que llamaremos "punto de montaje".

Ese "punto de montaje" es el lugar de nuestro filesystem original a partir

del cual comenzará el nuevo "filesystem" . De esta forma pasará a formar

parte de la UNICA estructura de directorios :

 

Punto de montaje

 

/HOME

 

 

Una vez montado :

 

/ --- /usr

¦

+ /bin

¦

+ /HOME ------ /pepe

¦

+ /prog.c

¦

+ /MILIB --- /LIB.C

+ /LIB.ASM

 

Como vemos, un "filesystem" se comportará de cara a nosotros "usuarios" como

una parte mas de la estructura de directorios. El comando que permite montar

filesystems es el comando "mount" pero lo estudiaremos mas adelante ya que

lo que ahora nos interesa es el concepto.

 

 

 

* Para verdaderos maniacos !!!

 

A lo largo de los años, la manera de gestionar internamente las particiones

ha evolucionado de tal forma que se convirtió en una de las diferencias

fundamentales de las diferentes versiones de UNIX.

 

Según el sistema con el que trabajemos, encontraremos con alguno de los

siguientes tipos:

 

s5 Es el original creado por AT&T. Para los que deseen profundizar os diré

que tiene una tabla de "ínodos" de tamaño fijo y limita los nombres de

directorios y ficheros a 14 caracteres . En algunas versiones ( SCO, por

ejemplo ) se denomina s51K, debido a la gestión de bloques de

información de 512 Bytes.

 

ufs También llamado "ffs" (fast filesystem, Filesystem rápido) . Creado en

la universidad de Berkeley para el UNIX BSD. Permite una tabla de

"ínodos" de tamaño variable y así mismo la gestión de bloques de

distintos tamaños así como nombres de mas de 14 caracteres.

 

 

Una de las peculiaridades de este sistema (SVR4) es que por fin soporta

estos dos tipos de "filesystems" coexistiendo a la vez en el disco duro. Sin

embargo y a raíz de esto era necesario que la partición de arranque fuera

siempre del mismo tipo por lo que se crea específicamente para ello un nuevo

tipo de "filesystem" llamado "bfs" (boot filesystem , filesystem de

arranque).

 

bfs Es una partición que ha de existir de forma obligatoria en todos los

sistemas SVR4. No es muy grande, normalmente ocupa unos 8 Mb y en ellos

SOLO están los ficheros necesarios para el arranque del sistema.

 

Solo un par de datos mas. Si bien una partición puede estar o no "montada"

en un sistema, su tamaño es fijo por lo que el administrador del sistema

habrá de calcular con sumo cuidado el tamaño de las diferentes particiones

de un sistema durante su instalación. Para modificar el tamaño de las

particiones, al igual que en MS-DOS , hemos de reinstalar de nuevo el

sistema.

 

* AIX En "AIX", el sistema UNIX de IBM, el sistema de particiones es

virtual, de forma que podremos modificar los tamaños de las

particiones del sistema de forma dinámica.

 

¿ porque todo esto ?

 

El uso de particiones es una forma inteligente de gestionar el espacio del

disco y además es también, la única manera de añadir un nuevo disco a un

sistema. Cada nuevo disco físico será tratado, una vez montado, como una

parte nueva del árbol de directorios ya existente. Por otro lado en caso de

un error del sistema, es muy difícil que se dañen todas las particiones por

lo que , en general , por lo menos se suelen crear dos, la principal "root"

y una para los usuarios "/U" o "/HOME" , recordemos que en SVR4 habrá como

mínimo una mas "/stand" la partición del tipo "bfs" desde la que , como ya

vimos antes, el sistema se pone en marcha.

 

Toda esta explicación era importante antes de presentar el árbol de

directorios del UNIX SVR4 ya que muchos de estos directorios son particiones.

 

 

El árbol de directorios de UNIX SVR4

 

 

+ /stand

¦

+ /sbin

¦

+ /dev ---- /console

¦ ¦

¦ + /lp

¦ ¦

¦ + /term

¦ ¦

¦ + /dsk

¦

+ /etc

¦

+ /opt

¦

/ -+ /home

¦

+ /spool -- /lp

¦ ¦

¦ + /uucp

¦

+ /tmp

¦

+ /mnt

¦

+ /var ---- /adm

¦ ¦

¦ + /mail

¦ ¦

¦ + /news

¦ ¦

¦ + /uucp

¦

+ /usr ---- /bin

¦ ¦

¦ + /lib

¦ ¦

¦ + /sbin

¦ ¦

¦ + /ucb

¦ ¦

¦ + /X

¦ ¦

¦ + /share ------ /man

¦

+ /install

¦

+ /lib

¦

+ /bin

¦

+ /shlib

 

Como veis, es un árbol un poco mas complejo que el de la revisión 3, si bien

en este caso he añadido algún directorio típico pero no obligatorio para el

funcionamiento del sistema, lo analizaremos:

 

/ Es el punto inicial del sistema, "root" .

 

 

/stand Recordamos que este es el directorio en donde se encuentran los

programas que el sistema necesita para arrancar. (standard boot).

 

/sbin Programas ejecutados para la administración de sistema.También se

le llama "stand alone bin".

 

/dev Todos los dispositivos del sistema. Entre ellos podremos encontrar:

 

/dev/console El dispositivo consola del sistema.

 

/dev/lp Diferentes impresoras.

 

/dev/term Los distintos tipos de terminales conectables al sistema.

 

/dev/dsk Distintas unidades de almacenamiento.

 

/etc Al igual que en la versión precedente aquí podremos encontrar os

diferentes ficheros de configuración del sistema.

 

/opt En principio esta vacío pero en el se deben instalar las

aplicaciones fundamentales en el equipo.

 

/home A partir de este directorio que suele ser un "filesystem" separado,

se encuentran los usuarios. Es posible que encontremos un "/home2"

o incluso en sistemas muy grandes un "/home3".

 

/spool Los "spools" (colas) se usan en UNIX en mucho procesos. Aquí

encontraremos los ficheros que están relacionados con esos

procesos, por ej.:

 

/spool/lp El control de las impresiones y configuración de

Impresoras.

 

/spool/uucp El soft y las colas de comunicaciones en UNIX.

 

/tmp Al igual que en Versión 3 este es un directorio para ficheros

temporales que se vacía en cada arranque.

 

/mnt Punto de montaje para unidades de disco. Es posible que encontremos

otro "/mnt2" . Las unidades de diskette también se pueden montar

como una parte del sistema pero de manera temporal. ( Lo

estudiaremos mas adelante.)

 

/var Este es el directorio mas complejo de sistema. UNIX pose una gran

cantidad de suplementos desarrollado por cada fabricante por lo que

es quizá la parte del sistema que mas se diferenciará de otros.

Todo eso que "puede ser distinto entre versiones" estará aquí, como

por ej:

 

/adm La contabilidad del sistema. En control de tiempo de uso del

sistema por cada usuario.

 

/mail El subsistema de correo entre usuarios .

 

 

/news Las news y el soft que las ejecuta y controla.

 

/uucp El subsistema de comunicaciones .

 

/usr Contiene directorios y ficheros accesibles a usuarios pero se

excluyen de el todas aquellas partes de UNIX que varían de un

fabricante en otro.

 

/bin Programas sueltos de uso común.

 

/lib Librerías de código o ficheros necesarios para el uso de

algunos comandos.

 

/sbin Los programas ejecutables para la administración del sistema.

 

/ucb Aplicaciones que provienen de BSD UNIX. Recordemos que este

sistema nació para integrar TODOS los unix.

 

/xenix Aplicaciones provenientes del sistema XENIX.

 

/X Aquí se encuentra el software de X_windows, el entorno de

ventanas de UNIX.

 

/share/man Las páginas del manual,

 

 

/install Es un directorio muy útil para el administrador y es necesario que

nos paremos un poco en el. Para instalar software en un sistema

UNIX, existen unos procedimientos standard que a diferencia de DOS,

vienen con el propio UNIX. Cada vez que añadimos un producto o una

parte del mismo, se crean en este directorio una serie de entradas

que se usaran para controlar que es lo que esta instalado y como.

Así cuando hay problemas o una duda a cerca de la instalación o no

de una parte el sistema solo hemos de acudir allí para revisar si

esta o no e incluso donde se encuentra, que permisos tiene etc.

 

 

/lib Es un "link simbólico" a "/usr/lib".

 

/bin También un "link simbólico" a "/usr/bin".

 

/shlib Librerías de uso común.

 

El UNIX y la modificación del comportamiento informático.

 

Quizá pueda parecer un poco tonto este titulo pero os aseguro que es tan

cierto como la vida misma. Ningún otro sistema genera tantos sentimientos

como UNIX. Tras haberlo conocido, los usuarios se dividen en dos grupos

fundamentales, los que lo odian absolutamente debido a su complejidad y lo

críptico de algunos comandos y aquellos que viéndose atrapados por su

libertad de acción lo aman profundamente. Ninguna otra comunidad de usuarios

es tan solida como la de UNIX . Los convenios mas o menos oficiales en la

denominación de directorios es algo que pertenece y por lo que podremos

reconocer a esa comunidad de usuarios. Haciendo una traslación a otro

sistema, el típico usuario UNIX, creara en MS-DOS un directorio "\bin" con

los ficheros del sistema y un "\tmp" para los ficheros temporales , incluso

podremos encontrar en equipos MS-DOS un directorio "\etc". Por otro lado

encontrar ficheros bat como "ls" "pwd" "rm" o similares no es nada raro.

 

 

De la misma forma , en los directorios de usuario de un UNIX encontraremos

varios directorios "/bin" o "/lib" .

 

El árbol de directorios que os he mostrado, es solo la parte de arriba del

total y sobre el solo es necesario un conocimiento somero. A veces dudo si

existe alguien en el mundo que conozca de memoria su propio árbol de

directorios. Si bien el dominio de la parte mas importante es algo

fundamental para un buen administrador. Para que tengáis una referencia al

respecto os daré una pequeña lista de datos, en una maquina UNIX de tamaño

medio completamente configurada es posible que encontremos del orden de 300

Links simbólicos, unos 7000 ficheros y 850 directorios . Existen unos 800

comandos distintos en un UNIX. Es por eso que quizá pueda sorprender cuando

algún administrador habla de UNIX pequeños a los que están creados para PC

como Linux, Coherent,Bsd.386 o similares.

 

 

LECCION 7

 

 

EL SHELL I

 

El "SHELL" ( caparazón) es el interprete de comandos de UNIX. Sin embargo

hay muchas diferencias entre el UNIX SHELL y ¿ el command.com? por ejemplo.

 

La primera es que en UNIX tenemos oportunidad de elegir entre varios SHELLS.

Según las versión de UNIX es posible que nos encontremos con alguno de los

siguientes SHELL:

 

sh Es el primero de los desarrollados para UNIX. También se le conoce como

"Bourne SHELL" por el nombre de su creador. Y también se refieren a el

como "jsh" (Job SHELL , SHELL de trabajo) .Su prompt por defecto es el

carácter "$" para usuarios y "#" para el superusuario. En BSD UNIX su

prompt suele ser "&". Es el SHELL mas utilizado por los usuarios.

 

csh Desarrollado en Berkeley para crear un entorno mas acorde con la

programación de aplicaciones en "C". Dispone de mas funciones

matemáticas que el "sh" . Es menos utilizado que el "sh" debido a su

complejidad.Su prompt es "%" para el usuario y "#" para el superusuario.

 

ksh Es uno de los mas modernos. Su nombre proviene de su creador "Korn" ,

al igual que muchas otras partes del UNIX. Es un shell verdaderamente

interesante. En un punto intermedio entre "sh" y "chs" provee al usuario

de funciones avanzadas como alias de comandos, histórico, funciones en

memoria etc. Personalmente recomiendo su uso ya que es quizá el mas

versátil de los interpretes que se nos ofrece.

 

rsh Es un SHELL compuesto por un subconjunto de comandos del "sh". Se creo

para aquellos usuarios a los que no se les permite realizar demasiadas

tareas, de ahí el nombre (restricted shell, SHELL restringido). La

verdad es que apenas de utiliza.

 

vsh Un shell especifico de los UNIX de SCO (Santa Cruz Operation). Un shell

en modo texto pero con menús tipo "popup" y barras de desplazamiento.

Es demasiado cerrado por los que se consideró un fracaso.

 

 

Además de estos "shell" , es muy normal que los administradores creen sus

propios shell o que simplemente el shell de un usuario sea la aplicación a

utilizar. Recordemos que en UNIX todo vale.

 

Otra de las diferencias entre el SHELL UNIX y otros interpretes, es que este

tiene su propio lenguaje de programación con control de ficheros, entradas

de datos, bifurcaciones y otras estructuras de control. Como cualquier otro

lenguaje de alto nivel , y eso es lo que entusiasma a los amantes del UNIX.

 

El área de trabajo puede ser moldeada a nuestro gusto si conocemos bien el

lenguaje SHELL, sin embargo y antes de empezar una aclaración importante:

La sintaxis de SHELL es curiosa, quizá hasta quisquillosa, recuerda mucho a

"C" así que está llena de signos que habrán de colocarse en su sitio preciso

pues sino habrá errores incomprensibles, así que NO os desaniméis y tratar

de crear vuestras aplicaciones probando cada muy pocas líneas, por lo menos

al principio, de esa forma la depuración y el control de errores será mas

sencilla.

 

 

Principios básicos

 

Cuando accedemos al sistema UNIX y se ejecuta nuestro SHELL, este toma una

serie de variables que permiten su ejecución según nos pueda interesar .

 

Al igual que en MS-DOS tenemos el "config.sys" y el "Autoexec.bat" para

determinar los datos de configuración de nuestro sistema, en UNIX disponemos

de un fichero oculto que define todo esto, este fichero es el ".profile".En

realidad el SHELL ejecuta el contenido de 2 ficheros, el "/etc/profile" que

es de carácter general y se ejecuta antes y el ".profile" de cada usuario si

lo hay. Cuando algún administrador quiere modificar el entorno de todos los

usuarios modifica el "/etc/profile" que por otro lado NO es un fichero

oculto.

 

Veamos un fichero .profile :

 

ricardo >cat .profile

# profile del usuario ricardo

#

# Se modifica el Path

PATH /usr/bin:$HOME:$HOME/bin:.:..:

# se cambian los prompts y otras variables

#

PS1="`uname`>"

PS2=">>"

TERM=vt220

MAILCHECK=600

# Evitamos que os interrumpan con mensajes.

mesg n

# colocamos los permisos de creación de ficheros

umask 220

export MAILCHEK,TERM,PATH,EDITOR

ricardo>

 

Ya se, ya se que estáis deseando saber que es todo eso, pero tomároslo con

calma que ya vamos.

 

Variables del SHELL

 

No hay una norma rígida para la denominación de variable pero si una

cuestión de herencia. Por lo general las variables del sistema suelen estar

en letras mayúsculas y aquellas que nosotros usemos estarán en minúsculas.

 

Para saber que variables están definidas en nuestra sesión, disponemos de dos

ordenes : "set" y "env"."env" viene de "enviroment", entorno en castellano

y "set" es la orden que se utiliza para definir variables en "csh" si bien

no es necesaria en "sh" ni en "ksh".

 

Para definir una variable haremos lo siguiente:

 

$ A=hola

$ echo $A

hola

$

 

Nos fijamos que una vez creada, la variable es tratada con el carácter "$"

delante . En algunos SHELL la definición la haremos con el comando "set":

 

$ set A=hola

$ echo $A

hola

$

 

Si nuestra variable estuviera dividida en varias palabras , la enmarcaríamos

entre comillas dobles ("). Es muy importante no usar otro tipo de comillas

ya que cada una tiene su significado en UNIX:

 

$ A=hola amigo

$ echo $A

hola

$ A="hola amigo"

$ echo $A

hola amigo

$

 

Las variables mas comunes.

 

Hemos de tener en cuenta que una variable no debe tener como nombre el de

una palabra reservada. Así mismo no hemos de utilizar para fines propios los

de variables que el sistema utiliza para sus cosas, veremos ahora una lista

de las variables mas importantes del "SHELL":

 

$HOME Es nuestro directorio raíz, el lugar donde el UNIX nos sitúa al

conectarnos como usuario.

 

$PATH El MS-DOS tomo de UNIX este termino y evidentemente define los

lugares donde UNIX buscará un comando tecleado. Una cosa importante

es que UNIX no buscará un comando en directorio actual "." si este

no esta en el "PATH". Fijaros en el ".profile" anterior y veréis

que a diferencia que en DOS , aquí en UNIX cada nuevo directorio

se separa del anterior por dos puntos ":" y no por ";".

 

$CDPATH Esta variable no tiene análoga en MS-DOS. Cuando nosotros hacemos

"cd" y no damos un camino completo P. ej:

 

$ cd bct

El comando "cd" buscará ese directorio a partir de el directorio

actual. Si no lo encuentra simplemente devuelve el error de

directorio no valido. Bien, si definimos una variable "CDPATH" con

esta forma:

 

$ CDPATH=:$HOME:/$HOME/bct:/$HOME/aaa:

 

El comando "cd" recorrería la variable y haría cd al directorio

"bct" que se indica en dicha variable. En definitiva, es una

variable que indica donde buscará un directorio cuando "cd" no lo

encuentre .Ingenioso ¿no?.

 

$MAIL Es el lugar donde UNIX almacenará nuestro correo. Existe un lugar

por defecto que varia dependiendo de la versión de UNIX pero usando

esta variable, podremos cambiarlo.

 

$MAILCHECK Es una variable que define cada cuanto tiempo el sistema

chequeará si tenemos o no correo. Por defecto se pone a 600

segundos pero su valor puede modificarse.

 

$LOGNAME Es el nombre de nuestro usuario de conexión. Si ejecutamos el

comando "logname" , simplemente veremos que lo que hace es leer el

contenido de esta variable.

 

$TERM Le indica al "SHELL" o a otros programas cual es nuestro tipo de

terminal. La gestión de terminales y sus funciones es un tema

escabroso en UNIX y esta variable se hace muy importante para según

que aplicaciones.

 

$TZ La verdad es que no es muy útil a nivel local. Su función es

determinar la zona horaria. Nació para las comunicaciones y para

realizar conexiones con otros sistemas alejados pero no es muy

interesante.

 

 

$PS1 Es el prompt del sistema . Lo que ocurre es que es mucho mas

abierto que el de MS-DOS. En el podremos colocar por ejemplo, la

salida se cualquier comando o texto. Según que sistema puede tener

por defecto diferentes caracteres : "$", "#", "@" "%".

 

$PS2 El concepto de "SHELL secundario" es algo que no existe en DOS,

pero en cualquier caso es un shell al que se accede bajo distintas

circunstancias que mas adelante veremos. Cuando accedemos a este

"SHELL" , este es su prompt.

 

 

Esta es la lista de variables mas importantes del "Bourne SHELL" mas adelante

trataremos en profundidad el "KSH" y aprenderemos algunas mas .

 

 

Mecanismos de funcionamiento del SHELL.

 

 

Algo de teoría nunca viene mal así que os contaré como trabaja el SHELL.

Todo comienza cuando tecleamos una orden y pulsamos <INTRO> , <RETURN>,

< ENTER > o símil. En ese momento y no antes, el SHELL lee nuestra orden y

trata de identificarla como un comando interno del propio shell, cuando es

así, el shell simplemente la ejecuta. ¿ Que no ? Pues entonces trata de

buscarla dentro de las funciones de SHELL. Una función es una agrupación de

ordenes bajo un identificador (nombre) veremos como se crean mas adelante.

Si el SHELL encuentra dicha definición en la lista de funciones definidas,

entonces simplemente lee cada comando y lo ejecuta . Pero si tampoco es eso

, entonces crea un SHELL HIJO que recorrerá el "$PATH" buscando en cada

directorio la orden que tecleamos. Si se encuentra en alguno de los

directorios indicados la ejecutará . Sino devolverá un error y esperará la

próxima orden. Recordemos de nuevo que el SHELL NO buscará la orden en

nuestro directorio actual a no ser que se encuentre en el PATH. Si la orden

no se encuentra allí. De todas formas esto tiene una solución. Para

dirigirnos a un comando en nuestro directorio actual cuando no este en el

PATH haremos:

 

$ ./hola

 

Esta orden, ejecuta el comando "hola" en el directorio en el que nos

encontremos.

 

 

 

También podemos ejecutar listas de ordenes , algo qué no podemos hacer en

otros sistemas:

 

$ clear;ls -l; cd ..

 

Tras introducir esta línea, el SHELL, limpiará la pantalla después listará

los ficheros del directorio y hará "cd" al directorio anterior. Podríamos

añadir tantos comandos seguidos como queramos hasta 256 caracteres que es

tamaño máximo de una línea de SHELL si bien no es muy útil ejecutar mas de

tres seguidos.

 

 

 

 

Secuencias de teclas importantes.

 

Al realizar esto, puede pasar que en nuestra pantalla se llene de líneas que

suben rápidamente sin darnos tiempo a leerlas, hay secuencias de teclas

importantes que hemos de recordar además del ya citado <CONTROL>+<D>.

 

<CONTROL>+<S> Interrumpe la salida de datos de nuestro terminal .

 

<CONTROL>+<Q> Reinicia la salida de datos por la pantalla de nuestro

terminal.

 

<CONTROL>+<C> Termina un la ejecución de un comando.

 

 

Comodines

 

Los comodines son caracteres utilizados para sustituir a uno o varios de los

caracteres de una palabra para así facilitar el uso del ficheros en el

sistema, por ejemplo. En UNIX, los comodines están verdaderamente bien

pensados ya que cubren muy variadas funciones.

 

? Este carácter representa a uno y solo uno de los caracteres del nombre

de un fichero :

 

$ ls ficher?

 

El comando "ls" listará los ficheros cuyo nombre empiece con la

secuencia "ficher" pero que pueden acabar en la letra que sea.

 

* El asterisco que indica a una cadena de cualquier longitud tiene una

peculiaridad con respecto a MS-DOS , veamos :

 

$ls *ab

$ls ab*

$ls *ab*

 

En la primera línea , obtendríamos el listado de todos los nombres de

ficheros que empezando por cualquier cadena, terminen en "ab".En la

segunda obtendríamos la lista de ficheros cuyos nombres empiecen con

"ab". En la tercera línea el listado mostrará la lista de ficheros que

contenga en su nombre "ab" . Evidentemente esto implicaría que también

los ficheros "*ab" y "ab*" saldrían en el tercer listado. ¿ os gusta la idea

?. No se vayan todavía, aún hay mas !!

 

 

Un nuevo tipo de comodín nos permite en UNIX, referirnos a "rangos de

caracteres" , este comodín es el corchete y funciona de la siguiente manera:

 

 

[0-9] Se refiere a ficheros que contienen en su nombre un numero entre

0 y 9.

 

[a-z] Comprende solo los caracteres en minúsculas.

 

[A-Z] Se refiere a los caracteres en mayúsculas.

 

[a-Z] Incluye a todos los caracteres.

 

 

$ls [X-x]11

 

Esta línea de comandos listaría todos los ficheros que empiecen por "X" o por

"x" y que continúen por "11".

 

También podemos combinar los comodines pero no es bueno liar mucho las cosas.

 

La manera que utiliza el SHELL para interpretar estos comandos , se cita en

algunos libros como "expansión".

 

la orden :

 

$ls file[a-d]

 

se expande como :

 

$ls filea fileb filec filed

 

Por lo pronto esto tiene una consecuencia , si la línea que se crea es mayor

que los famosos 256 caracteres que el SHELL soporta por línea, no ejecutará

el comando y devolverá uno de los siguientes errores:

 

$ ls *

Too many args.

 

$ ls *

Arg list too long.

 

En estos casos hemos de dividir el total de ficheros del directorio en grupos

utilizando combinaciones de comodines.

 

 

Borja´s site

News