Kategorie místo adresářů, nebo Sémantický souborový systém pro Linux

Klasifikace dat je sama o sobě zajímavé téma k výzkumu. Rád shromažďuji informace, které se zdají být užitečné, a vždy jsem se snažil vytvářet logické hierarchie adresářů pro své soubory. Jednou jsem ve snu viděl krásný a pohodlný program na přiřazování tagů souborům a rozhodl jsem se, že takto žít dál nelze.

Problém hierarchických souborových systémů

Uživatelé se často potýkají s problémem, kam uložit právě nový soubor, a s problémem hledání vlastních souborů (někdy názvy souborů nejsou určeny k zapamatování člověkem).

Řešením situace mohou být sémantické souborové systémy, které jsou obvykle nadstavbou nad tradičním souborovým systémem. V nich jsou adresáře nahrazeny sémantickými atributy, které se také nazývají tagy, kategoriemi nebo metadaty. Častěji budu používat termín „kategorie“, protože v kontextu souborových systémů slovo „tag“ někdy zní poněkud podivně, zvlášť když se objevují „podtagy“ a „aliasy tagů“.

Přiřazení kategorií souborům do velké míry odstraňuje problémy s místem ukládání a vyhledáváním souborů: pokud si pamatujete (nebo tušíte) alespoň jednu z přiřazených kategorií souboru, pak soubor už nikdy nezmizí z dohledu.

Toto téma bylo již dříve diskutováno na Habré (jedna, dva, tři, čtyři atd.), zde popisuji své řešení.

Cesta k realizaci

Ihned po zmíněném snu jsem si do sešitu napsal příkazové rozhraní, které by zajistilo potřebnou práci s kategoriemi. Tehdy jsem si myslel, že za týden nebo dva mohu napsat prototyp pomocí Pythonu nebo Bash, a pak bude třeba vyvinout grafické rozhraní v Qt nebo GTK. Realita, jak už to bývá, byla mnohem drsnější, a vývoj se protáhl.

Původní myšlenka spočívala především v tom, vytvořit program s pohodlným a stručným rozhraním příkazového řádku, který by vytvářel, odstraňoval kategorie, přiřazoval kategorie souborům a odstraňoval kategorie z souborů. Program jsem nazval vitis.

První pokus vytvořit vitis skončilo ničím, protože na práci a institut začalo ubývat hodně času. Druhý pokus byl už něčím: k magisterské práci se podařilo dokončit zamýšlený projekt a dokonce vytvořit prototyp GTK rozhraní. Ale ta verze se ukázala být natolik nespolehlivá a nepohodlná, že bylo nutné mnohé přehodnotit.

Třetí verze jsem už opravdu používal sám velmi dlouhou dobu, rozdělil jsem do kategorií několik tisíc svých souborů. K tomu napomohlo i realizované automatické doplňování bash. Ale některé problémy, jako chybějící automatické kategorie a možnost ukládat soubory se stejným názvem, přetrvávaly, a program už se hroutil pod vlastní složitostí. Tak jsem došel k potřebě řešit problémy vývoje složitého softwaru: napsat podrobné požadavky, vyvinout systém funkčního testování, studovat pokyny pro balení a mnoho dalšího. Teď už jsem dospěl k zamýšlenému, takže toto skromné dílo může být představeno svobodnému společenství. Takové specifické řízení souborů, jako je řízení prostřednictvím konceptu kategorií, se dotýká nečekaných otázek a problémů, a v jejich řešení vitis vytvořilo kolem sebe dalších pět projektů, z nichž některé budou v článku zmíněny. Dodnes vitis nemá grafické rozhraní, ale pohodlí používání kategorií souborů z příkazového řádku pro mě již převažuje jakékoli výhody běžného grafického správce souborů.

Příklady použití

Začněme jednoduše — vytvoříme kategorii:

vitis create Hudba

Přidáme do ní například nějakou skladbu:

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

Obsah kategorie „Hudba“ si lze prohlédnout pod příkazem „show“:

vitis show Hudba

Přehrát ji lze pomocí příkazu „open“

vitis open Hudba

Vzhledem k tomu, že máme v kategorii „Hudba“ pouze jeden soubor, spustí se jen on. Pro účely otevírání souborů v jejich výchozích programech jsem vytvořil samostatnou utilitu vts-fs-open (standardní prostředky jako xdg-open nebo mimeopen mi z různých důvodů nevyhovovaly; ale pokud chcete, v nastavení můžete zadat jinou utilitu pro univerzální otevírání souborů). Tato utilita funguje dobře na různých distribucích s různými desktopovými prostředími, proto doporučuji nainstalovat ji spolu s vitis.

Můžete také přímo určit program pro otevření souborů:

vitis open Hudba --app qmmp

Kategorie místo adresářů, nebo Sémantický souborový systém pro Linux

Vytvoříme další kategorie a přidáme soubory pomocí „assign“. Pokud jsou soubory přiřazeny do dosud neexistujících kategorií, obdržíte dotaz na jejich vytvoření. Zbytečnému dotazu se lze vyhnout, pokud použijete přepínač —yes.

vitis assign Programování R -f "Úvod do R.pdf" "Statistický balík R: teorie pravděpodobnosti a matstatistika.pdf" --yes

Nyní chceme přidat souboru „Statistický balík R: teorie pravděpodobnosti a matstatistika.pdf“ kategorii „Matematika“. Víme, že tento soubor již má kategorii „R“, a proto můžeme použít kategorický cestu z Vitis systému:

vitis assign Matematika -v "R/Statistický balík R: teorie pravděpodobnosti a matstatistika.pdf"

Naštěstí nám automatické dokončování bash umožní to snadno udělat.

Podívejme se, co jsme získali, pomocí přepínače —categories, abychom viděli seznam kategorií u každého souboru:

vitis show R --categories

Kategorie místo adresářů, nebo Sémantický souborový systém pro Linux

Všimněte si, že souborům byly také přiděleny automatické kategorie podle formátu, typu (sloučuje formáty) a přípony souborů. Tyto kategorie lze na požádání vypnout. Později nutně provedu lokalizaci jejich názvů.

Přidáme pro rozmanitost do „Matematiky“ ještě něco:

vitis assign Matematika -f "Matematická analýza - 1984.pdf" Perelman_Zábavná_matematika_1927.djvu 

A teď to začne být zajímavé. Místo kategorií lze psát výrazy s operacemi sjednocení, průniku a rozdílu, tedy využívat operace nad množinami. Například průnik „Matematiky“ s „R“ dá v výsledku jeden soubor.

vitis show R i: Matematika

Odečteme z „Matematiky“ zmínky o jazyce „R“:

vitis show Matematika R #nebo vitis show Matematika c: R

Můžeme bezcílně spojit hudbu a jazyk R:

vitis show Hudba u: R

Přepínač -n umožňuje „vytáhnout“ z výsledku dotazu požadované soubory podle čísel a/nebo rozsahů, například, -n 3-7, nebo něco složitějšího: -n 1,5,8-10,13. Často je užitečné to s podpříkazem open, což umožňuje otvírat požadované soubory ze seznamu.

Kategorie místo adresářů, nebo Sémantický souborový systém pro Linux

I když se vzdáváme používání běžné hierarchie adresářů, často je užitečné mít vnořené kategorie. Vytvoříme podkategorii „Statistika“ v kategorii „Matematika“ a přidáme tuto kategorii vhodnému souboru:

vitis create Matematika/Statisitka

vitis assign Matematika/Statisitka -v "R/Úvod do R.pdf"

vitis show Matematika --categories

Kategorie místo adresářů, nebo Sémantický souborový systém pro Linux

Můžeme vidět, že tento soubor nyní má kategorii 'Matematika/Statisitka' místo 'Matematika' (zbytečné odkazy jsou sledovány).

Odkazování na plnou cestu může být nepohodlné, vytvořme 'globální' alias:

vitis assign Matematika/Statisitka -a Statistika

vitis show Statistika

Kategorie místo adresářů, nebo Sémantický souborový systém pro Linux

Nejen běžné soubory

Internetové odkazy

Pro zjednodušení uchovávání jakýchkoli informací by bylo užitečné alespoň kategorizovat odkazy na internetové zdroje. A to je možné:

vitis assign Habr Barevná anomálie -i https://habr.com/ru/company/sfe_ru/blog/437304/ --yes

Na speciálním místě bude vytvořen soubor s nadpisem HTML stránky a s příponou .desktop. To je tradiční formát zástupce v GNU/Linux. Takové zástupce získávají automatickou kategorii NetworkBookmarks.

Jasně, zástupce se vytvářejí, aby se používaly:

vitis open Barevná anomálie

Provádění příkazu vede k otevření v prohlížeči právě uloženého odkazu. Kategorizované zástupce na internetové zdroje mohou sloužit jako náhrada za záložky v prohlížeči.

Úryvky souborů

Také je užitečné mít kategorie pro jednotlivé úryvky souborů. Není to špatný návrh, co? Ale aktuální implementace se zatím týká pouze běžných textových souborů, audio- a video souborů. Řekněme, že potřebujete označit určitou část nějakého koncertu nebo vtipný moment ve filmu, pak při použití assign můžete využít přepínače --fragname, --start, --finish. Uložíme úvodní sekvenci z 'Kachních příběhů':

vitis assign vitis assign -c Úvodní sekvence -f Duck_Tales/s01s01.avi --finish 00:00:59 --fragname "Úvod Kachních příběhů"

vitis open Úvodní sekvence

Ve skutečnosti k žádnému oříznutí souborů nedochází, místo toho se vytvoří soubor-ukazatel na fragment, ve kterém je popsán typ souboru, cesta k souboru, začátek a konec fragmentu. Vytváření a otevírání ukazatelů na fragmenty je delegováno na nástroje, které jsem speciálně vytvořil pro tyto účely — to jsou mediafragmenter a fragplayer. První vytváří, druhý otevírá. V případě audio- a videozáznamů se spuštění mediálního souboru od určitého bodu do určitého bodu provádí pomocí přehrávače VLC, takže ten musí být také v systému. Zpočátku jsem chtěl udělat to na základě mplayera, ale tam to bylo z nějakého důvodu velmi problematické s polohováním v potřebném okamžiku.
V našem příkladu se vytvoří soubor „Duck Tales intro.fragpointer“ (umístěný na speciálním místě) a poté se přehraje fragment od začátku souboru (protože –start nebylo při vytváření uvedeno) až do značky v 59 sekundách, po čemž se VLC zavře.

Jiný příklad — rozhodli jsme se kategorizovat jednotlivé vystoupení na koncertu nějakého známého umělce:

vitis assign Lepš "Spasite naše duše" -f Grigorij Lepc - Koncert Párus - písně Vladimira Vysockého.mp4 --fragname "Spasite naše duše" --start 00:32:18 --finish 00:36:51

vitis open "Spasite naše duše"

Při otevření bude soubor zahrnut na správné pozici a po čtyřech a půl minutách se zavře.

Jak to všechno funguje + další možnosti

Ukládání kategorií

Na začátku plánování organizace sémantického souborového systému mě napadly tři způsoby: skrze uchovávání symbolických odkazů, pomocí databáze, a popisem v XML. První způsob zvítězil, protože je na jedné straně jednoduchý na realizaci, a na druhé straně uživatel má možnost vidět kategorie přímo z souborového systému (což je pohodlné a důležité). Na začátku používání vitis v domácím adresáři uživatele se vytváří adresář „Vitis“ a konfigurační soubor „.config/vitis/vitis.conf“. V ~ /Vitis se vytvářejí adresáře odpovídající kategoriím, a v těchto adresářích-kategoriích se vytvářejí symbolické odkazy na originální soubory. Přezdívky kategorií jsou také jen odkazy na ně. Samozřejmě, přítomnost adresáře „Vitis“ v domovském adresáři nemusí někoho uspokojovat. Můžeme se přepnout na jakékoli jiné místo:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

V určitém okamžiku se ukáže, že rozptýlené soubory na různých místech nemá příliš smysl kategorizovat, protože jejich umístění se může měnit. Proto jsem si nejprve vytvořil adresář, kam jsem nahromadil vše a dal tomu vše kategorie. Poté jsem se rozhodl, že by bylo dobré tento moment formálně zpracovat na programové úrovni. Tak se objevila myšlenka „souborného prostoru“. Na začátku používání vitis hned nebylo na škodu nastavit takové místo (tam budou ukládány všechny potřebné soubory) a zapnout automatické ukládání:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Bez automatického ukládání při použití podpříkazu „assign“ bude potřeba příznak —save, pokud budete chtít uložit přidávaný soubor do souborového prostoru.

Kromě toho lze přidat několik souborových prostorů a měnit jejich priority, což může být užitečné, když je souborů velmi mnoho a jsou uloženy na různých nosičích. Tuto možnost zde nebudu zpracovávat, podrobnosti si můžete přečíst v nápovědě programu.

Migrace semantického souborového systému

Ať už tak či onak, adresář Vitis a souborové prostory mohou teoreticky občas měnit místo. Abych je uvedl do funkčního stavu, vytvořil jsem samostatnou utilitu link-editor, která může masově upravovat odkazy, nahrazující části cest jinými:

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

V prvním případě, když jsme se přesunuli z /mnt/MyFavoriteDisk/Vitis/ do domácího adresáře, se upravují symbolické odkazy spojené s aliasy. Ve druhém případě, po změně umístění souborového prostoru, se mění všechny odkazy ve Vitis na nové podle žádosti o výměnu části jejich cesty.

Automatické kategorie

Pokud spustíte příkaz vitis service get autocategorization, můžete vidět, že je ve výchozím nastavení nastavena automatická kategorizace podle formátu (Format a Type) a přípony souborů (Extension).

To je užitečné, když potřebujete například něco najít mezi PDF dokumenty nebo zkontrolovat, co máte uloženo ve formátech EPUB a FB2, můžete jednoduše provést dotaz

vitis show Format/MOBI u: Format/FB2

Stalo se tak, že standardní nástroje GNU/Linux, jako jsou file nebo mimetype, mě neuspokojily, protože ne vždy správně určily formát. Musel jsem vyvinout vlastní implementaci na základě signatur souborů a přípon. Téma určení formátů souborů je vlastně zajímavé a zaslouží si samostatný článek. Mohu říct, že možná ne pro všechny formáty světa jsem zajistil spolehlivé rozpoznávání, ale celkově už nyní to funguje docela dobře. Vzhledem k tomu, že formát EPUB je nyní určen jako ZIP (což je do určité míry oprávněné, ale v praxi to nelze považovat za normální chování), zatím tuto funkci považujte za experimentální a hlaste chyby. V podivných situacích je vždy možné využít kategorie podle přípon souborů, například Extension/epub.

Pokud jsou zapnuty automatické kategorie podle formátu, jsou také zahrnuty automatické kategorie, které spojují některé formáty do typů: „Archivy“, „Obrázky“, „Video“, „Audio“ a „Dokumenty“. Pro tyto podkategorie budou také vytvořena lokalizovaná názvy.

O čem se nemluví

vitis stal se velmi univerzálním nástrojem a těžko to všechno pokrýt najednou. Krátce zmíním, co ještě lze dělat:

  • kategorie lze odstraňovat a odstraňovat je od souborů;
  • výsledky dotazů podle výrazů lze kopírovat do zadaného adresáře;
  • soubory lze spouštět jako programy;
  • příkaz show má mnoho voleb, například třídění podle jména/data změny nebo přístupu/velikosti/přípony, zobrazení vlastností souborů a cest k originálům, zahrnutí zobrazení skrytých souborů a další;
  • při ukládání odkazů na internetové zdroje lze také ukládat místní kopie HTML stránek.

Všechny podrobnosti lze najít v uživatelské příručce.

Vyhlídky

Často skeptici říkají, že „nikdo si tyto tagy sám rozmístit nenechá“. Můžu to na svém příkladu vyvrátit: již jsem kategorizoval více než šest tisíc souborů, vytvořil více než tisíc kategorií a aliasů a stálo to za to. Když jedním příkazem vitis open Plán otevřete seznam svých úkolů, nebo když jedním příkazem vitis open LaTeX otevřete knihu Stolyarova o systému typografie LaTeX, už je morálně těžké používat souborový systém „po staru“.

Na tomto základě vzniká řada nápadů. Například by bylo možné vytvořit automatické rádio, které přehrává tematickou hudbu podle aktuálního počasí, svátku, dne v týdnu, denní doby nebo ročního období. Další možností je hudební přehrávač, který zná kategorie a může přehrávat hudbu podle výrazů s operacemi nad kategoriemi jako nad množinami. Bylo by užitečné vytvořit démon, který sleduje složku „Downloads“ a navrhuje kategorizovat nové soubory. A samozřejmě by bylo dobré vytvořit normální grafický semantický správce souborů. Kdysi jsem dokonce vytvořil pro podnik webovou službu pro kolektivní používání souborů, ale ta nebyla prioritou a stala se neaktuální, i když dosáhla vysoké úrovně funkčnosti. (Vzhledem k velkým změnám se samotného vitis, už není použitelný.)

zde malá ukázka

Kategorie místo adresářů, nebo Sémantický souborový systém pro Linux

Závěr

Vitis — není to první pokus radikálně změnit styl práce s daty, ale považoval jsem za důležité realizovat své nápady a zveřejnit implementaci pod licencí GNU GPL. Pro pohodlí byl vytvořen deb balíček pro x86-64, měl by fungovat na všech moderních Debian distribucích. Na ARM se objevily drobné komplikace (přitom všechny ostatní programy související s vitis, fungují normálně), ale v budoucnu bude pro tuto platformu (armhf) sestaven funkční balíček. Vytvářením RPM balíčků jsem zatím přestal zabývat kvůli problémům s Fedora 30 a komplikovanosti rozptýlit se na mnoho RPM distribucí, ale později se i tak pro pár z nich balíčky vytvoří. A zatím můžete používat make && make install nebo checkinstall.

Všem děkuji za pozornost! Doufám, že tento článek a tento projekt budou užitečné.

Odkaz na repozitář projektu

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster