LinuxParty
El proyecto de código abierto libferris es un sistema de archivos virtual que tiene como objetivo proporcionar una sola interfaz de sistema de archivos todos los datos. Libferris ha ido avanzando hacia ese objetivo durante los últimos diez años. Durante ese tiempo, libferris ha ganado el apoyo para el montaje de bases de datos relacionales; dispositivos físicos, como impresoras, cámaras web y escáneres; archivos compuestos como Berkeley DB y XML; aplicaciones como Amarok, Firefox, emacs, pulseaudio, XWindow, dbus, y Evolution; y, más recientemente, los servicios web como GDrive, YouTube, Vimeo y Flickr, así como muchas otras cosas.
Libferris se comporta como acceso del sistema de archivos para todas las fuentes de datos anteriores. ¿Por qué no debería ser capaz de utilizar su editor de texto preferido para editar un comentario en Flickr o su visor de imágenes preferido para ver un jpeg creado a partir de una cámara web. Proporciona una API del sistema de archivos que le permita el acceso a todas esas aplicaciones (y potencialmente actualizarlas) y a cualquier cosa puede llegar. Con el fin de facilitar el acceso a la mayor cantidad posible de cosas, libferris se ejecuta en el espacio de direcciones del usuario. Cosas como, el acceso a bases de datos relacionales no deberían tener que pasar por dentro del núcleo de Linux en sí. Una vez que se monta un sistema de archivos, puede explorar en los metadatos, lo que hace las cosas más fáciles de encontrar, filtrar e indexar.
Más adelante tengo algunos ejemplos de uso de la línea de comandos de algunas de estas características, en el mismo artículo. Pero primero vamos a explicar un poco más de fondo de algunas de las características clave.
Acceso Metadatos
Al principio de la vida del proyecto, se hizo evidente que el uso de sólo los directorios y archivos es antinatural y hace difícil acceso a los metadatos, por ejemplo, pequeñas piezas de información como el ancho y alto de una imagen o el artista de un archivo de audio. Los sistemas de archivos modernos ofrecen ahora una (EA) Atributo Extendido, Es una interfaz que permite a los pares de valores clave asociarse a los archivos. Sobre la base de esa idea, la interfaz de EA también se virtualiza en libferris para permitir que los pares clave-valor vayan y vengan a muchos lugares.
Tener "muchos lugares" para los metadatos que vayan y vengan, puede parecer confuso al principio, así que espero que unos pocos ejemplos aclararán un poco las cosas. Leyendo el "ancho" EA en un archivo de imagen provocará libferris funcione fuera de la anchura en píxeles de la imagen y le devuelva como el valor de EA. Si usted tiene disponible EA en el núcleo en su directorio personal, escribia la EA en un archivo de imagen "foo" en libferris causará que su EA sea almacenada por el núcleo Linux en el sistema de ficheros en un disco en la EA. Si usted no tiene el soporte EA en el kernel, o los permisos de archivo no permitem que usted escriba una EA en un archivo, libferris almacenará esea EA para usted en un repositorio RDF. Cuando se monta una base de datos relacional o XML entonces el EA provendrá de las tuplas de bases de datos o atributos XML. Así que la mayoría de las veces usted no tiene que preocuparse por los detalles, el almacenamiento de metadatos al tratar de "hacer lo que quieres decir", y tiene el repliegue RDF.
La reserva para el uso de RDF permite almacenar metadatos en cualquier sistema de archivos virtual, independientemente de lo que el almacenamiento subyacente permita que usted haga. Por ejemplo, puede anotar un sitio web y libferris almacenará eso para usted en RDF y ponerla a disposición a través de la misma interfaz de EA para que todos los metadatos estén disponible a través de ella. Para los fans de la web semántica, también puede enlazar varias direcciones URL que deben compartir lógicamente metadatos.
Ordenar y filtrar metadatos
Una sola API del sistema de archivos permite que las herramientas de línea de comandos como ls, cp, cat, io, y otras cavar en cualquier fuente de datos que libferris pueda acceder. De manera similar, teniendo todos los metadatos que ofrecen a través de la interfaz de clave-valor EA permite la clasificación y filtrado de soporte en libferris que deben aplicarse a los metadatos. Si quieres ver las imágenes en un directorio ordenado por tipo de mimo, tamaño de la abertura, y luego por fecha de modificación se puede hacer con ferrisls. Cada EA puede tener información del tipo asociado a él, y la mayoría lo hace. Así libferris sabe que el "tamaño" y "ancho" de EA son los números y pueden ordenarse los valores como se puede esperar.
Índice y búsqueda
Una vez que las interfaces del sistema de archivos y metadatos disponibles tienen sentido puede agregar índice y soporte en la búsqueda. Hay muchas implementaciones de indexación para elegir, y no solo la aplicación de índice y búsqueda proporciona los mejores resultados en todas las situaciones. Es posible que desee utilizar un archivo de mapeado de memoria pequeña en un nivel bajo de energía NAS para proporcionar sencillo localizador, mientras que en un servidor de archivos más grande podría querer usar PostgreSQL para sus necesidades de indexación. Los resultados de una consulta también se pueden devolver como un sistema de archivos libferris. Así que usted puede usar directamente "cat" o ferriscp en los resultados de una búsqueda.
También puede unir varios índices libferris juntos para combinar los resultados de varios lugares, como un índice local en su directorio home en la máquina de escritorio y un índice de servidor de archivos.
Manos a la obra.
OK, así que basta de historia y de información general, veremos cómo instalar libferris y algunos ejemplos de las cosas que le puede resultar útil de lo que se puede hacer con él.
Acceder y modificar los archivos
Considere el siguiente archivo XML como insumo ejemplo. Usando ferrisls se puede llegar directamente a un archivo XML y una lista de los elementos de cualquier nivel. Se trata de un estilo de interacción común en libferris para los archivos que podrían ser considerados como compuesto tal como XML, DB4, archivos csv, etc. Usted no tiene que preocuparse del montaje, acabo de leer el archivo como si fuera un directorio.
Si sabes un poco más acerca de la estructura del archivo XML, puede seleccionar qué atributos XML desee mediante la interfaz de atributos extendidos del sistema de ficheros libferris. La opción --show ea a ferrisls le dice qué EA te gustaría ver de él. En este caso, el sistema de ficheros de EA se crea a partir de y enviar datos a los atributos XML.
$ cat basic.xml
<top> <person name="alice" age="25" /> <person name="bob" age="32" /> <person name="cathy" age="35" >boo!</person> </top>
$ ferrisls basic.xml/top 0 alice 0 bob 0 cathy
$ ferrisls --show-ea=name,age basic.xml/top alice 25 bob 32 cathy 35 $ fcat basic.xml/top/cathy boo!
Libferris también pueden realizar la modificación de acciones en muchos de sus sistemas de ficheros virtuales, y ciertamente para los archivos XML montados. El ejemplo siguiente utiliza el comando ferris-redirect para acceder a datos desde la entrada estándar en cualquier archivo libferris. Libferris también tiene FerrisFUSE que proporciona una implementación del sistema de archivos en UserSpace. Así que puede acceder a libferris con cualquier herramienta que se pueda utilizar un sistema de archivos de Linux en el kernel, si quieres. Por ejemplo, también se puede montar el archivo basic.xml usando FerrisFUSE y sólo tiene que utilizar la redirección normal de bash para actualizarlo.
He reimplementado muchas de las herramientas básicas del sistema de archivos, por dos razones: por que se fusionan no siempre siendo necesario (sin montaje explícito y desmontaje) y por ser capaz de proporcionar una funcionalidad prolongada, como la clasificación y filtrado de salida en los metadatos que ofrece el sistema de archivos. Usted puede considerar la secuencia | ferris-redirect nombre del archivo a ser muy parecido a ">" nombre de archivo en la redirección de bash pero con ferris-redirect. Como se puede ver en el siguiente ejemplo, he actualizado el contenido de texto del elemento de bob XML utilizando la redirección io.
$ echo "a really nice guy" | ferris-redirect basic.xml/top/bob $ cat basic.xml <?xml version="1.0" encoding="UTF-8" standalone="no" ?> <top> <person age="25" name="alice"/> <person age="32" name="bob">a really nice guy </person> <person age="35" name="cathy">boo!</person> </top>
Si prefiere los archivos binarios a XML, puede montar Berkeley DB4 de la misma manera como XML con libferris. A continuación se utiliza la herramienta "FCREATE" para hacer un nuevo archivo DB4 Berkeley vacío. El "rdn" significa nombre completo relativo y es un vestigio del uso de algunos nombres LDAP. Probablemente voy a convertir instancias "rdn" a "nombre de archivo" en todo el código en el futuro. Debido a que un archivo DB4 montado y un archivo XML montado se exponen de una manera muy similar, puede ejecutar XQuery en DB4 en lugar de los archivos XML si desea acelerar algunas de las operaciones de búsqueda en la consulta.
$ fcreate --create-type=db4 --rdn=foo.db . Created new context: file:///tmp/foo.db $ ls -lh foo.db -rw-------. 1 ben ben 8.0K Dec 30 19:52 foo.db $ date | ferris-redirect foo.db/file1 $ fcat foo.db/file1 Mon Dec 30 19:52:41 EST 2013 $ db_dump -p foo.db VERSION=3 format=print type=btree db_pagesize=4096 HEADER=END file1 Mon Dec 30 19:52:41 EST 2013\0a DATA=END
Montar las bases de datos relacionales
Libferris también puede montar bases de datos relacionales como sistemas de ficheros usando QtSql y también tiene soporte explícito a PostgreSQL. La interfaz de atributos extendidos es muy útil aquí como las tuplas en un mapa de mesa, los archivos en el sistema de archivos y las columnas en un mapa tupla a la EA para cada archivo. A continuación se crea una base de datos SQLite sencilla. Usando ferrisls -lh muestra que la ficha de cada tupla es llamado usando el "nombre" de columna de la tabla. Puede crear una lista de cualquier tabla utilizando el formato de ruta databasename / nombretabla como se muestra. Para bases de datos PostgreSQL también puede acceder a las funciones de PostgreSQL a través del sistema de archivos.
La opción ferrisls -0 complementa la opción de listado largo, normal -l para ls. La principal diferencia es que con -0 pide el propio sistema de ficheros lo que lo hace más interesante EA para que usted vea. A veces hay cosas más interesantes que el tamaño, bits de protección, y mtime. En este caso, cada columna de la tabla de la base de datos se considera "interesante", junto con una EA que le dice lo que la clave principal de la tupla es. Este es el "id" repetida al final de la salida de los ferrisls -0. Las opciones --xml y --json se basan en la opción -0 pero producen una salida en formato XML o JSON respectivamente.
$ sqlite3 test.db SQLite version 3.8.2 2013-12-06 14:53:30 Enter ".help" for instructions Enter SQL statements terminated with a ";"
sqlite> create table trees ( name varchar, count int, id integer primary key autoincrement ); sqlite> insert into trees (name,count) values ( 'General Sherman', 5 ); sqlite> insert into trees (name,count) values ( 'Gum', 44 ); sqlite> insert into trees (name,count) values ( 'Mahogany', 9 ); sqlite> select * from trees; General Sherman|5|1 Gum|44|2 Mahogany|9|3
$ ferrisls -lh test.db/trees 56 General Sherman 45 Gum 49 Mahogany $ ferrisls -0 test.db/trees General Sherman 5 1 General Sherman id Gum 44 2 Gum id Mahogany 9 3 Mahogany id
$ ferrisls --xml test.db/trees <?xml version="1.0" encoding="UTF-8" standalone="no" ?> <ferrisls> <ferrisls count="" id="" name="trees" primary-key="id" url="file:///tmp/test.db/trees"> <context count="5" id="1" name="General Sherman" primary-key="id"/> <context count="44" id="2" name="Gum" primary-key="id"/> <context count="9" id="3" name="Mahogany" primary-key="id"/> </ferrisls> </ferrisls>
$ ferrisls --json test.db/trees { "children" : { "1" : { "name" : "General Sherman" }, "2" : { "name" : "Gum" }, "3" : { "name" : "Mahogany" } }, "self" : { "name" : "trees" } }
Actualizar las bases de datos
Las bases de datos también pueden ser actualizados a través del sistema de ficheros por escrito a la EA, como se muestra a continuación. La opción -a para ferris-redirect hace que los datos que se escriben en el dado (extendido) de atributos en lugar de en el contenido principal del archivo. La captura de pantalla siguiente es el gestor de archivos "ego" que te permite hacer clic directamente a editar EA. Gran parte de la funcionalidad de ego permite acceder a través de los muchos paneles laterales, arrastrar y soltar, y menús contextuales. Si SQLite parece interesante, ver mi entrada en el blog para más información, incluyendo la creación de tablas virtuales en SQLite acceder libferris y la exposición de un archivo access_log apache través libferris como una tabla virtual.
$ echo -n Gum Tree | ferris-redirect -a name test.db/trees/2 $ ferrisls -0 test.db/trees General Sherman 5 1 General Sherman id Gum Tree 44 2 Gum Tree id Mahogany 9 3 Mahogany id
El administrador de archivos "ego" le permite hacer clic directamente a editar los atributos extendidos.
Monte las hojas de cálculo de Google
Mirando hacia atrás en cómo las tablas de bases de datos SQLite se exponen a través del sistema de archivos, una hoja de cálculo puede ser expuesto como un archivo por cada fila y EA para acceder a cada columna. Libferris tiene soporte para muchos de los servicios de Google, tales como hojas de cálculo, YouTube y Drive. El acceso a la hoja de cálculo está en el nivel celular para que pueda crear y actualizar las hojas de cálculo a partir de la línea de comandos, como he hecho en el ejemplo siguiente. Hay más información sobre el montaje de las hojas de cálculo de Google con libferris.
$ ferrisls -0 google:// docs drive spreadsheets youtube $ echo 20 | ferris-redirect -a c google://spreadsheets/smalltest1/Sheet5/2 $ echo 7 | ferris-redirect -a c google://spreadsheets/smalltest1/Sheet5/3 $ echo 14 | ferris-redirect -a c google://spreadsheets/smalltest1/Sheet5/4 $ echo -n "=sum(C2:C4)" | ferris-redirect --ea c google://spreadsheets/smalltest1/Sheet5/1 1 41 2 20 3 7 4 14
Montar Google Drive
El soporte para el montaje de Google Drive se añadió a principios de 2013. Una de las principales características de los sitios de almacenamiento en línea es la capacidad de compartir de forma selectiva los archivos con otras personas. Para hacer esto con un Google Drive montado, haga un "echo" de la dirección de correo electrónico de la persona que desea compartir un archivo cargado con en las "acciones" de EA con libferris.
$ ferriscp goodstuff.txt google://drive/ $ echo " Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo." \ | ferris-redirect -a shares "google://drive/goodstuff.txt" $ echo " Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo." \ | ferris-redirect -a shares "google://drive/goodstuff.txt"
Aplicaciones de montaje
Moviéndose a lo largo de montar algunas aplicaciones, los ejemplos a continuación muestran Amarok, el portapapeles, GStreamer, sane, y Flickr. Amarok tiene tres directorios principales en el sistema de archivos; el control, la corriente y lista de reproducción. Escribir ferrisls en amarok://control también le mostrará el estado actual de Amarok. En el directorio de control, el archivo de palanca de reproducción / pausa puede controlar si Amarok está funcionando, usted puede ajustar el volumen al escribir un valor (por ciento del volumen total) en el archivo de volumen. La lista de reproducción de Amarok se expone como un directorio virtual y se puede directamente "copiar" las pistas de ese directorio virtual a otro sistema de ficheros, si quieres.
El sistema de ficheros del portapapeles con el respaldo de Klippper podría verlo igual que cuando usa KDE. El sistema de ficheros de GStreamer le permite acceder a las fuentes de los medios de comunicación y obtener imágenes JPEG y pistas de video a través del sistema de archivos virtual. Así como descargar en su computadora portátil o una cámara de teléfono a través de la red sin necesidad de saber cómo leer datos de imagen de los dispositivos. El escáner y la API de Flickr son los sistemas de archivos se pueden copiar datos desde el escáner directamente a la web. O usted puede tomar los datos de cualquier otro sistema de ficheros libferris como GStreamer o incluso otra API de Flickr y hacer la implementación de sitio y copiarlo en la web.
$ echo 1 | ferris-redirect amarok://control/toggle-play-pause $ echo 20 | ferris-redirect -T amarok://control/volume $ echo 89 | ferris-redirect -T amarok://control/volume
$ ferrisls -0 amarok://control pause 0 play 1 toggle-play-pause 1 volume 89 $ ferrisls -0 amarok://playlist 1 2:56 Mark Forry, Yvette ... Free Software Song ... $ ferriscp amarok://playlist/1 /media/portableplayer/ $ ferrisls -0 xwin://localhost/clipboard 0 bueller... bueller.... 1 examples ... $ fcat xwin://localhost/clipboard/0 bueller... bueller.... $ fcat gstreamer://capture/lid.jpg | okular - $ ferriscp scanner://default/gray-full-300/scan.jpg flickr://me/upload
Autenticar servicios web
Autenticación con servicios web y otros almacenes de datos se han creado con ferris-capplet-auth. Este se encarga de handshaking OAuth con sitios que proporcionan una implementación de la API de Flickr, Facebook, Vimeo, y servicios de Google. Aquí es donde también puede obtener información de autenticación configurado para PostgreSQL, Zoneminder y servidores FerrisREST. De esta forma los URLs en libferris no contienen las credenciales del usuario, luego no devuelven sus contraseñas. De modo que el riesgo de compartir accidentalmente una URL con la información de autenticación en ella se reduce. También puede utilizar ferris-capplet-auth sin GUI como se muestra a continuación.
$ ferris-capplet-auth --auth-service gdrive --auth-with-site gdrive ... $ ferris-capplet-auth --list-auth-sites facebook flickr 23hq pixelpipe vimeo google
Acceso alternativo
A veces puede ser útil tener el acceso a cosas que libferris puede montar a través de otros sistemas, algo así como mirar el reverso de todo es un sistema de archivos. Actualmente se puede acceder libferris como esclavo KIO, a través de FUSE, como fuente de datos de KDE Plasma, como una tabla virtual SQLite, como virtuales Xerces-C++ DOM, a través de XQuery utilizando XQilla. Hay también el comienzo de enlaces de lenguaje, destinado principalmente a Guile y Perl. Contar con el apoyo de Perl en el nivel IO::All es el objetivo final. Actualmente el soporte está ahí para unir a un identificador de archivo que permite crear un PDF con la hora actual en el mismo.
#!/usr/bin/perl use Time::localtime; use libferris; $trunc = 0; my @options = (); push(@options,"trunc") if $trunc; tie( *FERRIS, 'libferris', '>printer://Cups-PDF/foo.pdf', @options ); print FERRIS ctime() , "\n"; untie( *FERRIS );
Instale libferris
Si estás lo suficientemente intrigado por el proyecto, pruébelo. He actualizado mi Fedora 20 con paquetes de openSUSE Build Service que está disponible en Fedora_20. Después de descargar home:monkeyiq.repo de arriba enlacelo/copielo/muevalo a /etc/yum.repos.d/ y debería ser capaz de instalar libferris usando el siguiente comando. Estos son los paquetes que uso en mi portátil. Aquí ejemplos para Debian ARM hardfloat
# yum install libferris-suite
Un punto fuerte del libferris es también uno de sus puntos débiles; porque no hay soporte para el montaje de muchos almacenes de datos, extracción de metadatos de varios archivos, y las diferentes implementaciones de índice, hay otras bibliotecas que libferris utilizados para muchas de estas cosas que pueden hacer que la construcción libferris sea un poco desalentador para los usuarios primerizos. Muchas de las características son opcionales y se desactivará en el momento de configuración si las bibliotecas no están instalados en su sistema. Algunas dependencias de menor nivel se han dividido de libferris sí como libferrisstreams, stldb4 y fampp que proporcionan algunos soporte C++ std::iostream, una interfaz para Berkeley DB4 y monitoreo de cambio de archivos respectivamente. Las principales cosas que necesita libferris que puede que no tenga instalados son Xerces-C 3, Boost, y cabeceras de desarrollo para un motor de mimo (KDE, GNOME, EFSD o libfile). Si desea montar algunos de los servicios web, entonces es necesario instalar también qjson y qoauth. Más por venir
-
Linux
- Montar un directorio remoto, vía NFS, en Linux
- Predicciones de Linux para 2025
- Elementary OS 8: una distribución de Linux para usuarios de Windows y macOS
- Renombrar multiples archivos masivamente en Linux (quitar espacios, cambiar mayúsculas) a la vez en Linux
- He utilizado Linux durante 30 años. Aquí hay 5 razones por las que nunca cambiaré a Windows o MacOS
- Mis predicciones sobre Linux para 2025: será un buen año
- ¿Por qué Torvalds eliminó a los encargados rusos del mantenimiento del núcleo de Linux?
- 10 cosas que siempre hago después de instalar Linux (y por qué tú también deberías hacerlo)
- 7 cosas que nunca hago después de instalar Linux (y por qué tú tampoco deberías)
- Detección de Intrusos: Snort, Base, MySQL, y Apache2 en Ubuntu Linux 7.10
- ¿Por qué no más personas usan Linux en el escritorio? Tengo una teoría que quizás no te guste.
- Los países occidentales ricos lideran la expansión mundial del petróleo y el gas
- Systemd 256.1 aborda la queja de que 'systemd-tmpfiles' podría eliminar inesperadamente su directorio /home
- Por qué un kernel Linux de distribución 'congelada' no es la mejor opción para la seguridad
- RebornOS es una versión hermosa y fácil de usar de Arch Linux con abundantes opciones de escritorio