Kategorien statt Verzeichnisse oder das Semantic File System für Linux

Die Datenklassifizierung selbst ist ein interessantes Forschungsthema. Ich liebe es, Informationen zu sammeln, die notwendig erscheinen, und ich habe immer versucht, logische Verzeichnishierarchien für meine Dateien zu erstellen, und eines Tages sah ich in einem Traum ein schönes und praktisches Programm zum Zuweisen von Tags zu Dateien und beschloss, dass ich nicht leben konnte gefällt mir nicht mehr so.

Das Problem hierarchischer Dateisysteme

Benutzer stehen häufig vor dem Problem, den Speicherort für die nächste neue Datei auszuwählen und ihre eigenen Dateien zu finden (manchmal sind Dateinamen überhaupt nicht dazu gedacht, dass sich eine Person daran erinnert).

Ein Ausweg aus der Situation können semantische Dateisysteme sein, die normalerweise eine Ergänzung zum herkömmlichen Dateisystem darstellen. Die darin enthaltenen Verzeichnisse werden durch semantische Attribute, auch Tags, Kategorien und Metadaten genannt, ersetzt. Ich werde den Begriff „Kategorie“ häufiger verwenden, weil... Im Zusammenhang mit Dateisystemen ist das Wort „Tag“ manchmal etwas seltsam, insbesondere wenn „Subtags“ und „Tag-Aliase“ vorkommen.

Durch das Zuweisen von Kategorien zu Dateien wird das Problem des Speicherns und Suchens einer Datei weitgehend beseitigt: Wenn Sie sich an mindestens eine der einer Datei zugewiesenen Kategorien erinnern (oder diese erraten), wird die Datei niemals aus der Ansicht verschwinden.

Zuvor wurde dieses Thema auf Habré mehr als einmal angesprochen (Zeit, два, drei, vier usw.), hier beschreibe ich meine Lösung.

Weg zur Verwirklichung

Unmittelbar nach dem erwähnten Traum beschrieb ich in meinem Notizbuch die Befehlsschnittstelle, die die notwendige Arbeit mit Kategorien ermöglicht. Dann beschloss ich, dass ich in ein oder zwei Wochen einen Prototyp mit Python oder Bash schreiben könnte und dann an der Erstellung einer grafischen Shell in Qt oder GTK arbeiten müsste. Die Realität erwies sich wie immer als viel härter und die Entwicklung verzögerte sich.

Die ursprüngliche Idee bestand darin, zunächst ein Programm mit einer praktischen und übersichtlichen Befehlszeilenschnittstelle zu erstellen, das Kategorien erstellt und löscht, Kategorien zu Dateien zuweist und Kategorien aus Dateien löscht. Ich habe das Programm aufgerufen Vitis.

Erster Versuch zu erstellen Vitis endete im Nichts, da viel Zeit für Arbeit und Studium aufgewendet wurde. Schon der zweite Versuch hat es in sich: Für die Masterarbeit habe ich es geschafft, das geplante Projekt abzuschließen und sogar einen Prototypen der GTK-Shell anzufertigen. Doch diese Version erwies sich als so unzuverlässig und unbequem, dass vieles überdacht werden musste.

Ich selbst habe die dritte Version tatsächlich sehr lange verwendet und mehrere Tausend meiner Dateien in Kategorien übertragen. Dies wurde auch durch die implementierte Bash-Vervollständigung erheblich erleichtert. Einige Probleme, wie das Fehlen automatischer Kategorien und die Möglichkeit, Dateien mit demselben Namen zu speichern, blieben jedoch weiterhin bestehen, und das Programm war bereits von seiner eigenen Komplexität betroffen. So kam ich auf die Notwendigkeit, komplexe Softwareentwicklungsprobleme zu lösen: detaillierte Anforderungen schreiben, ein Funktionstestsystem entwickeln, Verpackungsanweisungen studieren und vieles mehr. Nun bin ich bei meinem Plan angelangt, diese bescheidene Schöpfung der freien Gemeinschaft präsentieren zu können. Spezifische Dateiverwaltung wie die Verwaltung durch das Konzept von Kategorien wirft unerwartete Probleme und Probleme auf und löst diese Vitis hat fünf weitere Projekte um sich herum hervorgebracht, von denen einige im Artikel erwähnt werden. Bis jetzt Vitis Ich habe keine grafische Shell gekauft, aber die Bequemlichkeit, Dateikategorien über die Befehlszeile zu verwenden, überwiegt für mich bereits alle Vorteile eines normalen grafischen Dateimanagers.

Примеры использования

Fangen wir ganz einfach an: Erstellen Sie eine Kategorie:

vitis create Музыка

Fügen wir als Beispiel eine Komposition hinzu:

vitis assign Музыка -f "The Ink Spots - I Don't Want To Set The World On Fire.mp3"

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

vitis show Музыка

Sie können es mit dem Unterbefehl „open“ abspielen.

vitis open Музыка

Weil Wenn wir nur eine Datei in der Kategorie „Musik“ haben, wird nur diese gestartet. Um Dateien mit ihren Standardprogrammen öffnen zu können, habe ich ein separates Dienstprogramm erstellt vts-fs-open (Standardtools wie xdg-open oder mimeopen passten für mich aus mehreren Gründen nicht; aber wenn überhaupt, können Sie in den Einstellungen ein anderes Dienstprogramm zum universellen Öffnen von Dateien angeben). Dieses Dienstprogramm funktioniert gut auf verschiedenen Distributionen mit unterschiedlichen Arbeitsumgebungen, daher empfehle ich, es zusammen mit Vitis zu installieren.

Sie können das Programm zum Öffnen von Dateien auch direkt angeben:

vitis open Музыка --app qmmp

Kategorien statt Verzeichnisse oder das Semantic File System für Linux

Lassen Sie uns weitere Kategorien erstellen und Dateien hinzufügen, indem Sie „Zuweisen“ verwenden. Wenn Dateien Kategorien zugeordnet sind, die noch nicht existieren, werden Sie aufgefordert, diese zu erstellen. Eine unnötige Anfrage kann durch die Verwendung des Flags -yes vermieden werden.

vitis assign Программирование R -f "Введение в R.pdf" "Статистический пакет R: теория вероятностей и матстатистика.pdf" --yes

Jetzt wollen wir die Kategorie „Mathematik“ zur Datei „Statistikpaket R: Wahrscheinlichkeitstheorie und mathematische Statistik.pdf“ hinzufügen. Wir wissen, dass diese Datei bereits als „R“ kategorisiert ist und können daher den Kategoriepfad aus dem Vitis-System verwenden:

vitis assign Математика -v "R/Статистический пакет R: теория вероятностей и матстатистика.pdf"

Glücklicherweise macht die Bash-Vervollständigung dies einfach.

Sehen wir uns an, was passiert ist, indem wir das Flag --categories verwenden, um eine Liste der Kategorien für jede Datei anzuzeigen:

vitis show R --categories

Kategorien statt Verzeichnisse oder das Semantic File System für Linux

Beachten Sie, dass die Dateien auch automatisch nach Format, Typ (kombiniert Formate) und Dateierweiterung kategorisiert wurden. Diese Kategorien können bei Bedarf deaktiviert werden. Später werde ich ihre Namen auf jeden Fall lokalisieren.

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

vitis assign Математика -f "Математический анализ - 1984.pdf" Перельман_Занимательная_математика_1927.djvu 

Und jetzt wird es interessant. Anstelle von Kategorien können Sie Ausdrücke mit den Operationen Vereinigung, Schnittmenge und Subtraktion schreiben, also Operationen auf Mengen verwenden. Beispielsweise führt die Schnittmenge von „Math“ mit „R“ zu einer Datei.

vitis show R i: Математика

Subtrahieren wir Verweise auf die Sprache „R“ von „Mathematik“:

vitis show Математика  R  #или vitis show Математика c: R

Wir können Musik und die R-Sprache ziellos kombinieren:

vitis show Музыка u: R

Mit dem Flag -n können Sie die erforderlichen Dateien anhand von Zahlen und/oder Bereichen aus dem Anforderungsergebnis „herausziehen“, z. B. -n 3-7, oder etwas komplizierteres: -n 1,5,8-10,13. Dies ist häufig mit dem Unterbefehl „open“ nützlich, mit dem Sie die gewünschten Dateien aus einer Liste öffnen können.

Kategorien statt Verzeichnisse oder das Semantic File System für Linux

Während wir uns von der Verwendung einer herkömmlichen Verzeichnishierarchie entfernen, ist es oft nützlich, verschachtelte Kategorien zu haben. Erstellen wir eine Unterkategorie „Statistik“ unter der Kategorie „Mathematik“ und fügen Sie diese Kategorie der entsprechenden Datei hinzu:

vitis create Математика/Статистика

vitis assign Математика/Статистика -v "R/Введение в R.pdf"

vitis show Математика --categories

Kategorien statt Verzeichnisse oder das Semantic File System für Linux

Wir können sehen, dass diese Datei jetzt die Kategorie „Mathe/Statistik“ anstelle von „Mathe“ hat (zusätzliche Links werden verfolgt).

Es kann umständlich sein, den vollständigen Pfad anzugeben. Erstellen wir einen „globalen“ Alias:

vitis assign Математика/Статистика -a Статистика

vitis show Статистика

Kategorien statt Verzeichnisse oder das Semantic File System für Linux

Nicht nur normale Dateien

Internet-Links

Um die Speicherung von Informationen zu vereinheitlichen, wäre es zumindest sinnvoll, Links zu Internetressourcen zu kategorisieren. Und das ist möglich:

vitis assign Хабр Цветоаномалия -i https://habr.com/ru/company/sfe_ru/blog/437304/ --yes

An einer speziellen Stelle wird eine Datei mit dem Header der HTML-Seite und der Erweiterung .desktop erstellt. Dies ist das traditionelle Verknüpfungsformat in GNU/Linux. Solche Verknüpfungen werden automatisch als NetworkBookmarks kategorisiert.

Natürlich werden Verknüpfungen erstellt, die verwendet werden können:

vitis open Цветоаномалия

Durch die Ausführung des Befehls wird der neu gespeicherte Link im Browser geöffnet. Kategorisierte Verknüpfungen zu Internetquellen können als Ersatz für Browser-Lesezeichen dienen.

Dateifragmente

Es ist auch nützlich, Kategorien für einzelne Dateiteile zu haben. Keine schlechte Bitte, oder? Die aktuelle Implementierung betrifft jedoch bisher nur reine Textdateien, Audio- und Videodateien. Nehmen wir an, Sie müssen einen bestimmten Teil eines Konzerts oder einen lustigen Moment in einem Film markieren. Dann können Sie bei Verwendung von „assign“ die Flags -fragname, -start, -finish verwenden. Speichern wir den Bildschirmschoner von „DuckTales“:

vitis assign vitis assign -c Заставки -f Duck_Tales/s01s01.avi --finish 00:00:59 --fragname "Duck Tales intro"

vitis open Заставки

In Wirklichkeit findet kein Dateischneiden statt; stattdessen wird eine Zeigerdatei auf das Fragment erstellt, die den Dateityp, den Pfad zur Datei sowie den Anfang und das Ende des Fragments beschreibt. Das Erstellen und Öffnen von Zeigern auf Fragmente wird an Dienstprogramme delegiert, die ich speziell für diese Zwecke erstellt habe – das sind Mediafragmenter und Fragplayer. Der erste schafft, der zweite öffnet. Bei Audio- und Videoaufnahmen wird die Mediendatei mit dem VLC-Player von einer bestimmten Position an eine bestimmte Position gestartet, sie muss also auch im System vorhanden sein. Zuerst wollte ich das auf Basis von mplayer machen, aber aus irgendeinem Grund war die Positionierung im richtigen Moment sehr schief.
In unserem Beispiel wird die Datei „Duck Tales intro.fragpointer“ erstellt (sie wird an einem speziellen Ort abgelegt) und dann wird ein Fragment vom Anfang der Datei (da –start beim Erstellen nicht angegeben wurde) bis zum 59. abgespielt zweite Markierung, danach wird VLC geschlossen.

Ein weiteres Beispiel ist, als wir beschlossen, einen einzelnen Auftritt eines berühmten Künstlers bei einem Konzert zu kategorisieren:

vitis assign Лепс "Спасите наши души" -f Григорий Лепc - Концерт Парус - песни Владимира Высоцкого.mp4 --fragname "Спасите наши души" --start 00:32:18 --finish 00:36:51

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

Beim Öffnen wird die Datei an der gewünschten Position eingefügt und nach viereinhalb Minuten geschlossen.

So funktioniert alles + zusätzliche Funktionen

Kategorien speichern

Als ich über die Organisation eines semantischen Dateisystems nachdachte, kamen mir gleich zu Beginn drei Möglichkeiten in den Sinn: durch die Speicherung symbolischer Links, durch eine Datenbank, durch eine Beschreibung in XML. Die erste Methode hat gewonnen, weil... Einerseits ist es einfach zu implementieren, andererseits hat der Benutzer die Möglichkeit, Kategorien direkt aus dem Dateisystem heraus anzusehen (und das ist praktisch und wichtig). Zu Beginn der Nutzung Vitis Das Verzeichnis „Vitis“ und die Konfigurationsdatei „.config/vitis/vitis.conf“ werden im Home-Verzeichnis des Benutzers erstellt. In ~/Vitis werden den Kategorien entsprechende Verzeichnisse erstellt und in diesen Kategorieverzeichnissen werden symbolische Links zu den Originaldateien erstellt. Auch Kategorie-Aliase sind nur Links zu ihnen. Natürlich mag das Vorhandensein des „Vitis“-Verzeichnisses im Home-Verzeichnis manchen Leuten nicht gefallen. Wir können zu jedem anderen Standort wechseln:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

Ab einem bestimmten Punkt wird klar, dass es wenig Sinn macht, an verschiedenen Orten verstreute Dateien zu kategorisieren, da sich ihr Speicherort ändern kann. Deshalb habe ich zunächst ein Verzeichnis für mich erstellt, in dem ich dummerweise alles abgelegt und allen Kategorien zugewiesen habe. Dann entschied ich, dass es schön wäre, diesen Moment auf Programmebene zu formalisieren. So entstand das Konzept des „Dateiraums“. Zu Beginn der Nutzung Vitis Es würde nicht schaden, sofort einen solchen Speicherort einzurichten (alle benötigten Dateien werden dort gespeichert) und die automatische Speicherung zu aktivieren:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Ohne automatische Speicherung ist bei Verwendung des Unterbefehls „assign“ das Flag „--save“ erforderlich, wenn Sie die hinzugefügte Datei im Dateibereich speichern möchten.

Darüber hinaus können Sie mehrere Dateibereiche hinzufügen und deren Prioritäten ändern. Dies kann nützlich sein, wenn viele Dateien vorhanden sind und diese auf verschiedenen Medien gespeichert sind. Auf diese Möglichkeit werde ich hier nicht eingehen; Details finden Sie in der Programmhilfe.

Semantische Dateisystemmigration

Wie auch immer, das Vitis-Verzeichnis und die Dateibereiche können theoretisch manchmal von Ort zu Ort wandern. Damit es funktioniert, habe ich ein separates Dienstprogramm erstellt Link-Editor, mit dem Links massenhaft bearbeitet und Teile des Pfads durch andere ersetzt werden können:

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 werden die mit den Aliasnamen verknüpften symbolischen Links bearbeitet, nachdem wir von /mnt/MyFavoriteDisk/Vitis/ in das Home-Verzeichnis verschoben wurden. Im zweiten Fall werden nach der Änderung des Speicherorts des Dateibereichs alle Links in Vitis entsprechend der Aufforderung, einen Teil ihres Pfads zu ersetzen, in neue geändert.

Automatische Kategorien

Wenn Sie den Befehl ausführen vitis service get autocategorizationkönnen Sie sehen, dass automatische Kategorien standardmäßig nach Format (Format und Typ) und Dateierweiterung (Erweiterung) zugewiesen werden.

Dies ist nützlich, wenn Sie beispielsweise etwas in PDFs finden oder sich ansehen müssen, was Sie in EPUB und FB2 gespeichert haben. Sie können die Anfrage einfach ausführen

vitis show Format/MOBI u: Format/FB2

Zufälligerweise passten Standard-GNU/Linux-Tools wie File oder Mimetype gerade deshalb nicht zu mir, weil sie das Format nicht immer korrekt bestimmen; ich musste meine eigene Implementierung basierend auf Dateisignaturen und -erweiterungen erstellen. Generell ist das Thema Definition von Dateiformaten ein interessantes Forschungsthema und verdient einen eigenen Artikel. Im Moment kann ich sagen, dass ich vielleicht nicht allen Formaten auf der Welt wirklich Anerkennung verschafft habe, aber im Großen und Ganzen funktioniert es schon gut. Zwar definiert EPUB das Format jetzt als ZIP (im Allgemeinen ist dies gerechtfertigt, in der Praxis sollte dies jedoch nicht als normales Verhalten angesehen werden). Betrachten Sie diese Funktion vorerst als experimentell und melden Sie etwaige Fehler. In ungewöhnlichen Situationen können Sie immer Dateierweiterungskategorien verwenden, zum Beispiel „Erweiterung/epub“.

Wenn automatische Kategorien nach Format aktiviert sind, sind auch automatische Kategorien aktiviert, die einige Formate nach Typ gruppieren: „Archive“, „Bilder“, „Video“, „Audio“ und „Dokumente“. Für diese Unterkategorien werden auch lokalisierte Namen erstellt.

Was wird nicht gesagt

Vitis Es stellte sich heraus, dass es sich um ein sehr vielseitiges Tool handelte, und es ist schwierig, alles auf einmal abzudecken. Lassen Sie mich kurz erwähnen, was Sie sonst noch tun können:

  • Kategorien können gelöscht und aus Dateien entfernt werden;
  • die Ergebnisse von Ausdrucksabfragen können in das angegebene Verzeichnis kopiert werden;
  • Dateien können als Programme ausgeführt werden;
  • Der Befehl „show“ verfügt über viele Optionen, z. B. Sortieren nach Name/Änderungsdatum oder Zugriff/Größe/Erweiterung, Anzeigen von Dateieigenschaften und Pfaden zu Originalen, Aktivieren der Anzeige versteckter Dateien usw.;
  • Wenn Sie Links zu Internetquellen speichern, können Sie auch lokale Kopien von HTML-Seiten speichern.

Ausführliche Informationen finden Sie in der Benutzerhilfe.

Chancen

Skeptiker sagen oft, dass „niemand diese Tags selbst setzen wird“. Anhand meines eigenen Beispiels kann ich das Gegenteil beweisen: Ich habe bereits mehr als sechstausend Dateien kategorisiert, mehr als tausend Kategorien und Aliase erstellt und es hat sich gelohnt. Wenn ein Team vitis open План Öffnen Sie Ihre To-Do-Liste oder wann mit einem Befehl vitis open LaTeX Wenn Sie Stolyarovs Buch über das LaTeX-Layoutsystem aufschlagen, ist es moralisch bereits schwierig, das Dateisystem „auf die altmodische Art“ zu verwenden.

Auf dieser Grundlage entstehen zahlreiche Ideen. Sie können beispielsweise ein automatisches Radio erstellen, das thematische Musik entsprechend dem aktuellen Wetter, Feiertag, Wochentag, Tageszeit oder Jahr einschaltet. Noch näher am Thema liegt ein Musikplayer, der sich mit Kategorien auskennt und Musik nach Ausdruck mit Operationen auf Kategorien wie auf Sets abspielen kann. Es ist sinnvoll, einen Daemon zu erstellen, der das Verzeichnis „Downloads“ überwacht und die Kategorisierung neuer Dateien anbietet. Und natürlich sollten wir einen normalen grafischen semantischen Dateimanager erstellen. Ich habe einmal sogar einen Webdienst für das Unternehmen zur kollektiven Nutzung von Dateien erstellt, aber dieser hatte keine Priorität und wurde irrelevant, obwohl er ein hohes Leistungsniveau erreichte. (Aufgrund großer Änderungen in der Vitis, es ist nicht mehr verwendbar.)

Hier ist eine kleine Demo

Kategorien statt Verzeichnisse oder das Semantic File System für Linux

Abschluss

Vitis ist nicht der erste Versuch, den Arbeitsstil mit Daten radikal zu ändern, aber ich hielt es für wichtig, meine Ideen umzusetzen und die Umsetzung unter der GNU GPL-Lizenz öffentlich zugänglich zu machen. Der Einfachheit halber wurde ein Deb-Paket für x86-64 erstellt; es sollte auf allen modernen Debian-Distributionen funktionieren. Es gab kleinere Schwierigkeiten bei ARM (während alle anderen damit verbundenen Programme Vitis, funktionieren einwandfrei), aber in Zukunft wird ein Arbeitspaket für diese Plattform (armhf) kompiliert. Aufgrund von Problemen unter Fedora 30 und der Schwierigkeit, sie auf viele RPM-Distributionen zu verteilen, habe ich vorerst aufgehört, RPM-Pakete zu erstellen, aber für zumindest einige davon werden später noch Pakete erstellt. In der Zwischenzeit können Sie verwenden make && make install oder checkinstall.

Vielen Dank für Ihre Aufmerksamkeit! Ich hoffe, dass dieser Artikel und dieses Projekt nützlich sein können.

Link zum Projekt-Repository

Source: habr.com

Kommentar hinzufügen