“sitO” Noticias Tecnológicas

August 27, 2006

Aproximación Teórica a los Sistemas de Ficheros

Filed under: Guias

Este es el primer post de lo que debería ser una pequeña serie sobre losSistemas de Ficheros (File System) o F.S. a partir de ahora, en este primerPost vamos a ver el concepto de F.S. y de forma general como se aplican estosconceptos a F.S. reales.

Bien cuando hablamos de F.S. nos referimos a la manera en que guardamosinformación en un dispositivo de almacenamiento secundario, como sabemos enla arquitectura de un PC el dispositivo de almecenamiento principal loconstituye la memoria principal del sistema o la RAM, pero debido a laslimitaciones de esta (tamaño limitado y volatilidad) requerimos de otrosdispositivos de almacenamiento de mayor capacidad y no volatil, estosdispositivos son los HD,CD,DVD,memorias flash,cintas DAT…

NOTA: En un PC para ejecutar las ordenesde un programa este debe estar en memoria principal, no se puede ejecutardesde el HD, por lo que el proceso sería el siguiente:

  1. Los bytes que componen el programa son llevados desde el HD a la memoria principal del programa (RAM).
  2. El S.O. bajo demanda va cargando los bytes (que conforman instrucciones) a los registros de la CPU.

En este ejmplo se ha obviado la memoria caché, que es una memoriasituada entre la RAM y la CPU de tamaño más reducido que la anterior peromucho más rápida en la cual se almacenan aquella información que es muydemandada por la CPU ganando en velocidad. Hay dos tipos de memoria caché, lainterna, primer nivel o L1 situada dentro del chip de la CPU y la externa,segundo nivel o L2 situada en la misma placa del micro pero fuera de la CPU(se da siempre que L2>L1).

 

NOTA: En un disco rígido, lalectura/escritura se realiza mediante un cabezal mecánico que vadesplazandose sobre un disco en rotación, independientemente de la geometríadel disco, la unidad mínima de trabajo del cabezal se denomina sector (unidadelemental física), por encima tenemos la capa software mediante la cualabstraemos esta medida a otra llamada bloque (también llamado cluster, hayalgo de controversia en la nomenclatura) esta medida específica del F.S.constituye la unidad de trabajo del F.S. y es de tamaño fijo e invariabledesde que aplicamos un formato, es por tanto la unidad elemental lógica,siendo la que nos interesa ya que el F.S. trabaja con ella y de formatransparente la implementará con ‘x’ cluster.

 

CONCEPTO DE FICHERO:

El FS tiene en el fichero la unidad lógica de almacenamiento, el ficheroes una secuencia de bits (enfoque seguido por los S.O.), registros (tarjetasperforadas, casi extinto), arbol(bases de datos)… con un formatoidentificacble por su creador y distinguido por un nombre y unosatributos.

Hay distintos tipos de fichero según la finalidad del mismo y por lo tantocon unas características distintas, veamos por ejemplo los tipos de ficherospara un sistema UNIX:

  1. Ficheros Regulares: Son ficheros ASCII o binarios.
  2. Directorios: Ficheros especiales gestionados por el S.O. para mantener una estructura dentro del F.S. contienen una entrada por cada fichero que hay dentro de ellos, pudiendo contener los atributos y las direcciones en disco de los mismos (como MS-DOS) o apuntar a una estructura especial que contiene esta información (como UNIX).
  3. Ficheros Especiales de Caracteres: Empleados para la comnicación de E/S, se utilizan para mapear dispositivos lineales como impresoras,terminales…
  4. Ficheros Especiales de Bloques: Empleados para modelar dispositivos de almacenamiento como los HD.

Hay dos tipos de forma de acceso a los ficheros:

  1. Acceso Aleatorio: Se nos permite posicionarnos en cualquier parte del fichero para realizar una operación sobre él, usado en casi todos los dispositivos típicos de almacenamiento.
  2. Acceso Secuencial: No se permite el posicionamiento a una parte del fichero sin seguir de manera secuencial un orden, usado en cintas magnéticas, por ejemplo.

En cuanto a los atributos y el nombre que puede tener un fichero demomento sólo diremos que depende del S.O. y del F.S. a usar, partiendo deatributos básicos como el propietario y la fecha de creacción a un repertoriobastante alto de los mismos.

 

IMPLEMENTACIÓN DE FICHEROS:

Ya hemos dicho que el fichero es la unidad lógica fundamental del F.S.pero vamos a ver como se maneja esa unidad elemental en el disco. Ahora unfichero (unidad lógica) se divide en bloques (unidad elemental lógica) paraser guardado en el disco. La forma de asignar estos bloques en el disco puedeseguir distintas implementaciones, y es un elemento muy importante ycaracterístico de un F.S.

Antes vamos a matizar el concepto de fragmentación, hay dos tipos defragmentación, la "fragmentación externa" que se produce cuando los bloquesque se asignan a un fichero cada vez van asignandose más dispersos, debido aque cuando empezamos a asignar espacio para ficheros en discos recienformateados estos se asignan continuos pero cuando vamos borrando yescribiendo estos van dejando huecos en los que luego no podemos alojar unfichero teniendo que asignarle bloques no contiguos, de esta manera empeorael rendimiento ya que hacemos trabajar más al brazo motor del HD. Lafragmentación interna es relativa al tamaño del bloque, si este tiene untamaño por ejemplo de 4Kb, al ser esta la unidad física mínima, no podremostener archivos de menos de estos 4Kb, con lo que aunque un archivo sea de 2bytes, en disco ocupará 4Kb. La fragmentación externa puede ser evitable conF.S. que optimicen la asignación o con aplicaciones software dedefragmentación que se encargan de reagrupar todos los ficheros del F.S. deforma contigua (defragmentador de Windows), mientras que la interna no puedeser evitada y por tanto es muy importante elegir un tamaño óptimo de bloqueen función de nuestras necesidades, teniendo en cuenta que cuanto mayor elbloque más rápidas las operaciones de r/w pero mayor fragmentacióninterna.

  1. Asignación Adyacente: Los bloques que conforman un fichero son almacenados de forma adyacente en el disco.

     

    • Ventajas:

      Es la implementación más facil.

      Los directorios sólo deben de guardar la entrada de la primera posición.

      Tiene un rendimiento muy alto ya que una vez encontrado el fichero la lectura del mismo es secuencial y no hay que ir haciendo desplazamientos por todo el disco buscando el siguiente bloque.

    • Inconvenientes:

      Se ha de saber de antemano el tamaño del fichero para saber si hay espacio contiguo para almecenarlo, y esta función de busqueda de espacio contiguo puede ser costosa.

      El fichero no puede crecer.

      Enorme fragmentación externa del disco.

    Pese a sus pegas no hemos de pensar que no es un método válido, pues lo usamos a diario en CD’s y DVD’s, ya que una compilación para estos sistemas es estática, podremos ir llenando el disco mientras tenga espacio libre, pero sin modificar los archivos ya existentes.

  2. Asignación en forma de Lista Ligada: Los ficheros se foman como una lista ligada (simple o doblemente enlazada) de bloques en disco, donde tenemos en cada bloque un puntero a la dirección del siguiente bloque.

     

    • Ventajas:

      No hay fragmentación externa.

      Los directorios sólo deben de guardar la entrada de la primera posición.

    • Inconvenientes:

      Pobre rendimiento, el acceso aleatorio es muy lento.

      Se desaprobecha espacio de almacenamiento en cada bloque para guardar el puntero.

      El tamaño válido para datos ya no es potencia de 2, lo cual es ineficiente para la forma de trabajar de muchos programas en potencia de 2.

    Es un sistema de asignación el cual que yo sepa no se aplica en la práctica pero sirve de base para otros como veremos.

  3. Asignación mediante Lista Ligada y un Índice:

    Una modificación del anterior donde el puntero que antes guardabamos en cada bloque, ahora se guarda en una estructura aparte en forma de tabla o de índice. Las ventajas son abismales, el acceso es mucho más rápido ya que tenemos "a mano" todos los punteros para localizar los bloques, y no tenemos que recorrer toda la lista leyendo de cada bloque la posición del siguiente, por otro lado no se pierde espacio de almacenamiento en el bloque y este es potencia de 2.

    Este sistema es la base de los F.S. actuales y según implementemos la estructura anterior tendremos métodos de asignación muy diferentes:

    FAT (File Allocation Table):

    Método en el que los índices son guardados en una tabla unidimensional en la que hay una entrada por cada bloque del disco, en los directorios guardamos un único puntero a la tabla por cada archivo de manera que cuando queremos leerlo vamos leyendo las posiciones del archivo en disco desde la tabla donde en cada entrada de la misma nos apunta hacia la siguiente. El principal inconveniente radica en que la tabla para ser recorrida debe estar en memoria y esta puede crecer bastante en un disco de grandes dimensiones o tamaños de bloque pequeños, y la gran fragmentación externa que se origina en discos con muchas operaciones de escritura y borrado . Es el método usado en MS-DOS, disponible en Windows y ampliamente usado en disquetes y memorias flash.

    NODOS-I:

    En este método a cada archivo se le asocia una estructura llamada nodo-i (nodo índice) el cual contien los atributos y las direcciones en disco de los bloques del fichero. En el nodo-ise encuentran unas direcciones de disco, suficientes para archivos pequeños, en caso de necesitar más direcciones, una entrada apuntaría a un "Bloque Simplemente Indirecto" que contiene más direcciones de disco. Si aún necesita más, el nodo-i tendrá otra dirección de un "bloque Doblemente Indirecto" que contendrá una lista de bloques simplemente indirectos. Si aún no es suficiente se puede utilizar otra entrada para apuntar a un "Bloque Triplemente Indirecto" que contendrá un lista con bloques doblemente indirectos, que a su vez cada uno contndrá otra lista de bloques simplemente indirectos. Este es el método usado tradicionalmente en UNIX.

    Vamos a poner un ejemplo de eficiencia en cuanto a recursos, de los dos tipos de asignaciones, supongamos que tenemos un tamaño de bloque de 4Kbytes y direcciones de 32bits y un tamaño máximo de fichero de 24Gbytes, vamos a ver siguiendo los 2 métodos que recursos necesitariamos:

    • FAT:

      En un bloque de 4Kbytes podemos guardar 1K de direcciones de bloques de 32 bits cada una.

      Para un fichero de 24Gbytes necesitamos 6291456 bloques de 4Kbytes.

      Necesitariamos un espacio en la FAT para guardar estas direcciones de 6144 bloques, o lo que es lo mismo necesitariamos ocupar 24Mbytes para almacenar las direcciones del fichero (recordemos que la FAT tiene que estar en memoria principal) y leerla entera para llegar al final del fichero, tendriamos que leer 6144 bloques de una tabla de 24Mbytes que tenemos que tener en memoria para poder encontrar el final del archivo.

    • NODOS-I:

      Suponemos que el nodo-i guarda 10 direcciones de bloque de datos, una dirección de un bloque simplemente indirecto, una dirección de un bloque doblemente indirecto y un dirección de un bloque triplemente indirecto.

      Con las anteriores suposiciones se podría tener 10 direcciones en el nodo-i, en un bloque simplemente indirecto 1024 direcciones, en un doblemente indirecto 1024^2 y en un triplemente indirecto 1024^3 , lo que hace un total de aproximadamente 4TB de tamaño máximo de archivo y para acceder al final del archivo tan sólo tendriamos que leer 4 bloques (el bloque de nodo-i, el bloque triplemente indirecto, el bloque doblemente indirecto y el bloque simplemente indirecto).

    Vemos que el método de nodos-i proporciona un mejor rendimiento que el de tablas FAT.

DIRECTORIOS:

Como ya dijimos el directorio es un fichero especial, que asocia un nombrede un fichero con la información necesaria para poder localizarlo, esgestinado por el S.O. y nosotros no podremos modificarlo directamente. Unaspecto importante son las limitaciones de tamaño del nombre de un fichero,em MS-DOS teniamos 8 caracteres para el nombre y 3 caracteres para laextensión, en FAT32 para Windows se llega hasta los 255 carcteres, ensistenas UNIX en un principio encontrabamos las restricciones en 14caracteres aunque posteriormente se aumentó a 255.

Como anecdota, algo curioso que me ha pasado con FAT32 en windows, me haocurrido en varias ocasiones que con programas P2P me ha descargado algúnarchivo con un nombre mayor de estos 255 caracteres, el cual se alojabacorrectamente en el F.S. pero luego no dejaba ser eliminado desde la interfazgráfica, teniendo que recurrir a la consola, desconozco la distinción ni quetipo de primitivas se usan desde la consola y desde la interfaz gráfica paramanejar ficheros, pero es cuanto menos curioso, cuando me vuelvan a llamarpor un caso de estos intentaré estudiarlo mejor.

 

FICHERO COMPARTIDOS:

Esto viene a ser lo que se llama en entornos Windows "Accesos Directos" yen entornos UNIX "Enlaces", consiste en que un fichero puede aparecer envarias partes del F.S. hay dos implementaciones para hacer estos enlaces:

  • Enlaces Físicos: Se crean una entrada en cada parte del F.S. donde queramos situar el enlace apuntando al fichero al que queremos enlazar, es importante destacar que la propiedad NO cambia, tenemos varias entradas en directorios apuntando a un mismo fichero, con lo cual hay que llevar un contador de enlaces para saber cuando se puede eliminar el fichero, ya que si eliminamos el fichero sin tener en cuenta posibles enlaces, tendremos en el F.S. un fichero que apunta a una dirección incorrecta provocando una corrupción del sistema.

     

  • Enlace Simbólico: Entraña menos peligros que el anterior y es más flexible, consiste en crear un fichero de tipo "link" cuyo contenido es la ruta al fichero que se enlaza, cuando el propietario borra el fichero este enlace simplemente quedará roto ( a no ser que otro fichero se cree en la misma ruta). Este es el método empleado en los "Accesos Directos" de los entornos Windows, y los creados en entornos Unix con el parámetro -s en la orden "ln" y reconocibles con el carcter "l" (L minúscula) en la información del fichero.

 

REGISTRO DE BLOQUES LIBRES:

El F.S. debe de llevar un registro de los bloques libres para poderasignarselos a nuevos ficheros y reciclarlos de los ficheros eliminados,básicamente hay dos formas de implementar este registro:

  • Lista Ligada de Bloques: Cada elemento de la lista es un bloque que contiene tantas direcciones de bloques vacios como pueda y una última entrada que apunta hacia el siguiente bloque de la lista.
  • Mapa de Bits: Un mapa con tantos bits como bloques tenga el disco, done se activan los bits pertenecientes a bloques ocupados (o viceversa), esta implementación está ligada al hardware ya que hay CPU’s como el x386 que poseen una instrucciòn para devolver el primer bit a 1 de un registro, con lo cual se facilitan las operaciones de manejo del mapa de bits.

MANEJO DE BLOQUES DEFECTUOSOS.

Cuando en el disco aparecen errores físicos que dejan inutilizados algúnsector, necesitamos una manera de saber que ese sector ya no puede serutilizado (estos errores son muy típicos), tenemos distintas soluciones:

  • Solución Hardware: El mismo disco se reserve un número de sectores para cuando detecta un bloque defectuso esta dirección sea asociada a un bloque sano.
  • Solución Software: El S.O. construye un fichero con los bloques defectuosos (como hemos visto un bloque suele estar formado por varios sectores, luego marcar un bloque como defectuoso implica marcar como defectuoso sectores q están sanos).

CONSISTENCIA DEL F.S.

La consistencia es un factor de vital importancia, la peor característicade un F.S. es que no sea lo suficientemente consistente. Los S.O. suelenincluir aplicaciones para comprobar la consistencia que puede ocurrir cuandose produce un fallo en el equipo que interrumpe su funcionamiento cuandotenemos datos del F.S. en la memoria que aún no han sido volcados al disco,lo peor que pueda pasar es que estos datos se refieran a la FAT o a algúnnodo-i.

Para comprobar esta consistencia se crea una tabla con dos contadores parada bloque del disco. Un contador lleva la cuenta del número de veces que el bloque está presente en un archivo y el otro lleva la cuenta del número de veces que el bloque aparece en la lista de bloques libres.

Se recorre todo el F.S. actualizando la lista para cada bloque, tras lo cual se puden presentar los sigiuentes casos:

  • Cada bloque tiene un 1, bien en el primer contador o en el segundo, lo que indica que es un sistema consistente.
  • Un bloque tiene a 0 los ods contadores, se le asigna a la lista de bloques libres.
  • Un bloque aparece dos veces en la lista de bloques libres, se reconstruye la lista de bloques libres asignando el bloque sólo una vez en dicha lista(sólo puede pasar en listas ligadas no en mapa de bits).
  • Un bloque a parece en dos o más ficheros, se copia el bloque en otros bloques tantas veces como n-1 veces aparezca, asignando a cada fichero bloques diferentes.
  • Un bloque aparece una vez en cada contador (aparece como libre y como en uso), se elimina de los bloques libres.

 

Bueno a nivel teórico, esto es una rápida aproximación a lo que es un F.S. y espero que sirva como base para futuros post sobre el tema.

August 25, 2006

Detalles de la EULA de Windows

Bueno hace ya algun tiempo que esto salió, pero creo que es interesante leerlo, este post enlaza con un artículo en el cual se han entretenido en pasar la Licencia de Windows a inglés cotidiano abstrayendose los tecnicismos:

Artículo      Traducción al castellano    Licencia Original de Microsoft 

  • Usted puede instalar y usar Windows XP Home en un ordenador.
  • Si usted comparte archivos o impresoras con otros ordenadores en su casa, no le está permitido hacerlo con más de otros 5 ordenadores.
  • Usted acepta que en cualquier momento, y por petición de proveedores de contenido, Microsoft puede deshabilitar ciertas características en su ordenador, como la habilidad de reproducir sus archivos de música o películas.
  • Usted acepta que Microsoft puede automáticamente y sin su consentimiento poner software nuevo en su ordenador.
  • Microsoft (y cualquiera designado por Microsoft) puede recolectar información acerca de su ordenador y puede compartirla con otras compañías, pero esta no incluirá información personal acerca de usted.
  • Usted puede instalar Windows XP Home en un segundo ordenador, pero debe borrarlo completamente del ordenador original.
  • Microsoft le asegura que Windows XP Home funcionará correctamente los primeros 90 días. No le aseguramos que Windows XP Home o cualquier “Sevice Pack” o actualización funcionará correctamente pasado este tiempo.
  • Microsoft no se responsabiliza por cualquier daño causado por virus, incluso si los virus son el resultado de problemas de seguridad en Windows XP Home.
  • Windows XP Home es distribuido “Tal como es con todos sus fallos”. Esto significa que no puede reclamar acerca de lo bien que Windows XP Home trabaje.
  • Microsoft no está obligado a usar la buena fe, cuidado razonable o negligencias.
  • Microsoft no está obligado a nada aunque rompa los términos de este acuerdo.

 

 Bien, he seleccionado unas joyitas, pocos comentarios voy ha hacer hacerca de lo denigrante y repulsiva de la EULA. Si bien entiendo que una empresa tan grande y con un mercado tan extenso tiene que escudarse bien ante posibles acciones legales más aún viniendo de un país que es un verdadero circo judicial en cuanto a demandas, no obstante es sobradamente abusiva, seguramente esto no le afecta a la mayoría de la gente que lo ven gracioso y piensan que su Windows está licenciado bajo licencia emule, por favor meditar un momento y luego seguir riendo, con cada copia (legal o ilegal) estamos haciendo más grande a Microsoft y permitiendo estos abusos, ¿vas a dejar que te extorsionen de esta manera cuando luego seguro que vas a carrefour a quejarte por 20 centimos?

 Y para terminar a todos aquellos que dicen que sólo sabemos poner a parir a Microsoft y condenar sus fallos en vez de aceptarlos y comprenderlos (aunque si bien es verdad que hay veces que la gente se pasa) que entiendan que es lo único que nos dejan hacer, quejarnos a sus espaldas, la EULA está bien clarita.

 P.D.- Mi ordenador sólo corre sistemas GNU/Linux y exceptuando el software Matlab y Java, el resto todo es Open Source, tengo las garantias de una enorme comunidad (más grande de lo que una empresa jamás lo será) y lo más importante promueven y no cohiben mis libertades.

August 23, 2006

Un problema con las X

Ayer, intenté entrar en mi pc ( Ubuntu dapper en su ultima versión, o eso creo, jejejeje ) y me encontré con una sorpresa. No se iniciaban las X, se me kedaba colgado justo antes de poner el login y el password, como soy muy novato en esto de linux, y era demasiado tarde para llamar a mi consejero y asesor, me dije diossssssssssssssss….voy a dormir qué mañana será otro día y podré pedir ayuda. Pero soy un pelín cabezón, y estaba en la cama dandole vueltas, hasta que decidí levantarme y probar una cosa que se me ocurrió.

Al parecer que se bloqueaba cuando entraba en las X, pensé que podía intentar ver si funcionaban alguno de los otros escritorios, pork parecía que se cargaban todos los modulos bien en el arranque……y eso hice ( muy bien esto funciona ).

Pero como os he dixo, estoy aún muy verde, asi que probé uno de los pocos comandos que no se me olvidan ( jejeje ), apt-get update.

Fue entonces cuando vi que haba un paquete que me faltaba llamado x-server, cosa que me extrañó muxo porke el dia anterior había actualizado, el caso es que utilicé apt-get upgrade……….y al pelo. Todo me funciono.

Jejejeje, no es tan interesante esto, como los otros post, pero quería participar. Un saludo. 

August 21, 2006

Documentación BlackHat-06

Filed under: Curiosidades, Seguridad

Leo en Meneame que ya está disponible la documentaación de la BlackHat 2006, una de las más importantes convenciones sobre seguridad, son quizás el máximo exponente y entre los conferenciantes encontramos lo mejor de lo mejor del mundillo, todos los años nos sorprenden con algún bombazo que luego coletea durante meses. Microsoft también quiso estar presente para hablarnos de la seguridad de su nuevo S.O. pero no fueron los únicos, Joanna Rutkowska, experta en seguridad, hizo un contranálisis de esta infranqueable plataforma (esperemos por lo menos que los ponientes de Microsoft tomaran buena nota). Apple tampoco se fue de rositas y sus flamantes MacBook se fueron con el talón de Aquiles al descubierto.

 Bueno como podemos ver en enlace de la documentación son un montón de pdf’s (82) y por lo tanto un follón tener que ir pinchando uno por uno, asi que aprovecho para mostrar un ejemplo con el que trabajar con expresiones regulares, con una sóla línea de comandos seremos capaces de descargar todos los pdf’s de un plumazo:

 * Primero necesitaremos tener un fichero con los nombres de los documentos, pero tranquilos no los vamos a ha hacer a mano simplemente los obtendremos del código HTML del index del directorio, también aconsejo crear un directorio para almacenarlos todos:

    mkdir BlackHat-06

    cd BlackHat-06

    wget  "http://164.106.251.250/docs/bh2006/"

  * Y ahora con un poco de paciencia (son 83 pdf’s!) la línea mágica:

   cat index.html | grep ^\<img | sed ’s:.*href="\([^"]*\).*$:http\://164.106.251.250/docs/bh2006/\1:g’

  | grep pdf | xargs wget

  Fijaros como con algo tan extremadamente sencillo se puede resolver un problema aparentemente "complicado", justamente en esto radica la potencia de la línea de comandos y la potencia de un S.O. pensado para facilitar la interactuación entre aplicaciones. Pensar como resolver este problema en Windows, quizás recurriendo a una aplicación de terceros para descargar todo el contenido del directorio web, mientras en la línea de ordenes anterior hemos usado "cat" "grep" "sed" y "wget" que son aplicaciones que viene de manera estandard en prácticamente todas las distribuciones de GNU/Linux y BSD.

August 19, 2006

Apuntes sobre Sed

Filed under: Software Libre, Apuntes

Sed es un editor de texto en flujo, su potencia pues radica en su uso desde una linea de comandos encadenando su entrada a la salida de algún comando que nos genera un texto a editar, y gracias al uso de las expresiones regulares, tenemos una gran versatilidad.

 La forma más común de invocación sería:

     sed "s/espresión_regular/expresion_sustitución/opción" > fichero_salida 

     sed "s:espresión_regular:expresion_sustitución:opción" > fichero_salida

 Cualquiera de las dos formas es válida. 

Opción:

  •     /g   Indica edición global, para que las sustitución no afecte solo a la primera ocurrencia de la expresión.

  •    /i      Para activar el modo Case Insensitive (no distingue mayusulas de minusculas)

Los modificadores más importantes en sed:

 

[ ]

 

Los corchetes se utilizan para definir rangos [0-9] o [a-zA-Z] o uno más completo [A-Za-z0-9,.-_]
\{ \} Las llaves se utilizan para definir el número de veces que ha de repetirse un patrón (o atómo). ELEMENTO\{3,7\} hará que ELEMENTO tenga que ocurrir entre 3 y 7 veces. Y ELEMENTO\{4\} hará qe ELEMENTO tenga que ocurrir exactamente 4 veces.
\( \) Nos permite crear ‘átomos’. Todo lo que esté entre paréntesis será considerado un ‘átomo’. \([0-9]*Hola\) Buscará una posible secuencia de números precediendo a la palabra Hola.
* Indica que un átomo o elemento podrá o no existir y en caso de existir podrá ocurrir cualquier número de veces. ELEMENTO*
. Equivale a cualquier caracter (uno solo). s:.::g Borrará toda la entrada. s:.*:A:g Cambiará cada línea por ‘A’. s:.:A:g Cambiará cada caracter de la entrada por una ‘A’.
^ Simboliza el principio de línea. ^$ simboliza una línea vacía.
[^ ] Crea un rango que contiene cualquier caracter menos los especificados entre [^ y ]. [^xyz,] crea un rango que contiene a todos los caracteres menos a x, a y, a z y a ,.
$ Simboliza el final de línea. \.$ concuerda con las líneas que acaben en ..

  Como ejemplo, vamos a ver como separar campos desde una antrada tabulada, muy típico uso en la shell. El uso de los átomos es muy importante ya que todos lo átomos que creemos luego los podremos tratar como entidades propias por ejemplo para imprimir su resultado.

 Vamos a separar el nombre y el tamaño de los archivos de un directorio a través de la entrada proporcionada por el comando ‘ls -lh’

  ls -lh | grep ^- | sed ’s:\([^ ]*[ ]*\)\{4\}\([0-9GMKB]*[ ]*\)\([^ ]*[ ]*[^ ]*[ ]*\)\([^ ]*\).*$:\4 \2:g’

 Vemos como también podemos usar las expresiones regulares con otros programas como ‘grep’, y también vemos la importancia de crear átomos para poder referirnos luego a la entidad que conforma.


Get free blog up and running in minutes with Blogsome
Theme designed by Jay of onefinejay.com