Kategórie namiesto adresárov alebo sémantický súborový systém pre Linux

Samotná klasifikácia údajov je zaujímavou témou výskumu. Milujem zhromažďovanie informácií, ktoré sa zdajú potrebné, a vždy som sa snažil vytvárať logické hierarchie adresárov pre svoje súbory a jedného dňa som vo sne uvidel krásny a pohodlný program na priraďovanie značiek k súborom a rozhodol som sa, že nemôžem žiť takto ďalej.

Problém hierarchických súborových systémov

Používatelia sa často stretávajú s problémom výberu, kam uložiť ďalší nový súbor a problémom s nájdením vlastných súborov (niekedy nie sú názvy súborov vôbec určené na to, aby si ich človek zapamätal).

Východiskom zo situácie môžu byť sémantické súborové systémy, ktoré sú zvyčajne doplnkom k tradičnému súborovému systému. Adresáre v nich sú nahradené sémantickými atribútmi, nazývanými aj tagy, kategórie a metadáta. Termín „kategória“ budem používať častejšie, pretože... V kontexte súborových systémov je slovo „tag“ niekedy trochu zvláštne, najmä keď sa objavia „subtags“ a „tag aliasy“.

Priraďovanie kategórií súborom do značnej miery eliminuje problém s ukladaním a vyhľadávaním súboru: ak si pamätáte (alebo hádate) aspoň jednu z kategórií priradených k súboru, súbor nikdy nezmizne z dohľadu.

Predtým bola táto téma nastolená viackrát na Habré (čas, два, tri, štyri atď.), tu popisujem moje riešenie.

Cesta k realizácii

Hneď po spomínanom sne som v zápisníku opísal príkazové rozhranie, ktoré zabezpečuje potrebnú prácu s kategóriami. Potom som sa rozhodol, že za týždeň alebo dva môžem napísať prototyp pomocou Pythonu alebo Bashu a potom budem musieť pracovať na vytvorení grafického shellu v Qt alebo GTK. Realita sa ako vždy ukázala oveľa tvrdšia a vývoj sa oneskoril.

Pôvodnou myšlienkou bolo v prvom rade vytvoriť program s pohodlným a stručným rozhraním príkazového riadka, ktorý by vytváral, mazal kategórie, priraďoval kategórie k súborom a mazal kategórie zo súborov. Volal som program Šepkať.

Prvý pokus o vytvorenie Šepkať neskončilo nič, pretože veľa času sa začalo tráviť prácou a vysokou školou. Druhý pokus už bol niečo: pre diplomovú prácu sa mi podarilo dokončiť plánovaný projekt a dokonca vyrobiť prototyp plášťa GTK. Ukázalo sa však, že táto verzia je taká nespoľahlivá a nepohodlná, že bolo potrebné veľa prehodnotiť.

Tretiu verziu som skutočne používal veľmi dlho, keď som preniesol niekoľko tisíc súborov do kategórií. Tomu výrazne uľahčila aj realizovaná dostavba bashu. Niektoré problémy, ako napríklad nedostatok automatických kategórií a schopnosť ukladať súbory s rovnakým názvom, však stále pretrvávali a program sa už ohýbal pod svoju vlastnú zložitosť. Takto som dospel k potrebe riešiť zložité problémy s vývojom softvéru: napísať podrobné požiadavky, vyvinúť funkčný testovací systém, preštudovať si návod na balenie a mnoho iného. Teraz som dospel k svojmu plánu, aby sa tento skromný výtvor mohol predstaviť slobodnej komunite. Špecifická správa súborov, ako je správa prostredníctvom konceptu kategórií, vyvoláva neočakávané problémy a problémy a pri ich riešení Šepkať splodil okolo seba ďalších päť projektov, z ktorých niektoré budú spomenuté v článku. Do teraz Šepkať Nekúpil som si grafický shell, ale pohodlie používania kategórií súborov z príkazového riadku pre mňa už prevažuje nad všetkými výhodami bežného správcu grafických súborov.

Príklady použitia

Začnime jednoducho – vytvorte kategóriu:

vitis create Музыка

Pridajme k tomu nejaké zloženie ako príklad:

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

Obsah kategórie „Hudba“ môžete zobraziť pomocou podpríkazu „show“:

vitis show Музыка

Môžete ho prehrať pomocou podpríkazu „open“.

vitis open Музыка

Pretože Ak máme v kategórii „Hudba“ iba jeden súbor, spustí sa iba tento. Na účely otvárania súborov pomocou ich predvolených programov som vytvoril samostatný nástroj vts-fs-open (štandardné nástroje ako xdg-open alebo mimeopen mi z viacerých dôvodov nevyhovovali, ale ak niečo, v nastaveniach si môžete určiť inú pomôcku na univerzálne otváranie súborov). Tento nástroj funguje dobre na rôznych distribúciách s rôznymi pracovnými prostrediami, takže ho odporúčam nainštalovať spolu s vitis.

Môžete tiež priamo určiť program na otváranie súborov:

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

Kategórie namiesto adresárov alebo sémantický súborový systém pre Linux

Poďme vytvoriť ďalšie kategórie a pridať súbory pomocou „priradiť“. Ak sú súbory zaradené do kategórií, ktoré ešte neexistujú, zobrazí sa výzva na ich vytvorenie. Nepotrebnej požiadavke sa dá vyhnúť použitím príznaku -yes.

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

Teraz chceme pridať kategóriu „Matematika“ do súboru „Štatistický balík R: teória pravdepodobnosti a matematická štatistika.pdf“. Vieme, že tento súbor je už kategorizovaný ako „R“, a preto môžeme použiť cestu kategórie zo systému Vitis:

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

Našťastie to uľahčuje dokončenie bashu.

Pozrime sa, čo sa stalo, pomocou príznaku --categories zobrazíme zoznam kategórií pre každý súbor:

vitis show R --categories

Kategórie namiesto adresárov alebo sémantický súborový systém pre Linux

Upozorňujeme, že súbory boli tiež automaticky kategorizované podľa formátu, typu (kombinuje formáty) a prípony súboru. Tieto kategórie je možné v prípade potreby deaktivovať. Neskôr ich mená určite lokalizujem.

Pridajme k „matematike“ ešte niečo pre spestrenie:

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

A teraz sú veci zaujímavé. Namiesto kategórií môžete písať výrazy s operáciami zjednotenia, prieniku a odčítania, teda použiť operácie na množinách. Napríklad priesečník "Math" s "R" bude mať za následok jeden súbor.

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

Odčítajme odkazy na jazyk „R“ od „matematiky“:

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

Môžeme bezcieľne kombinovať hudbu a jazyk R:

vitis show Музыка u: R

Príznak -n vám umožňuje „vytiahnuť“ požadované súbory z výsledku požiadavky podľa čísel a/alebo rozsahov, napr. -n 3-7alebo niečo zložitejšie: -n 1,5,8-10,13. Často je to užitočné s podpríkazom open, ktorý vám umožňuje otvoriť požadované súbory zo zoznamu.

Kategórie namiesto adresárov alebo sémantický súborový systém pre Linux

Aj keď sa vzďaľujeme od používania konvenčnej hierarchie adresárov, často je užitočné mať vnorené kategórie. Vytvorme podkategóriu „Štatistika“ v kategórii „Matematika“ a pridáme túto kategóriu do príslušného súboru:

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

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

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

Kategórie namiesto adresárov alebo sémantický súborový systém pre Linux

Vidíme, že tento súbor má teraz kategóriu „Math/Statistics“ namiesto „Math“ (sledujú sa ďalšie odkazy).

Adresovanie celej cesty môže byť nepohodlné, vytvorme si „globálny“ alias:

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

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

Kategórie namiesto adresárov alebo sémantický súborový systém pre Linux

Nielen bežné súbory

Internetové odkazy

Na zjednotenie ukladania akýchkoľvek informácií by bolo užitočné minimálne kategorizovať odkazy na internetové zdroje. A toto je možné:

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

Na špeciálnom mieste sa vytvorí súbor s hlavičkou HTML stránky a príponou .desktop. Toto je tradičný formát skratiek v GNU/Linux. Takéto skratky sú automaticky kategorizované ako NetworkBookmarks.

Prirodzene, skratky sú vytvorené na použitie:

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

Vykonaním príkazu sa v prehliadači otvorí novo uložený odkaz. Kategorizované skratky k internetovým zdrojom môžu slúžiť ako náhrada za záložky prehliadača.

Fragmenty súborov

Je tiež užitočné mať kategórie pre jednotlivé časti súborov. Nie je to zlá požiadavka, však? Súčasná implementácia však zatiaľ ovplyvňuje iba obyčajné textové súbory, zvukové a video súbory. Povedzme, že potrebujete označiť určitú časť koncertu alebo vtipný moment vo filme, potom pri použití priradiť môžete použiť príznaky -fragname, -start, -finish. Uložme šetrič obrazovky z "DuckTales":

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

vitis open Заставки

V skutočnosti nedochádza k žiadnemu orezaniu súboru, namiesto toho sa vytvorí súbor ukazovateľa na fragment, ktorý popisuje typ súboru, cestu k súboru, začiatok a koniec fragmentu. Vytváranie a otváranie ukazovateľov na fragmenty je delegované na nástroje, ktoré som špeciálne vytvoril pre tieto účely - sú to mediafragmenter a fragplayer. Prvý vytvára, druhý otvára. V prípade audio a video nahrávok sa mediálny súbor spúšťa z určitej do určitej pozície pomocou VLC prehrávača, preto musí byť aj v systéme. Najprv som to chcel urobiť na základe mplayeru, ale z nejakého dôvodu to veľmi pokrivkávalo polohovaním v správnom momente.
V našom príklade sa vytvorí súbor „Duck Tales intro.fragpointer“ (umiestni sa na špeciálne miesto) a potom sa prehrá fragment od začiatku súboru (keďže pri vytváraní nebolo zadané –štart) až do 59. druhá značka, po ktorej sa VLC zatvorí .

Ďalším príkladom je situácia, keď sme sa rozhodli kategorizovať jedno vystúpenie na koncerte známeho umelca:

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

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

Po otvorení sa súbor zaradí na požadovanú pozíciu a po štyroch a pol minútach sa zatvorí.

Ako to celé funguje + ďalšie funkcie

Ukladanie kategórií

Na samom začiatku uvažovania o organizácii sémantického súborového systému prišli na rad tri spôsoby: cez uloženie symbolických odkazov, cez databázu, cez popis v XML. Prvý spôsob vyhral, ​​pretože... na jednej strane je to jednoduché na implementáciu a na druhej strane má používateľ možnosť pozerať sa na kategórie priamo zo súborového systému (a to je pohodlné a dôležité). Na začiatku používania Šepkať Adresár „Vitis“ a konfiguračný súbor „.config/vitis/vitis.conf“ sú vytvorené v domovskom adresári používateľa. Adresáre zodpovedajúce kategóriám sa vytvárajú v ~/Vitis a v týchto adresároch kategórií sa vytvárajú symbolické odkazy na pôvodné súbory. Aliasy kategórií sú tiež len odkazy na ne. Prítomnosť adresára „Vitis“ v domovskom adresári samozrejme nemusí niektorým ľuďom vyhovovať. Môžeme prejsť na akékoľvek iné miesto:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

V určitom bode sa ukáže, že nemá zmysel kategorizovať súbory roztrúsené na rôznych miestach, pretože ich umiestnenie sa môže meniť. Preto som si na začiatok vytvoril pre seba adresár, kde som hlúpo všetko vysypal a dal som tomu všetky kategórie. Potom som sa rozhodol, že by bolo pekné formalizovať tento moment na programovej úrovni. Takto sa objavil koncept „priestoru súborov“. Na začiatku používania Šepkať Nebolo by na škodu okamžite nastaviť takéto umiestnenie (budú tam uložené všetky súbory, ktoré potrebujeme) a povoliť automatické ukladanie:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Bez automatického ukladania sa pri použití podpríkazu "assign" bude vyžadovať príznak --save, ak chcete uložiť pridaný súbor do súborového priestoru.

Okrem toho môžete pridať niekoľko súborových priestorov a zmeniť ich priority, čo môže byť užitočné, keď existuje veľa súborov a sú uložené na rôznych médiách. Túto možnosť tu nebudem zvažovať, podrobnosti nájdete v pomocníkovi programu.

Migrácia sémantického systému súborov

Každopádne, adresár Vitis a súborové priestory sa teoreticky niekedy môžu presúvať z miesta na miesto. Aby to fungovalo, vytvoril som samostatnú utilitu editor odkazov, ktorý môže hromadne upravovať odkazy a nahrádzať časti cesty iný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 prvom prípade, keď sme sa presunuli z /mnt/MyFavoriteDisk/Vitis/ do domovského adresára, upravia sa symbolické odkazy spojené s aliasmi. V druhom prípade sa po zmene umiestnenia súborového priestoru všetky odkazy vo Vitis zmenia na nové v súlade s požiadavkou nahradiť časť ich cesty.

Automatické kategórie

Ak spustíte príkaz vitis service get autocategorization, môžete vidieť, že v predvolenom nastavení sú automatické kategórie priradené podľa formátu (Formát a typ) a prípony súboru (Prípona).

To je užitočné, keď napríklad potrebujete nájsť niečo medzi PDF alebo sa pozrieť, čo máte uložené z EPUB a FB2, jednoducho spustíte požiadavku

vitis show Format/MOBI u: Format/FB2

Stalo sa, že štandardné nástroje GNU/Linuxu ako file alebo mimetype mi nevyhovovali práve preto, že nie vždy správne určia formát, musel som si spraviť vlastnú implementáciu založenú na podpisoch súborov a príponách. Vo všeobecnosti je téma definovania formátov súborov zaujímavou témou na výskum a zaslúži si samostatný článok. Zatiaľ môžem povedať, že som možno neposkytol skutočné uznanie pre všetky formáty na svete, ale vo všeobecnosti to už funguje dobre. Pravda, EPUB teraz definuje formát ako ZIP (vo všeobecnosti je to opodstatnené, ale v praxi by sa to nemalo považovať za normálne správanie). Zatiaľ považujte túto funkciu za experimentálnu a nahláste všetky chyby. V zvláštnych situáciách môžete vždy použiť kategórie prípon súborov, napríklad Extension/epub.

Ak sú povolené automatické kategórie podľa formátu, sú povolené aj automatické kategórie, ktoré zoskupujú niektoré formáty podľa typu: „Archívy“, „Obrázky“, „Video“, „Zvuk“ a „Dokumenty“. Pre tieto podkategórie sa vytvoria aj lokalizované názvy.

Čo sa nehovorí

Šepkať Ukázalo sa, že je to veľmi mnohostranný nástroj a je ťažké pokryť všetko naraz. Dovoľte mi stručne spomenúť, čo ešte môžete urobiť:

  • kategórie môžu byť odstránené a odstránené zo súborov;
  • výsledky výrazových dotazov možno skopírovať do určeného adresára;
  • súbory možno spúšťať ako programy;
  • Príkaz show má veľa možností, napríklad triedenie podľa názvu/dátumu úpravy alebo prístupu/veľkosti/prípony, zobrazenie vlastností súboru a cesty k originálom, povolenie zobrazenia skrytých súborov atď.;
  • Keď uložíte odkazy na internetové zdroje, môžete uložiť aj lokálne kópie stránok HTML.

Všetky podrobnosti nájdete v používateľskej pomoci.

Vyhliadky

Skeptici často hovoria, že „nikto tieto značky nenastaví sám“. Na vlastnom príklade môžem dokázať opak: už som kategorizoval viac ako šesťtisíc súborov, vytvoril viac ako tisíc kategórií a aliasov a stálo to za to. Keď jeden tím vitis open План otvorte zoznam úloh alebo pomocou jedného príkazu vitis open LaTeX Keď otvoríte Stolyarovovu knihu o systéme rozloženia LaTeX, je už morálne ťažké používať súborový systém „staromódnym spôsobom“.

Na tomto základe vzniká množstvo nápadov. Môžete si napríklad vyrobiť automatické rádio, ktoré zapne tematickú hudbu podľa aktuálneho počasia, sviatku, dňa v týždni, dennej doby či roku. Ešte bližšie k téme je hudobný prehrávač, ktorý sa vyzná v kategóriách a vie prehrávať hudbu výrazom s operáciami nad kategóriami ako s množinami. Je užitočné vytvoriť démona, ktorý bude sledovať adresár „Downloads“ a ponúkne kategorizáciu nových súborov. A, samozrejme, mali by sme urobiť normálneho grafického sémantického správcu súborov. Kedysi som dokonca vytvoril webovú službu pre podnik na kolektívne používanie súborov, ale nebolo to prioritou a stalo sa irelevantným, hoci dosahovala vysokú úroveň výkonu. (Vzhľadom na veľké zmeny v Šepkať, už nie je použiteľný.)

tu je malá ukážka

Kategórie namiesto adresárov alebo sémantický súborový systém pre Linux

Záver

vitis nie je prvým pokusom o radikálnu zmenu štýlu práce s dátami, no považoval som za dôležité svoje nápady zrealizovať a implementáciu sprístupniť verejnosti pod licenciou GNU GPL. Pre pohodlie bol pre x86-64 vytvorený balík deb, ktorý by mal fungovať na všetkých moderných distribúciách Debianu. Na ARM sa vyskytli menšie problémy (zatiaľ čo všetky ostatné programy sa týkali Šepkať, funguje dobre), ale v budúcnosti bude pre túto platformu zostavený pracovný balík (armhf). Nateraz som prestal vytvárať RPM balíčky kvôli problémom vo Fedore 30 a ťažkostiam pri šírení v mnohých RPM distribúciách, ale neskoršie balíčky budú stále vytvorené aspoň pre pár z nich. Medzitým môžete použiť make && make install alebo checkinstall.

Ďakujem vám všetkým za pozornosť! Dúfam, že tento článok a tento projekt môžu byť užitočné.

Odkaz na úložisko projektu

Zdroj: hab.com

Pridať komentár