Catégories au lieu de répertoires, ou Système de fichiers sémantiques pour Linux

La classification des données est en soi un sujet intéressant pour la recherche. J'aime collecter les informations qui semblent nécessaires et j'ai toujours essayé de créer des hiérarchies logiques de répertoires pour mes fichiers. Un jour, dans un rêve, j'ai vu un beau et pratique programme pour attribuer des étiquettes aux fichiers, et j'ai décidé qu'il ne pouvait pas en être autrement.

Le problème des systèmes de fichiers hiérarchiques

Les utilisateurs rencontrent souvent le problème du choix de l'emplacement pour enregistrer le prochain nouveau fichier et du problème de la recherche de leurs propres fichiers (parfois, les noms de fichiers ne sont même pas destinés à être mémorisés par l'homme).

Une solution à ce problème peut être les systèmes de fichiers sémantiques, qui sont généralement des superpositions d'un système de fichiers traditionnel. Dans ceux-ci, les répertoires sont remplacés par des attributs sémantiques, également appelés étiquettes, catégories ou métadonnées. J'utiliserai plus souvent le terme « catégorie », car dans le contexte des systèmes de fichiers, le mot « étiquette » est parfois un peu étrange, surtout avec l'apparition de « sous-étiquettes » et de « pseudonymes d'étiquettes ».

L'attribution de catégories aux fichiers élimine en grande partie les problèmes d'emplacement de stockage et de recherche de fichiers : si vous vous souvenez (ou soupçonnez) au moins l'une des catégories attribuées à un fichier, alors le fichier ne disparaîtra jamais de la vue.

Ce sujet a déjà été soulevé à plusieurs reprises sur Habr (un, deux, trois, quatre et autres), ici je décris ma solution.

La voie vers la réalisation

Juste après le rêve mentionné, j'ai décrit dans un carnet une interface en ligne de commande qui assurerait le travail nécessaire avec les catégories. À l'époque, j'ai décidé qu'un prototype pourrait être écrit en une ou deux semaines en utilisant Python ou Bash, puis il faudrait travailler à la création d'une interface graphique sous Qt ou GTK. La réalité, comme toujours, s'est avérée beaucoup plus difficile, et le développement a pris du retard.

L'idée initiale était de créer avant tout un programme avec une interface en ligne de commande simple et concise qui permettrait de créer et de supprimer des catégories, d'assigner des catégories aux fichiers et de supprimer des catégories des fichiers. J'ai nommé le programme vitis.

La première tentative de créer vitis cela s'est terminé sans succès, car beaucoup de temps a commencé à être consacré au travail et à l'université. La deuxième tentative a été un peu plus concluante : j'ai réussi à terminer le projet prévu pour ma thèse de maîtrise et même à créer un prototype de l'interface GTK. Mais cette version s'est révélée tellement instable et peu pratique qu'il a fallu repenser beaucoup de choses.

Avec la troisième version, je l'ai réellement utilisée moi-même pendant une longue période, ayant classé plusieurs milliers de mes fichiers par catégories. Cela a été grandement facilité par l'autocomplétion mise en œuvre dans bash. Cependant, certains problèmes, comme l'absence de catégories automatiques et la possibilité de stocker des fichiers portant le même nom, persistaient, et le programme commençait déjà à souffrir de sa complexité. Ainsi, je suis arrivé à la nécessité de résoudre les problèmes liés au développement de logiciels complexes : rédiger des exigences détaillées, développer un système de tests fonctionnels, étudier les instructions de packaging, et bien plus encore. Maintenant, je suis parvenu à ce que j'avais envisagé, donc cette modeste création peut être présentée à la communauté libre. Une gestion de fichiers aussi spécifique, basée sur le concept de catégories, soulève des questions et des problèmes inattendus, et pour les résoudre vitis a engendré autour de lui cinq autres projets, dont certains seront mentionnés dans l'article. À ce jour vitis je n'ai pas acquis d'interface graphique, mais la commodité d'utilisation des catégories de fichiers depuis la ligne de commande dépasse déjà pour moi tous les avantages d'un gestionnaire de fichiers graphique classique.

Exemples d'utilisation

Commençons par le simple : créons une catégorie :

vitis create Musique

Ajoutons-y, à titre d'exemple, une composition :

vitis assign Musique -f "The Ink Spots - I Don't Want To Set The World On Fire.mp3"

Vous pouvez voir le contenu de la catégorie « Musique » avec la sous-commande « show » :

vitis show Musique

Vous pouvez la lire en utilisant la sous-commande « open »

vitis open Musique

Comme nous avons seulement un fichier dans la catégorie « Musique », seul celui-ci sera lancé. Pour ouvrir des fichiers avec leurs programmes par défaut, j'ai créé un utilitaire séparé vts-fs-open (les outils standard tels que xdg-open ou mimeopen ne me convenaient pas pour plusieurs raisons ; mais, si nécessaire, dans les paramètres, vous pouvez spécifier un autre utilitaire pour ouvrir les fichiers de manière universelle). Cet utilitaire fonctionne plutôt bien sur différentes distributions avec divers environnements de bureau, donc je recommande de l'installer avec vitis.

Il est également possible d'indiquer directement le programme pour ouvrir les fichiers :

vitis open Musique --app qmmp

Catégories au lieu de répertoires, ou Système de fichiers sémantiques pour Linux

Créons encore des catégories et ajoutons des fichiers à l'aide de «assign». Si des fichiers sont affectés à des catégories non existantes, une demande de création de celles-ci est effectuée. On peut éviter cette demande superflue en utilisant le drapeau —yes.

vitis assign Programmation R -f "Introduction à R.pdf" "Paquet statistique R : théorie des probabilités et statistique mathématique.pdf" --yes

Nous voulons maintenant ajouter la catégorie «Mathématiques» au fichier «Paquet statistique R : théorie des probabilités et statistique mathématique.pdf». Nous savons que ce fichier a déjà la catégorie «R», donc nous pouvons utiliser le chemin de catégorie du système Vitis :

vitis assign Mathématiques -v "R/Paquet statistique R : théorie des probabilités et statistique mathématique.pdf"

Heureusement, l'autocomplétion bash rend cela facile à réaliser.

Voyons ce que nous avons obtenu en utilisant le drapeau —categories pour voir la liste des catégories de chaque fichier :

vitis show R --categories

Catégories au lieu de répertoires, ou Système de fichiers sémantiques pour Linux

Notez que des catégories automatiques ont également été affectées aux fichiers selon le format, le type (regroupe les formats) et l'extension des fichiers. Ces catégories peuvent être désactivées si désiré. Plus tard, je vais assurément localiser leurs noms.

Ajoutons un peu de variation à «Mathématiques» :

vitis assign Mathématiques -f "Analyse mathématique - 1984.pdf" Perelman_ mathématiques_ludiques_1927.djvu 

Et maintenant, les choses deviennent intéressantes. Au lieu de catégories, on peut écrire des expressions avec des opérations d'union, d'intersection et de soustraction, c'est-à-dire utiliser des opérations sur des ensembles. Par exemple, l'intersection de «Mathématiques» avec «R» donnera un seul fichier.

vitis show R i: Mathématiques

Soustrayons les mentions du langage «R» de «Mathématiques» :

vitis show Mathématiques R  #ou vitis show Mathématiques c: R

Nous pouvons fusionner sans but la musique et le langage R :

vitis show Musique u: R

Le drapeau -n permet de «tirer» les fichiers nécessaires du résultat de la demande par numéros et/ou plages, par exemple, -n 3-7, ou quelque chose de plus complexe : -n 1,5,8-10,13. Il est souvent utile d'utiliser la sous-commande open, qui permet d'ouvrir les fichiers nécessaires de la liste.

Catégories au lieu de répertoires, ou Système de fichiers sémantiques pour Linux

Bien que nous nous éloignions de l'utilisation de l'arborescence de répertoires classique, il est souvent bénéfique d'avoir des catégories imbriquées. Créons une sous-catégorie «Statistiques» dans la catégorie «Mathématiques» et ajoutons cette catégorie au fichier approprié :

vitis create Mathématiques/Statistiques

vitis assign Mathématiques/Statistiques -v "R/Introduction à R.pdf"

vitis show Mathématiques --categories

Catégories au lieu de répertoires, ou Système de fichiers sémantiques pour Linux

Nous pouvons voir que ce fichier a maintenant la catégorie « Mathématiques/Statistiques » au lieu de « Mathématiques » (les liens superflus sont suivis).

Accéder par le chemin complet peut être peu pratique, créons un alias « global » :

vitis assign Mathématiques/Statistiques -a Statistiques

vitis show Statistiques

Catégories au lieu de répertoires, ou Système de fichiers sémantiques pour Linux

Pas seulement des fichiers ordinaires

Liens Internet

Pour unifier le stockage de toute information, il serait utile, au minimum, de catégoriser les liens vers des ressources Internet. Et c'est possible :

vitis assign Habr Anomalie de couleur -i https://habr.com/fr/company/sfe_fr/blog/437304/ --yes

Un fichier sera créé à un endroit spécial avec le titre de la page HTML et l'extension .desktop. C'est le format traditionnel de raccourci dans GNU/Linux. Ces raccourcis obtiennent automatiquement la catégorie NetworkBookmarks.

Naturellement, les raccourcis sont créés pour être utilisés :

vitis open Anomalie de couleur

L'exécution de la commande ouvre dans le navigateur le lien récemment sauvegardé. Les raccourcis catégorisés vers des sources Internet peuvent servir de substituts aux favoris du navigateur.

Fragments de fichiers

Il est également utile d'avoir des catégories pour des fragments de fichiers individuels. Pas mal, non ? Mais l'implémentation actuelle ne concerne que les fichiers texte ordinaires, audio et vidéo. Disons que vous voulez marquer un certain passage d'un concert ou un moment amusant d'un film, alors en utilisant assign, vous pouvez utiliser les drapeaux —fragname, —start, —finish. Sauvegardons l'introduction de « DuckTales » :

vitis assign vitis assign -c Introduction -f Duck_Tales/s01s01.avi --finish 00:00:59 --fragname "Introduction Duck Tales"

vitis open Introduction

Il n'y a en réalité aucune coupure de fichiers, au lieu de cela, un fichier pointeur sur le fragment est créé, décrivant le type de fichier, le chemin vers le fichier, le début et la fin du fragment. La création et l'ouverture des pointeurs sur les fragments sont déléguées à des utilitaires spécialement créés à cet effet — mediafragmenter et fragplayer. Le premier crée, le second ouvre. Dans le cas des enregistrements audio et vidéo, le lancement du fichier multimédia à partir d'une certaine position jusqu'à une autre se fait à l'aide du lecteur VLC, donc il doit également être dans le système. J'ai d'abord voulu le faire sur la base de mplayer, mais pour une raison quelconque, cela ne fonctionnait pas correctement pour le positionnement au bon moment.
Dans notre exemple, un fichier « Duck Tales intro.fragpointer » est créé (il est placé dans un endroit spécifique), puis un extrait est lu depuis le début du fichier (puisque —start n'a pas été spécifié lors de la création) jusqu'à la marque à 59 secondes, après quoi VLC se ferme.

Un autre exemple — nous avons décidé de catégoriser une performance individuelle lors d'un concert d'un artiste célèbre :

vitis assign Лепс "Спасите наши души" -f Grigory Leps - Concert Pарус - chansons de Vladimir Vysotsky.mp4 --fragname "Спасите наши души" --start 00:32:18 --finish 00:36:51

vitis open "Спасите наши души"

Lors de l'ouverture, le fichier sera lancé à la bonne position et se fermera après quatre minutes et demie.

Comment tout cela fonctionne + fonctionnalités supplémentaires

Stockage des catégories

Au tout début de la conception de l'organisation d'un système de fichiers sémantique, trois méthodes me sont venues à l'esprit : à travers le stockage de liens symboliques, via une base de données, ou par une description en XML. La première méthode a été choisie, car elle est, d'une part, simple à mettre en œuvre, et d'autre part, l'utilisateur peut voir les catégories directement depuis le système de fichiers (ce qui est pratique et important). Au début de l'utilisation vitis dans le répertoire personnel de l'utilisateur, un répertoire « Vitis » et un fichier de configuration « .config/vitis/vitis.conf » sont créés. Dans ~ / Vitis, des répertoires correspondant aux catégories sont créés, et dans ces répertoires-catégories, des liens symboliques vers les fichiers originaux sont établis. Les alias de catégories sont également simplement des liens vers eux. Bien sûr, la présence du répertoire « Vitis » dans le répertoire personnel peut ne pas convenir à certains. Nous pouvons nous déplacer vers n'importe quel autre endroit :

vitis service set path /mnt/MyFavoriteDisk/Vitis/

À un certain moment, il devient évident qu'il est peu judicieux de catégoriser des fichiers dispersés à travers différents endroits, car leur emplacement peut changer. C'est pourquoi j'ai d'abord créé un répertoire où j'ai simplement déposé tout et attribué des catégories à tout cela. Ensuite, j'ai pensé qu'il serait bon de formaliser cela au niveau du programme. C'est ainsi qu'est apparue la notion de « espace de fichiers ». Au début de l'utilisation vitis il serait judicieux de configurer un tel endroit (où seront stockés tous les fichiers nécessaires) et d'activer l'enregistrement automatique :

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Sans la sauvegarde automatique lors de l'utilisation de la sous-commande « assign », le drapeau --save sera requis si vous souhaitez enregistrer le fichier ajouté dans l'espace de fichiers.

De plus, il est possible d'ajouter plusieurs espaces de fichiers et de changer leur priorité, ce qui peut s'avérer utile lorsque vous avez de nombreux fichiers répartis sur différents supports. Je ne vais pas aborder cette possibilité ici, vous pouvez consulter l'aide du programme pour plus de détails.

Migration du système de fichiers sémantique

Quoi qu'il en soit, le répertoire Vitis et les espaces de fichiers peuvent théoriquement être déplacés d'un endroit à un autre. Pour les rendre opérationnels, j'ai créé un utilitaire distinct link-editor, qui peut modifier en masse les liens en remplaçant certaines parties du chemin par d'autres :

cp -r /mnt/MyFavoriteDisk/Vitis/ ~/Vitis
link-editor -d ~/Vitis/ -f /mnt/MyFavoriteDisk/Vitis/ -r ~/Vitis/ -R
cp -r /mnt/MyFavoriteDisk/Filespace/ ~/MyFiles
link-editor -d ~/Vitis/ -f /mnt/FlashDrive-256/Filespace/ -r ~/MyFiles -R

Dans le premier cas, après avoir déménagé de /mnt/MyFavoriteDisk/Vitis/ vers le répertoire personnel, les liens symboliques liés aux alias sont modifiés. Dans le second cas, après avoir changé l'emplacement de l'espace de fichiers, tous les liens dans Vitis sont mis à jour selon la demande de remplacement d'une partie de leur chemin.

Catégories automatiques

Si vous exécutez la commande vitis service get autocategorization, vous pouvez voir que par défaut, l'attribution des catégories automatiques est configurée en fonction du format (Format et Type) et de l'extension des fichiers (Extension).

C'est utile, par exemple, lorsque vous devez trouver quelque chose parmi des PDF ou vérifier ce que vous avez stocké en EPUB et FB2, vous pouvez simplement exécuter la requête

vitis show Format/MOBI u: Format/FB2

Il se trouve que les outils standard de GNU/Linux comme file ou mimetype ne m'ont pas satisfait, précisément parce qu'ils ne déterminent pas toujours correctement le format. J'ai donc dû mettre en œuvre ma propre solution basée sur les signatures de fichiers et les extensions. En général, le sujet de la détection des formats de fichiers est intéressant et mérite un article à part. Pour l'instant, je peux dire que je n'ai peut-être pas prévu une reconnaissance fiable pour tous les formats au monde, mais globalement, cela fonctionne déjà assez bien. Cependant, pour les EPUB, le format est actuellement détecté comme étant un ZIP (ce qui est en fait justifié, mais dans la pratique, ce n'est pas un comportement normal). Considérez cette fonctionnalité comme expérimentale pour le moment et signalez les bugs. Dans des situations étranges, vous pouvez toujours utiliser des catégories basées sur l'extension des fichiers, par exemple, Extension/epub.

Si les autocatégories par format sont activées, des autocatégories sont également activées pour regrouper certains formats par type : « Archives », « Images », « Vidéo », « Audio » et « Documents ». Des noms localisés seront également créés pour ces sous-catégories.

Ce qui n'est pas mentionné

vitis est devenu un outil très polyvalent, et il est difficile de tout couvrir d'un coup. Je vais brièvement mentionner ce que vous pouvez encore faire :

  • Vous pouvez supprimer les catégories et les retirer des fichiers ;
  • Vous pouvez copier les résultats des requêtes par expressions dans le répertoire spécifié ;
  • Vous pouvez exécuter les fichiers comme des programmes ;
  • La commande show a de nombreuses options, telles que le tri par nom/date de modification ou accès/taille/extension, l'affichage des propriétés des fichiers et des chemins vers les originaux, l'activation de l'affichage des fichiers cachés, etc. ;
  • Lors de la sauvegarde des liens vers les sources Internet, vous pouvez également enregistrer des copies locales des pages HTML.

Tous les détails peuvent être trouvés dans le manuel utilisateur.

Perspectives

Souvent, les sceptiques disent que « personne ne prendra le temps de marquer ces balises ». À partir de ma propre expérience, je peux prouver le contraire : j'ai déjà catégorisé plus de six mille fichiers, créé plus de mille catégories et alias, et cela en valait la peine. Quand vous utilisez une seule commande vitis open Plan vous ouvrez votre liste de tâches ou quand vous utilisez une seule commande vitis open LaTeX vous ouvrez le livre de Stolyarov sur le système de mise en page LaTeX, il devient déjà moralement difficile d'utiliser le système de fichiers « à l'ancienne ».

Sur cette base, plusieurs idées émergent. Par exemple, on pourrait créer une radio automatique qui diffuse de la musique thématique en fonction de la météo actuelle, des fêtes, du jour de la semaine, du moment de la journée ou de l'année. Également pertinent, un lecteur de musique capable de reconnaître des catégories et de jouer de la musique en fonction d'expressions utilisant des opérations sur des catégories comme sur des ensembles. Il serait utile de créer un démon qui surveille le répertoire « Téléchargements » et propose de catégoriser de nouveaux fichiers. Bien sûr, il serait également nécessaire de développer un gestionnaire de fichiers sémantique graphique. À une époque, j'avais même créé un service web pour le partage collectif de fichiers pour une entreprise, mais il n'était pas en priorité et est devenu obsolète, bien qu'il ait atteint un niveau élevé de fonctionnement. (En raison de changements majeurs dans le système vitis, il n'est plus utilisable.)

Voici une petite démonstration

Catégories au lieu de répertoires, ou Système de fichiers sémantiques pour Linux

Conclusion

Vitis — n'est pas la première tentative de changer radicalement le style de travail avec les données, mais j'ai jugé important de réaliser mes idées et de rendre la réalisation accessible en open source sous la licence GNU GPL. Pour plus de commodité, j'ai créé un paquet deb pour x86-64, qui devrait fonctionner sur toutes les distributions Debian modernes. Sur ARM, il y a eu quelques difficultés (toutes les autres programmes liés à vitis, fonctionnent normalement), mais un paquet fonctionnel sera également construit pour cette plateforme (armhf) plus tard. J'ai temporairement cessé de créer des paquets RPM en raison de problèmes sur Fedora 30 et de la difficulté à se disperser sur de nombreuses distributions RPM, mais je prévois quand même de créer des paquets pour au moins quelques-unes d'entre elles plus tard. En attendant, vous pouvez utiliser make && make install ou checkinstall.

Merci à tous pour votre attention ! J'espère que cet article et ce projet pourront s'avérer utiles.

Lien vers le dépôt du projet

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster