NOMBRE¶
locatedb - base de datos de cabecera comprimida de nombres de fichero
DESCRIPCIÓN¶
Esta página de manual documenta el formato de las bases de datos de
nombres de fichero para la versión GNU de
locate. La base de
datos de nombres de fichero contiene listas de los ficheros que estaban en los
árboles de directorios cuando se actualizaron la última vez las
bases de datos.
Puede haber múltiples bases de datos. Los usuarios pueden seleccionar en
qué bases de datos busca
locate usando una variable de entorno,
o una opción de línea de comando; ver
locate(1L). El
administrador de sistema puede elegir el nombre de fichero de la base de datos
por defecto, la frecuencia con que se actualizan las bases de datos, y los
directorios para los que contienen entradas. Normalmente, las bases de datos
de nombres de fichero se actualizan al ejecutar el programa
updatedb
periódicamente, típicamente de noche; ver
updatedb(1L).
updatedb ejecuta un programa llamado
frcode para comprimir la
lista de nombres de fichero utilizando compresión de cabeceras, que
reduce el tamaño de la base de datos por un factor de 4 a 5. La
compresión de cabeceras (también conocida por
codificación incremental) trabaja de la forma que se explica a
continuación.
Las entradas de la base de datos son una lista ordenada (sin tener en cuenta
mayúsculas y minúsculas, para conveniencia de los usuarios).
Como la lista está ordenada, es probable que cada entrada comparta un
prejijo (cadena de caracteres inicial) con la entrada anterior. Cada entrada
de la base de datos comienza con un byte de diferencia de desplazamiento
(offset-differential count byte), que es el número adicional de
caracteres de prefijo de la entrada precedente a utilizar más
allá del número que está utilizando la entrada precedente
de su propio predecesor. (El número puede ser negativo). Tras el
número queda un resto ASCII terminado en nulo — la parte del
nombre que sigue al prefijo compartido.
Si la cuenta diferencial de desplazamiento es mayor que el que puede guardarse
en un byte (+/-127), el byte tiene el valor 0x80 y la cuenta sigue en una
palabra de 2 bytes, con el byte alto primero (orden de byte de red).
Cada base de datos comienza con una entrada falsa a un fichero llamado
`LOCATE02', que
locate comprueba para asegurarse que el fichero de base
de datos tiene el formato correcto; ignora la entrada al hacer la
búsqueda.
Las bases de datos no pueden ser concatenadas juntas, aunque la primera entrada
(falsa) se elimine de todas las bases de datos excepto la primera. Esto se
debe a que las cuentas diferenciales en la primera entrada de la segunda y
siguientes bases de datos serían incorrectas.
También hay un formato antiguo de base de datos, usado por los programas
locate y
find de Unix y versiones anteriores a las de GNU.
updatedb ejecuta los programas llamados
bigram y
code
para producir bases de datos en el formato antiguo. El formato antiguo difiere
de la descripción de arriba de las siguientes maneras. En vez de que
cada entrada empiece con un byte de cuenta diferencial de desplazamiento y
termine con un nulo, los valores del byte de 0 a 28 indican cuentas
diferenciales de desplazamiento de -14 a 14. El valor del byte que indica una
cuenta de desplazamiento larga es 0x1e (30), no 0x80. Las cuentas largas se
almacenan en el orden de byte de host, que no es necesariamente el orden de
byte de red, y con tamaño de palabra de entero de host, que normalmente
son 4 bytes. También representan una cuenta inferior en 14 a su valor.
Las líneas de la base de datos no tienen byte de terminación; el
comienzo de la siguiente línea está indicado por su primer byte
con valor <= 30.
Además, en vez de comenzar con una entrada falsa, el formato antiguo de
base de datos comienza con una tabla de 256 bytes que contiene los 128
bigramas más comunes en la lista de ficheros. Un bigrama es un par de
bytes adyacentes. Los bytes de la base de datos que tienen el bit alto a 1 son
índices (con el bit alto borrado) a la tabla de bigramas. La
codificación de bigramas y cuentas diferenciales de desplazamiento hace
estas bases de datos 20-25% más pequeñas que el nuevo formato,
pero hace que no tengan el bit 8 limpio. Cualquier byte de un nombre de
fichero que esté en los rangos usados para los códigos
especiales es reemplazado en la base de datos por una interrogación,
que no es por coincidencia el comodín de la shell para sustituír
un carácter cualquiera.
EJEMPLO¶
Entrada a frcode:
/usr/src
/usr/src/cmd/aardvark.c
/usr/src/cmd/armadillo.c
/usr/tmp/zoo
Longitud del prefijo más largo a compartir de la entrada precedente:
0 /usr/src
8 /cmd/aardvark.c
14 rmadillo.c
5 tmp/zoo
Salida a
frcode, con nulos al final cambiados a saltos de línea y
bytes de cuenta hechos imprimibles:
0 LOCATE02
0 /usr/src
8 /cmd/aardvark.c
6 rmadillo.c
-9 tmp/zoo
(6 = 14 - 8, y -9 = 5 - 14)
VÉASE TAMBIÉN¶
find(1L),
locate(1L),
locatedb(5L),
xargs(1L)
Finding Files (on-line en Info, o impreso)