Kategorien statt Verzeichnisse oder ein semantisches Dateisystem für Linux

Die Klassifizierung von Daten ist an sich ein interessantes Forschungsfeld. Ich sammle gerne Informationen, die mir nötig erscheinen, und habe stets versucht, logische Hierarchien für meine Dateien zu erstellen. Eines Nachts hatte ich einen Traum von einem schönen und benutzerfreundlichen Programm zur Vergabe von Tags an Dateien und beschloss, dass ich nicht länger so leben kann.

Die Problematik hierarchischer Dateisysteme

Benutzer stehen oft vor der Herausforderung, wo sie die nächste neue Datei speichern sollen, und haben Schwierigkeiten, ihre eigenen Dateien wiederzufinden (manchmal sind die Dateinamen sogar gar nicht dafür gedacht, von Menschen erinnert zu werden).

Eine Lösung könnten semantische Dateisysteme sein, die in der Regel eine Ergänzung zu herkömmlichen Dateisystemen darstellen. In ihnen werden Verzeichnisse durch semantische Attribute ersetzt, die auch als Tags, Kategorien oder Metadaten bezeichnet werden. Ich werde häufiger den Begriff „Kategorie“ verwenden, da das Wort „Tag“ im Kontext von Dateisystemen manchmal merkwürdig erscheint, insbesondere wenn es um „Unter-Tags“ und „Alias-Tags“ geht.

Назначение файлам категорий во многом избавляет от проблем места хранения и поиска файла: если помнишь (или догадываешься) хотя бы об одной из назначенных файлу категорий, то файл уже никогда не пропадёт из виду.

Ранее на Хабре не раз поднималась данная тема (eins, zwei, drei, vier и др.), здесь я описываю своё решение.

Путь к реализации

Сразу после упомянутого сна я описал в тетради командный интерфейс, обеспечивающий необходимую работу с категориями. Тогда я решил, что за неделю-две можно написать прототип, используя Python или Bash, а потом надо будет провести работу над созданием графической оболочки на Qt или GTK. Реальность, как всегда, оказалась намного суровее, и разработка затянулась.

Изначальная задумка состояла в том, чтобы прежде всего сделать программу с удобным и лаконичным интерфейсом командной строки, которая будет создавать, удалять категории, назначать категории файлам и удалять категории из файлов. Программу я назвал vitis.

Первая попытка создать vitis war letztendlich erfolglos, da viel Zeit für Arbeit und das Studium aufgewendet wurde. Der zweite Versuch war bereits etwas greifbarer: Es gelang, das geplante Projekt für die Masterarbeit abzuschließen und sogar einen Prototyp der GTK-Oberfläche zu entwickeln. Doch diese Version war so instabil und unhandlich, dass viele Aspekte neu überdacht werden mussten.

Ich habe die dritte Version schon sehr lange selbst genutzt, wobei ich mehrere Tausend meiner Dateien in Kategorien übertragen habe. Dies wurde unter anderem durch das implementierte Bash-Autocomplete stark unterstützt. Allerdings blieben einige Probleme, wie das Fehlen automatischer Kategorien und die Möglichkeit, Dateien mit demselben Namen zu speichern, weiterhin bestehen, während das Programm bereits unter seiner eigenen Komplexität litt. So kam ich zu der Notwendigkeit, die Herausforderungen bei der Entwicklung komplexer Software anzugehen: detaillierte Anforderungen zu schreiben, ein funktionales Testsystem zu entwickeln, die Anweisungen zur Paketierung zu studieren und vieles mehr. Jetzt habe ich mein Ziel erreicht, sodass dieses bescheidene Werk der Community zur Verfügung gestellt werden kann. Diese spezifische Dateiverwaltung, die über das Konzept von Kategorien erfolgt, berührt unerwartete Fragen und Probleme, und deren Lösung... vitis hat weitere fünf Projekte hervorgebracht, von denen einige in dem Artikel erwähnt werden. Bis heute... vitis Ich habe keine grafische Oberfläche erworben, aber die Benutzerfreundlichkeit der Dateikategorien über die Kommandozeile übertrifft für mich bereits alle Vorteile eines herkömmlichen grafischen Dateimanagers.

Beispielverwendungen

Lassen Sie uns einfach anfangen – erstellen wir eine Kategorie:

vitis create Musik

Fügen wir als Beispiel einen Titel hinzu:

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

Den Inhalt der Kategorie „Musik“ können Sie mit dem Unterbefehl „show“ anzeigen:

vitis show Musik

Sie können ihn mit dem Unterbefehl „open“ wiedergeben.

vitis open Musik

Da wir in der Kategorie „Musik“ nur eine Datei haben, wird nur diese gestartet. Für das Öffnen von Dateien mit Standardprogrammen habe ich ein separates Dienstprogramm erstellt. vts-fs-open (Standardwerkzeuge wie xdg-open oder mimeopen haben mich aus verschiedenen Gründen nicht überzeugt; aber falls gewünscht, können Sie in den Einstellungen ein anderes Dienstprogramm für das universelle Öffnen von Dateien angeben). Dieses Dienstprogramm funktioniert gut auf verschiedenen Distributionen mit unterschiedlichen Desktop-Umgebungen, daher empfehle ich, es zusammen mit vitis zu installieren.

Es ist auch möglich, direkt das Programm zum Öffnen von Dateien anzugeben:

vitis open Musik --app qmmp

Kategorien statt Verzeichnisse oder ein semantisches Dateisystem für Linux

Wir erstellen weitere Kategorien und fügen Dateien mit „assign“ hinzu. Wenn Dateien Kategorien zugewiesen werden, die noch nicht existieren, wird eine Anfrage zur Erstellung dieser Kategorien gestellt. Diese zusätzliche Abfrage kann vermieden werden, wenn das Flag —yes verwendet wird.

vitis assign Programmierung R -f "Einführung in R.pdf" "Statistik-Paket R: Wahrscheinlichkeitsrechnung und Mathestatistik.pdf" --yes

Jetzt wollen wir der Datei "Statistik-Paket R: Wahrscheinlichkeitsrechnung und Mathestatistik.pdf" die Kategorie „Mathematik“ hinzufügen. Wir wissen, dass diese Datei bereits die Kategorie „R“ hat und können daher den Kategorienpfad aus dem Vitis-System verwenden:

vitis assign Mathematik -v "R/Statistik-Paket R: Wahrscheinlichkeitsrechnung und Mathestatistik.pdf"

Glücklicherweise ermöglicht die Bash-Autovervollständigung, dies einfach zu tun.

Sehen wir uns an, was wir erhalten haben, indem wir das Flag —categories verwenden, um die Liste der Kategorien für jede Datei anzuzeigen:

vitis show R --categories

Kategorien statt Verzeichnisse oder ein semantisches Dateisystem für Linux

Beachten Sie, dass Dateien auch automatisch Kategorien basierend auf dem Format, Typ (die Formate zusammenfasst) und der Dateiendung zugewiesen wurden. Diese Kategorien können auf Wunsch deaktiviert werden. Später werde ich unbedingt die Lokalisierung ihrer Bezeichnungen vornehmen.

Fügen wir der „Mathematik“ noch etwas Abwechslung hinzu:

vitis assign Mathematik -f "Mathematische Analyse - 1984.pdf" Perelman_Unterhaltsame_Mathematik_1927.djvu 

Jetzt wird es interessant. Anstelle von Kategorien können Ausdrücke mit Operationen wie Vereinigung, Schnitt und Differenzierung geschrieben werden, das heißt, man kann Mengenoperationen verwenden. Zum Beispiel wird der Schnitt von „Mathematik“ mit „R“ ein Ergebnis von einer Datei liefern.

vitis show R i: Mathematik

Wir ziehen die Erwähnungen der Sprache „R“ aus „Mathematik“ ab:

vitis show Mathematik R #oder vitis show Mathematik c: R

Wir können Musik und die Sprache R ohne Ziel vereinen:

vitis show Musik u: R

Die Flagge -n ermöglicht es, die benötigten Dateien aus dem Ergebnis der Abfrage nach Nummern und/oder Bereichen herauszuziehen, zum Beispiel, -n 3-7, oder etwas komplizierter: -n 1,5,8-10,13. Oft ist es nützlich, den Unterbefehl open zu verwenden, der es ermöglicht, die benötigten Dateien aus der Liste zu öffnen.

Kategorien statt Verzeichnisse oder ein semantisches Dateisystem für Linux

Obwohl wir uns von der Verwendung der herkömmlichen Verzeichnisstruktur entfernen, ist es oft hilfreich, verschachtelte Kategorien zu haben. Wir erstellen die Unterkategorie „Statistik“ unter der Kategorie „Mathematik“ und fügen diese Kategorie einer geeigneten Datei hinzu:

vitis create Mathematik/Statistik

vitis assign Mathematik/Statistik -v "R/Einführung in R.pdf"

vitis show Mathematik --categories

Kategorien statt Verzeichnisse oder ein semantisches Dateisystem für Linux

Wir können sehen, dass diese Datei jetzt die Kategorie „Mathematik/Statistik“ anstelle von „Mathematik“ hat (überflüssige Links werden verfolgt).

Die Verwendung des vollständigen Pfades kann unpraktisch sein, also erstellen wir einen „globalen“ Alias:

vitis assign Mathematik/Statistik -a Statistik

vitis show Statistik

Kategorien statt Verzeichnisse oder ein semantisches Dateisystem für Linux

Nicht nur gewöhnliche Dateien

Internet-Links

Um die Speicherung jeglicher Informationen zu vereinheitlichen, wäre es nützlich, zumindest die Links zu Internet-Ressourcen zu kategorisieren. Und das ist möglich:

vitis assign Habr Farbanomalie -i https://habr.com/ru/company/sfe_ru/blog/437304/ --yes

An einem speziellen Ort wird eine Datei mit dem Titel der HTML-Seite und der Endung .desktop erstellt. Dies ist das traditionelle Format für Verknüpfungen in GNU/Linux. Solche Verknüpfungen erhalten automatisch die Kategorie NetworkBookmarks.

Natürlich werden Verknüpfungen erstellt, um sie zu verwenden:

vitis open Farbanomalie

Die Ausführung des Befehls führt dazu, dass der gerade gespeicherte Link im Browser geöffnet wird. Kategorisierte Verknüpfungen zu Internet-Quellen können eine Alternative zu den Lesezeichen des Browsers darstellen.

Dateifragmenten

Es ist auch nützlich, Kategorien für bestimmte Dateiabschnitte zu haben. Eine interessante Idee, oder? Aktuell betrifft die Implementierung jedoch nur gewöhnliche Textdateien sowie Audio- und Videodateien. Wenn Sie beispielsweise einen bestimmten Abschnitt eines Konzerts oder einen komischen Moment aus einem Film markieren möchten, können Sie beim Einsatz von assign die Flags —fragname, —start und —finish verwenden. Lassen Sie uns das Intro aus "DuckTales" speichern:

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

vitis open Intros

Es erfolgt tatsächlich keine Trennung von Dateien, stattdessen wird eine Verweisdatei auf einen Fragment erstellt, in der der Dateityp, der Pfad zur Datei sowie der Anfang und das Ende des Fragments beschrieben sind. Die Erstellung und das Öffnen von Verweisen auf Fragmente werden speziellen Tools delegiert, die ich zu diesem Zweck gemacht habe — mediafragmenter und fragplayer. Ersteres erstellt die Datei, letzterer öffnet sie. Bei Audio- und Videoaufnahmen erfolgt der Start des Mediadatei von einer bestimmten Position bis zu einer anderen mit dem VLC-Player, daher muss dieser auch im System vorhanden sein. Zunächst wollte ich dies auf Basis von mplayer umsetzen, aber dort gab es aus irgendeinem Grund Probleme mit der Positionierung zum gewünschten Zeitpunkt.
In unserem Beispiel wird die Datei „Duck Tales intro.fragpointer“ erstellt (sie wird an einem speziellen Ort abgelegt), und anschließend wird das Fragment vom Beginn der Datei bis zu einem Markierungspunkt bei 59 Sekunden abgespielt, nachdem VLC geschlossen wird.

Ein weiteres Beispiel — wir entschieden uns, einen bestimmten Auftritt bei einem Konzert eines bekannten Künstlers zu kategorisieren:

vitis assign Лепс "Спasite nashi dushi" -f Grigorij Lepc - Konzert Parus - Lieder von Wladimir Wyssozki.mp4 --fragname "Спасите наши души" --start 00:32:18 --finish 00:36:51

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

Beim Öffnen wird die Datei an der gewünschten Position gestartet und schließt sich nach viereinhalb Minuten.

Wie das alles funktioniert + zusätzliche Funktionen

Kategorielagerung

Zu Beginn der Planung einer semantischen Dateisystemorganisation kamen mir drei Methoden in den Sinn: über die Speicherung symbolischer Links, durch eine Datenbank oder über die Beschreibung in XML. Die erste Methode setzte sich durch, da sie einerseits einfach zu implementieren ist und andererseits dem Benutzer die Möglichkeit bietet, die Kategorien direkt aus dem Dateisystem anzusehen (was praktisch und wichtig ist). Zu Beginn der Nutzung vitis Im Heimatverzeichnis des Benutzers wird das Verzeichnis „Vitis“ sowie die Konfigurationsdatei „.config/vitis/vitis.conf“ erstellt. In ~/Vitis werden Verzeichnisse angelegt, die den Kategorien entsprechen, und in diesen Kategorien werden symbolische Links zu den Originaldateien erstellt. Die Pseudonyme der Kategorien sind ebenfalls nur Links zu ihnen. Natürlich könnte die Existenz des Verzeichnisses „Vitis“ im Heimatverzeichnis einige stören. Wir können auf jeden anderen Ort wechseln:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

Es wird irgendwann klar, dass es wenig sinnvoll ist, Dateien, die an verschiedenen Orten abgelegt sind, chaotisch zu kategorisieren, da deren Standort variieren kann. Deshalb habe ich zunächst ein Verzeichnis erstellt, in das ich alles einfach abgelegt und diesem dann Kategorien zugewiesen habe. Außerdem dachte ich, es wäre gut, diesen Punkt programmatisch zu organisieren. So entstand das Konzept des „Dateiraums“. Zu Beginn der Nutzung vitis wäre es sofort hilfreich, einen solchen Ort einzurichten (dort werden alle benötigten Dateien abgelegt) und die automatische Speicherung zu aktivieren:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/
vitis service set autosave yes

Ohne die Auto-Save-Funktion bei der Unterbefehl «assign» ist das Flag —save erforderlich, wenn Sie das hinzugefügte Datei im Dateispeicher sichern möchten.

Darüber hinaus können mehrere Dateispeicher hinzugefügt und deren Prioritäten geändert werden, was nützlich sein kann, wenn es sehr viele Dateien gibt, die auf verschiedenen Speichermedien gespeichert sind. Diese Möglichkeit werde ich hier nicht behandeln; die Details finden Sie in den Programmdokumentationen.

Migration des semantischen Dateisystems

Die Vitis-Direktive und die Dateispeicher können theoretisch manchmal ihren Standort wechseln. Um die Funktionalität sicherzustellen, habe ich ein separates Dienstprogramm erstellt link-editor, das Links in großen Mengen bearbeiten kann, indem es Teile des Pfades durch andere ersetzt:

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

Im ersten Fall, nachdem wir von /mnt/MyFavoriteDisk/Vitis/ in das Heimatverzeichnis umgezogen sind, werden die symbolischen Links, die mit den Aliasen verbunden sind, bearbeitet. Im zweiten Fall werden nach dem Ändern des Speicherorts alle Links in Vitis entsprechend der Anforderung zum Ersetzen eines Teils ihres Pfades geändert.

Automatische Kategorien

Wenn Sie den Befehl vitis service get autocategorization, ausführen, können Sie sehen, dass standardmäßig die Zuordnung der automatischen Kategorien nach Format (Format und Typ) und Dateierweiterung (Erweiterung) eingestellt ist.

Das ist nützlich, wenn Sie zum Beispiel etwas unter PDFs finden möchten oder überprüfen wollen, was Sie in EPUB und FB2 gespeichert haben. Sie können einfach die Anfrage ausführen

vitis show Format/MOBI u: Format/FB2

Es stellte sich heraus, dass die standardmäßigen GNU/Linux-Tools wie file oder mimetype für meine Zwecke nicht ausreichend waren, da sie nicht immer das Format korrekt erkennen. Deshalb musste ich eine eigene Implementierung basierend auf Dateisignaturen und Erweiterungen erstellen. Das Thema der Dateiformaterkennung ist allgemein ein interessantes Forschungsfeld und verdient einen eigenen Artikel. Momentan kann ich sagen, dass ich möglicherweise nicht für alle Formate weltweit eine korrekte Erkennung vorgesehen habe, aber insgesamt funktioniert es bereits ganz gut. Allerdings wird der EPUB-Format derzeit als ZIP erkannt (was im Grunde genommen gerechtfertigt ist, aber in der Praxis sollte man das nicht als normgerechtes Verhalten ansehen). Bedenken Sie bis zu einem gewissen Punkt, dass diese Möglichkeit experimentell ist, und berichten Sie über Bugs. In seltsamen Situationen kann man immer kategorienbasiert nach Dateierweiterungen vorgehen, z. B. Extension/epub.

Wenn die automatischen Kategorien nach Format aktiviert sind, sind auch die automatischen Kategorien aktiv, die einige Formate zusammenfassen, wie z. B.: „Archive“, „Bilder“, „Video“, „Audio“ und „Dokumente“. Für diese Unterkategorien werden auch lokalisierte Namen erstellt.

Worüber nicht gesagt wurde

vitis es wurde zu einem äußerst vielseitigen Werkzeug, und es ist schwierig, alles auf einmal abzudecken. Kurz erwähne ich, was noch möglich ist:

  • Kategorien können gelöscht und von Dateien entfernt werden;
  • Suchergebnisse können in ein angegebenes Verzeichnis kopiert werden;
  • Dateien können wie Programme ausgeführt werden;
  • Der Befehl show bietet viele Optionen, wie z. B. Sortierung nach Name/Änderungsdatum oder Zugriff/Größe/Erweiterung, Anzeige von Dateieigenschaften und Pfaden zu den Originalen, Einbeziehung verborgener Dateien usw.;
  • Beim Speichern von Links auf Internetquellen können auch lokale Kopien von HTML-Seiten gespeichert werden.

Alle Details sind in der Benutzerhilfe zu finden.

Perspektiven

Oft sagen Skeptiker, dass "niemand diese Tags selbst setzen wird". An meinem eigenen Beispiel kann ich das Gegenteil beweisen: Ich habe bereits über sechstausend Dateien kategorisiert, über tausend Kategorien und Aliasnamen erstellt, und es hat sich gelohnt. Wenn man mit einem Befehl vitis open Plan die Liste seiner Aufgaben öffnet oder wenn man mit einem Befehl vitis open LaTeX das Buch von Stolyarov über das Setzen mit LaTeX öffnet, wird es moralisch schwer, das Dateisystem "altmodisch" zu benutzen.

Auf dieser Grundlage entstehen einige Ideen. Zum Beispiel könnte man ein automatisches Radio entwickeln, das thematische Musik basierend auf dem aktuellen Wetter, Feiertagen, Wochentagen, Tages- oder Jahreszeiten abspielt. Ein weiteres verwandtes Konzept ist ein Musikplayer, der Kategorien kennt und Musik entsprechend den Ausdrücken mit Operationen über Kategorien wie über Mengen abspielen kann. Es wäre nützlich, einen Dienst zu erstellen, der den "Downloads"-Ordner überwacht und vorschlägt, neue Dateien zu kategorisieren. Und natürlich sollte ein ordentlicher grafischer semantischer Datei-Manager entwickelt werden. Früher habe ich sogar für ein Unternehmen einen Webservice für die gemeinsame Nutzung von Dateien erstellt, aber dieser hatte nicht die Priorität und wurde obsolet, obwohl er ein hohes Maß an Funktionalität erreicht hatte. (Aufgrund großer Änderungen ist er nun nicht mehr nutzbar.) vitis, он уже непригоден к использованию.)

hier eine kleine Demonstration

Kategorien statt Verzeichnisse oder ein semantisches Dateisystem für Linux

Fazit

Vitis Dies ist nicht der erste Versuch, die Art und Weise zu revolutionieren, wie mit Daten gearbeitet wird. Ich halte es jedoch für wichtig, meine Ideen umzusetzen und die Implementierung unter der GNU GPL zur Verfügung zu stellen. Zur Vereinfachung wurde ein Deb-Paket für x86-64 erstellt, das auf allen modernen Debian-Distributionen funktionieren sollte. Auf ARM gab es einige kleinere Schwierigkeiten (alle anderen Programme, die damit verbunden sind, funktionieren jedoch einwandfrei), aber auch für diese Plattform (armhf) wird bald ein funktionierendes Paket bereitgestellt. Derzeit habe ich die Erstellung von RPM-Paketen eingestellt, aufgrund von Problemen mit Fedora 30 und der Schwierigkeit, mich auf viele RPM-Distributionen zu konzentrieren, aber später werde ich dennoch für einige von ihnen Pakete erstellen. In der Zwischenzeit kann man vitismake && make install checkinstall oder Vielen Dank für Ihre Aufmerksamkeit! Ich hoffe, dieser Artikel und dieses Projekt sind nützlich..

Link zum Projektrepository

Ссылка на репозиторий проекта

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster