Kataloogide asemel kategooriad või Linuxi semantiline failisüsteem

Andmete klassifitseerimine ise on huvitav uurimisteema. Mulle meeldib koguda teavet, mis tundub vajalik, ja olen alati püüdnud luua oma failidele loogilisi kataloogihierarhiaid ning ühel päeval nägin unes ilusat ja mugavat programmi failidele siltide määramiseks ning otsustasin, et ma ei saa elada. niimoodi enam.

Hierarhiliste failisüsteemide probleem

Sageli seisavad kasutajad silmitsi järgmise uue faili salvestamise koha valiku ja oma failide leidmise probleemiga (mõnikord pole failinimed üldse mõeldud inimesele meelde jätmiseks).

Väljapääs olukorrast võib olla semantilised failisüsteemid, mis on tavaliselt traditsioonilise failisüsteemi lisand. Nendes olevad kataloogid asendatakse semantiliste atribuutidega, mida nimetatakse ka siltideks, kategooriateks ja metaandmeteks. Kasutan terminit “kategooria” sagedamini, sest... Failisüsteemide kontekstis on sõna "silt" mõnikord veidi kummaline, eriti kui ilmuvad "subtags" ja "tag alias".

Failidele kategooriate määramine välistab suures osas faili salvestamise ja otsimise probleemi: kui mäletate (või arvate) vähemalt ühte failile määratud kategooriat, ei kao fail kunagi vaatest.

Varem tõstatati seda teemat Habré (aeg, два, kolm, neli jne), kirjeldan siin oma lahendust.

Realiseerimise tee

Vahetult pärast mainitud unenägu kirjeldasin oma märkmikus käsuliidest, mis pakub vajalikku tööd kategooriatega. Siis otsustasin, et nädala või paari pärast saan Pythoni või Bashi abil prototüübi kirjutada ja siis pean tegelema graafilise kesta loomisega Qt-s või GTK-s. Tegelikkus, nagu alati, osutus palju karmimaks ja areng viibis.

Algne idee oli teha eelkõige mugava ja ülevaatliku käsurea liidesega programm, mis looks, kustutaks kategooriaid, määraks failidele kategooriaid ja kustutaks failidest kategooriaid. Helistasin programmi Sosista.

Esimene katse luua Sosista ei lõppenud millegagi, kuna palju aega hakati kulutama tööle ja kolledžile. Teine katse oli juba midagi: magistritöö jaoks õnnestus mul planeeritud projekt valmis teha ja isegi GTK kesta prototüüp teha. Kuid see versioon osutus nii ebausaldusväärseks ja ebamugavaks, et tuli palju ümber mõelda.

Kolmandat versiooni kasutasin tegelikult ise väga pikka aega, olles mitu tuhat oma faili kategooriatesse üle kandnud. Seda hõlbustas oluliselt ka rakendatud bashi lõpetamine. Kuid mõned probleemid, nagu automaatsete kategooriate puudumine ja samanimeliste failide salvestamise võimalus, jäid siiski alles ja programm oli juba oma keerukuse alla painutatud. Nii jõudsin vajaduseni lahendada keerukaid tarkvaraarenduse probleeme: kirjutada üksikasjalikud nõuded, töötada välja funktsionaalse testimise süsteem, uurida pakendi juhiseid ja palju muud. Olen nüüd jõudnud oma plaanini, et seda alandlikku loomingut vabale kogukonnale esitleda. Spetsiifiline failihaldus, näiteks haldamine kategooriate kontseptsiooni kaudu, tekitab ootamatuid probleeme ja probleeme ning nende lahendamisel Sosista sünnitas enda ümber veel viis projekti, millest mõnda artiklis mainitakse. Kuni praeguseni Sosista Ma ei ole ostnud graafilist kesta, kuid käsurealt failikategooriate kasutamise mugavus kaalub minu jaoks juba üles tavalise graafilise failihalduri eelised.

Kasutamise näited

Alustame lihtsast – looge kategooria:

vitis create Музыка

Lisame sellele näitena mõne kompositsiooni:

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

Kategooria "Muusika" sisu saate vaadata alamkäsu "show" abil:

vitis show Музыка

Saate seda mängida "avatud" alamkäsuga.

vitis open Музыка

Sest Kui meil on kategoorias "Muusika" ainult üks fail, käivitub ainult see. Failide avamiseks nende vaikeprogrammidega tegin eraldi utiliidi vts-fs-avatud (tavalised tööriistad, nagu xdg-open või mimeopen, ei sobinud mulle mitmel põhjusel; kuid kui midagi, siis saate sätetes määrata mõne muu utiliidi universaalseks failide avamiseks). See utiliit töötab hästi erinevatel distributsioonidel ja erineva töökeskkonnaga, seega soovitan selle installida koos vitisega.

Samuti saate otse määrata failide avamise programmi:

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

Kataloogide asemel kategooriad või Linuxi semantiline failisüsteem

Loome rohkem kategooriaid ja lisame faile, kasutades funktsiooni "Määra". Kui failid on määratud kategooriatesse, mida veel ei eksisteeri, palutakse teil need luua. Tarbetut taotlust saab vältida lipu -jah abil.

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

Nüüd tahame lisada kategooria “Matemaatika” faili “Statistiline pakett R: tõenäosusteooria ja matemaatiline statistika.pdf”. Teame, et see fail on juba kategooria "R" ja seetõttu saame kasutada Vitise süsteemi kategooriateed:

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

Õnneks muudab bashi lõpetamine selle lihtsaks.

Vaatame, mis juhtus, kasutades lippu --categories, et näha iga faili kategooriate loendit:

vitis show R --categories

Kataloogide asemel kategooriad või Linuxi semantiline failisüsteem

Pange tähele, et failid on automaatselt kategoriseeritud ka vormingu, tüübi (ühendab vormingud) ja faililaiendi järgi. Soovi korral saab need kategooriad keelata. Hiljem lokaliseerin kindlasti nende nimed.

Lisame “Matemaatikasse” vahelduseks veel midagi:

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

Ja nüüd lähevad asjad huvitavaks. Kategooriate asemel saab avaldisi kirjutada liit-, lõike- ja lahutamistehtega, st kasutada hulkade tehteid. Näiteks "Math" ja "R" ristumisel saadakse üks fail.

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

Lahutagem "matemaatikast" viited keelele "R":

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

Saame sihitult ühendada muusika ja R-keele:

vitis show Музыка u: R

Lipp -n võimaldab päringu tulemusest "välja tõmmata" vajalikud failid näiteks numbrite ja/või vahemike kaupa, -n 3-7või midagi keerulisemat: -n 1,5,8-10,13. Sageli on see kasulik avatud alamkäsuga, mis võimaldab teil soovitud failid loendist avada.

Kataloogide asemel kategooriad või Linuxi semantiline failisüsteem

Kuigi me loobume tavapärase kataloogihierarhia kasutamisest, on sageli kasulik kasutada pesastatud kategooriaid. Loome kategooria "Matemaatika" alla alamkategooria "Statistika" ja lisame selle kategooria vastavasse faili:

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

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

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

Kataloogide asemel kategooriad või Linuxi semantiline failisüsteem

Näeme, et sellel failil on nüüd „Matemaatika” asemel kategooria „Matemaatika/Statistika” (jälgitakse lisalinke).

Kogu tee adresseerimine võib olla ebamugav, loome "globaalse" aliase:

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

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

Kataloogide asemel kategooriad või Linuxi semantiline failisüsteem

Mitte ainult tavalised failid

Interneti-lingid

Mis tahes teabe salvestamise ühtlustamiseks oleks kasulik vähemalt Interneti-ressursside lingid kategoriseerida. Ja see on võimalik:

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

Spetsiaalsesse kohta luuakse fail HTML-lehe päise ja laiendiga .desktop. See on GNU/Linuxi traditsiooniline otseteevorming. Sellised otseteed liigitatakse automaatselt võrgujärjehoidjateks.

Loomulikult luuakse otseteed kasutamiseks:

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

Käsu täitmine põhjustab äsja salvestatud lingi avamise brauseris. Interneti-allikate liigitatud otseteed võivad asendada brauseri järjehoidjaid.

Faili fragmendid

Samuti on kasulik omada kategooriaid üksikute failide jaoks. Pole paha palve, eks? Kuid praegune rakendamine mõjutab seni ainult lihttekstifaile, heli- ja videofaile. Oletame, et filmis on vaja ära märkida mingi kontserdi osa või naljakas hetk, siis assigneeringu kasutamisel saab kasutada lippe -fragname, -start, -finish. Salvestage ekraanisäästja "DuckTalesist":

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

vitis open Заставки

Tegelikkuses faili lõikamist ei toimu, selle asemel luuakse fragmendile osutifail, mis kirjeldab failitüüpi, faili teed, fragmendi algust ja lõppu. Fragmentidele viitade loomine ja avamine on delegeeritud utiliitidele, mille ma spetsiaalselt selleks otstarbeks tegin - need on mediafragmenter ja fragplayer. Esimene loob, teine ​​avaneb. Heli- ja videosalvestiste puhul käivitatakse meediumifail VLC-mängija abil kindlast kohast kindlasse kohta, seega peab see ka süsteemis olema. Alguses tahtsin seda teha mplayeri baasil, kuid miskipärast jäi see õigel hetkel positsioneerimisega väga viltu.
Meie näites luuakse fail “Duck Tales intro.fragpointer” (see asetatakse spetsiaalsesse kohta) ja seejärel esitatakse fragment faili algusest (kuna –start ei olnud loomisel määratud) kuni 59. teine ​​märk, mille järel VLC sulgub .

Teine näide on see, kui otsustasime kategoriseerida ühe kuulsa artisti kontserdil esinemise:

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

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

Avamisel kaasatakse fail soovitud asukohta ja suletakse nelja ja poole minuti pärast.

Kuidas see kõik töötab + lisafunktsioonid

Kategooriate salvestamine

Semantilise failisüsteemi korraldamise üle mõtlemise alguses tulid meelde kolm võimalust: läbi sümboolsete linkide salvestamise, läbi andmebaasi, läbi XML-i kirjelduse. Esimene meetod võitis, sest... ühelt poolt on seda lihtne juurutada, teisalt on kasutajal võimalus vaadata kategooriaid otse failisüsteemist (ja see on mugav ja oluline). Kasutamise alguses Sosista Kataloog “Vitis” ja konfiguratsioonifail “.config/vitis/vitis.conf” luuakse kasutaja kodukataloogis. Kategooriatele vastavad kataloogid luuakse kaustas ~/Vitis ja nendesse kategooriakataloogidesse sümboolsed lingid originaalfailidele. Kategooriate varjunimed on samuti vaid lingid neile. Muidugi ei pruugi kataloogi “Vitis” olemasolu kodukataloogis mõnele inimesele sobida. Saame lülituda mis tahes muusse asukohta:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

Teatud hetkel saab selgeks, et erinevatesse kohtadesse hajutatud failide kategoriseerimine pole mõtet, kuna nende asukoht võib muutuda. Seetõttu lõin alustuseks endale kataloogi, kuhu kõik rumalalt maha viskasin ja kõik kategooriad andsin. Siis otsustasin, et oleks tore see hetk programmi tasemel vormistada. Nii tekkis mõiste "failiruum". Kasutamise alguses Sosista Ei teeks paha sellise asukoha kohe seadistamine (seal salvestatakse kõik vajalikud failid) ja automaatse salvestamise lubamine:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Ilma automaatse salvestamiseta on alamkäsu "assign" kasutamisel vaja --save lippu, kui soovite salvestada lisatud faili failiruumi.

Lisaks saate lisada mitu failiruumi ja muuta nende prioriteete; see võib olla kasulik, kui faile on palju ja need on salvestatud erinevatele andmekandjatele. Ma ei kaalu seda võimalust siin, üksikasjad leiate programmi abist.

Semantilise failisüsteemi migreerimine

Igatahes võivad Vitise kataloog ja failiruumid teoreetiliselt mõnikord liikuda ühest kohast teise. Selle toimimiseks lõin eraldi utiliidi link-redaktor, mis saab linke hulgi muuta, asendades tee osad teistega:

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

Esimesel juhul redigeeritakse varjunimedega seotud sümboolseid linke pärast seda, kui oleme kataloogist /mnt/MyFavoriteDisk/Vitis/ liikunud kodukataloogi. Teisel juhul muudetakse pärast failiruumi asukoha muutmist kõik Vitis olevad lingid uuteks vastavalt taotlusele asendada osa nende teest.

Automaatsed kategooriad

Kui käivitate käsu vitis service get autocategorization, näete, et vaikimisi määratakse automaatsed kategooriad vormingu (vorming ja tüüp) ja faililaiendi (laiend) järgi.

See on kasulik näiteks siis, kui teil on vaja PDF-ide hulgast midagi leida või vaadata, mida olete EPUB-ist ja FB2-st salvestanud, saate lihtsalt päringu käivitada

vitis show Format/MOBI u: Format/FB2

Juhtus nii, et standardsed GNU/Linuxi tööriistad, nagu fail või mimetüüp, ei sobinud mulle just seetõttu, et need ei määra alati vormingut õigesti; pidin failisignatuuride ja laienduste põhjal ise juurutama. Üldiselt on failivormingute määratlemise teema uurimistöö jaoks huvitav ja väärib eraldi artiklit. Praegu võin öelda, et võib-olla pole ma kõikidele maailma formaatidele tõelist tunnustust pakkunud, kuid üldiselt töötab see juba hästi. Tõsi, EPUB defineerib vormingu nüüd ZIP-vormingus (üldiselt on see õigustatud, kuid praktikas ei tohiks seda normaalseks käitumiseks pidada). Pidage seda funktsiooni esialgu eksperimentaalseks ja teavitage kõigist vigadest. Kummalistes olukordades saate alati kasutada faililaiendite kategooriaid, näiteks Extension/epub.

Kui automaatkategooriad vormingu järgi on lubatud, on lubatud ka automaatkategooriad, mis rühmitavad teatud vorminguid tüübi järgi: "Arhiivid", "Pildid", "Video", "Audio" ja "Dokumendid". Nendele alamkategooriatele tehakse ka lokaliseeritud nimed.

Mida pole öeldud

Sosista See osutus väga mitmekülgseks tööriistaks ja kõike korraga on raske katta. Lubage mul lühidalt mainida, mida saate veel teha:

  • kategooriaid saab kustutada ja failidest eemaldada;
  • avaldispäringute tulemusi saab kopeerida määratud kataloogi;
  • faile saab käivitada programmidena;
  • Show käsul on palju võimalusi, näiteks sorteerimine nime/muutmise kuupäeva või juurdepääsu/suuruse/laienduse järgi, faili omaduste ja originaalide teede näitamine, peidetud failide kuvamise lubamine jne;
  • Kui salvestate linke Interneti-allikatele, saate salvestada ka HTML-lehtede kohalikud koopiad.

Täielikud üksikasjad leiate kasutaja abist.

Väljavaated

Skeptikud ütlevad sageli, et "keegi ei määra neid silte ise." Enda näitel võin tõestada vastupidist: olen juba kategoriseerinud üle kuue tuhande faili, loonud üle tuhande kategooria ja varjunime ning see oli seda väärt. Kui üks meeskond vitis open План avage oma ülesannete loend või millal ühe käsuga vitis open LaTeX Kui avate Stoljarovi raamatu LaTeX-i paigutussüsteemist, on failisüsteemi "vanamoodi" kasutamine juba moraalselt raske.

Selle põhjal tekib hulk ideid. Näiteks saab teha automaatraadio, mis lülitab sisse temaatilise muusika vastavalt hetkeilmale, puhkusele, nädalapäevale, kellaajale või aastaajale. Teemale veelgi lähemal on muusikapleier, mis tunneb kategooriaid ja suudab esitada muusikat väljenditega, tehes kategooriate ja komplektidega seotud toiminguid. Kasulik on luua deemon, mis jälgib kataloogi "Allalaadimised" ja pakub uute failide kategoriseerimist. Ja loomulikult peaksime tegema tavalise graafilise semantilise failihalduri. Kunagi lõin ettevõttele isegi veebiteenuse failide kollektiivseks kasutamiseks, kuid see ei olnud prioriteet ja muutus ebaoluliseks, kuigi saavutas kõrge jõudluse. (Seoses suurte muudatustega Sosista, see ei ole enam kasutatav.)

siin on väike demo

Kataloogide asemel kategooriad või Linuxi semantiline failisüsteem

Järeldus

Vitis ei ole esimene katse andmetega töötamise stiili kardinaalselt muuta, kuid pidasin oluliseks oma ideede elluviimist ja teostuse avalikult kättesaadavaks tegemist GNU GPL litsentsi all. Mugavuse huvides on x86-64 jaoks loodud deb pakett, mis peaks töötama kõigi kaasaegsete Debiani distributsioonidega. ARM-is esines väiksemaid raskusi (samal ajal kui kõik muud programmid olid seotud Sosista, töötavad hästi), kuid tulevikus koostatakse selle platvormi (armhf) jaoks tööpakett. Olen praegu lõpetanud RPM-pakettide loomise Fedora 30 probleemide ja paljudes RPM-i distributsioonides levimise raskuste tõttu, kuid vähemalt paarile neist tehakse siiski hilisemaid pakette. Vahepeal saate kasutada make && make install või checkinstall.

Tänan teid kõiki tähelepanu eest! Loodan, et see artikkel ja see projekt võivad olla kasulikud.

Link projekti hoidlasse

Allikas: www.habr.com

Lisa kommentaar