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
¦ ¦
¦ ¦
¦ + /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 |