Kategóriák könyvtárak helyett, vagy szemantikus fájlrendszer Linuxhoz

Maga az adatosztályozás is érdekes kutatási téma. Szeretek olyan információkat gyűjteni, amelyek szükségesnek tűnnek, és mindig is igyekeztem logikai könyvtárhierarchiát létrehozni a fájljaimhoz, és egy nap álmomban megláttam egy gyönyörű és kényelmes programot, amellyel címkéket rendelhetek a fájlokhoz, és úgy döntöttem, hogy nem tudok élni. így tovább.

A hierarchikus fájlrendszerek problémája

A felhasználók gyakran szembesülnek azzal a problémával, hogy kiválasszák a következő új fájl mentési helyét, és meg kell találniuk saját fájljaikat (néha a fájlneveket egyáltalán nem akarják megjegyezni).

A helyzetből kiutat jelenthetnek a szemantikus fájlrendszerek, amelyek általában a hagyományos fájlrendszer kiegészítői. A bennük lévő könyvtárakat szemantikai attribútumok helyettesítik, amelyeket címkéknek, kategóriáknak és metaadatoknak is neveznek. Gyakrabban fogom használni a „kategória” kifejezést, mert... A fájlrendszerekkel összefüggésben a "tag" szó néha kissé furcsa, különösen akkor, ha "alcímkék" és "címkeálnevek" jelennek meg.

A fájlokhoz kategóriák hozzárendelése nagymértékben kiküszöböli a fájl tárolásának és keresésének problémáját: ha emlékszik (vagy kitalálja) legalább az egyik fájlhoz rendelt kategóriát, akkor a fájl soha nem tűnik el a nézetből.

Korábban ez a téma többször is felmerült Habrén (idő, два, három, négy stb.), itt leírom a megoldásomat.

Út a megvalósításhoz

Közvetlenül az említett álom után leírtam a füzetemben azt a parancsfelületet, amely kategóriákkal biztosítja a szükséges munkát. Aztán elhatároztam, hogy egy-két héten belül meg tudok írni egy prototípust Python vagy Bash segítségével, és akkor egy grafikus shell létrehozásán kell dolgoznom Qt-ben vagy GTK-ban. A valóság, mint mindig, sokkal keményebbnek bizonyult, és a fejlesztés késett.

Az eredeti ötlet az volt, hogy mindenekelőtt egy kényelmes és tömör parancssori felülettel rendelkező programot készítsenek, amely kategóriákat hozhat létre, törölhet, kategóriákat rendelhet a fájlokhoz és törölhet kategóriákat fájlokból. Felhívtam a programot Suttogás.

Első kísérlet az alkotásra Suttogás semmivel nem végződött, mivel sok időt kezdett a munkával és a főiskolával tölteni. A második próbálkozás már volt valami: a mesterdolgozathoz sikerült befejeznem a tervezett projektet, sőt a GTK shell prototípusát is elkészítettem. De ez a verzió annyira megbízhatatlannak és kényelmetlennek bizonyult, hogy sok mindent át kellett gondolni.

Valójában a harmadik verziót magam használtam nagyon sokáig, több ezer fájlomat átvittem kategóriákba. Ezt nagyban megkönnyítette a megvalósított bash-kiegészítés is. Néhány probléma azonban, mint például az automatikus kategóriák hiánya és az azonos nevű fájlok tárolásának lehetősége, továbbra is fennállt, és a program már a saját bonyolultsága alatt volt. Így jutottam el a komplex szoftverfejlesztési problémák megoldásának szükségességéhez: részletes követelmények írása, funkcionális tesztelési rendszer kidolgozása, csomagolási utasítások tanulmányozása és még sok más. Elérkeztem a tervemhez, hogy ezt az alázatos alkotást a szabad közösség elé tárhassuk. Az olyan speciális fájlkezelés, mint például a kategóriák fogalmán keresztül történő kezelés, váratlan problémákat és problémákat vet fel, illetve ezek megoldása során Suttogás további öt projektet szült maga körül, amelyek közül néhányat megemlítünk a cikkben. Mostanáig Suttogás Nem vettem grafikus héjat, de a fájlkategóriák parancssorból való használatának kényelme számomra már meghaladja a hagyományos grafikus fájlkezelő előnyeit.

Példák a felhasználásra

Kezdjük egyszerűen – hozzon létre egy kategóriát:

vitis create Музыка

Példaként adjunk hozzá néhány összetételt:

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

A „Zene” kategória tartalmát a „show” alparancs segítségével tekintheti meg:

vitis show Музыка

Lejátszhatja az „open” alparancs segítségével.

vitis open Музыка

Mert Ha csak egy fájlunk van a „Zene” kategóriában, akkor csak az indul el. A fájlok alapértelmezett programokkal való megnyitásához külön segédprogramot készítettem vts-fs-open (Az olyan szabványos eszközök, mint az xdg-open vagy a mimeopen, több okból nem feleltek meg nekem; de ha valami, akkor a beállításokban megadhat egy másik segédprogramot az univerzális fájl megnyitásához). Ez a segédprogram jól működik különböző disztribúciókon, különböző munkakörnyezetekkel, ezért javaslom, hogy a vitis-szel együtt telepítse.

Közvetlenül is megadhatja a programot a fájlok megnyitásához:

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

Kategóriák könyvtárak helyett, vagy szemantikus fájlrendszer Linuxhoz

Hozzon létre további kategóriákat, és adjunk hozzá fájlokat a „hozzárendelés” használatával. Ha a fájlok olyan kategóriákhoz vannak hozzárendelve, amelyek még nem léteznek, akkor a rendszer felkéri a létrehozásukat. A szükségtelen kérés elkerülhető a -yes kapcsoló használatával.

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

Most szeretnénk hozzáadni a „Matematika” kategóriát az „R statisztikai csomag: valószínűségszámítás és matematikai statisztika.pdf” fájlhoz. Tudjuk, hogy ez a fájl már "R" kategóriájú, ezért használhatjuk a Vitis rendszer kategória elérési útját:

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

Szerencsére a bash befejezése ezt megkönnyíti.

Nézzük meg, mi történt, a --categories jelző használatával az egyes fájlokhoz tartozó kategóriák listájának megtekintéséhez:

vitis show R --categories

Kategóriák könyvtárak helyett, vagy szemantikus fájlrendszer Linuxhoz

Vegye figyelembe, hogy a fájlok automatikusan kategorizálásra kerültek formátum, típus (a formátumok kombinálása) és a fájlkiterjesztés szerint is. Ezek a kategóriák igény szerint letilthatók. Később mindenképpen lokalizálni fogom a nevüket.

A változatosság kedvéért adjunk hozzá még valamit a „matematikához”:

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

És most érdekessé válnak a dolgok. Kategóriák helyett írhatunk kifejezéseket az unió, a metszés és a kivonás műveleteivel, azaz használjunk műveleteket halmazokon. Például a "Math" és az "R" metszéspontja egy fájlt eredményez.

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

Vonjuk ki az „R” nyelvre vonatkozó hivatkozásokat a „matematika”-ból:

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

Céltalanul kombinálhatjuk a zenét és az R nyelvet:

vitis show Музыка u: R

Az -n kapcsoló lehetővé teszi a szükséges fájlok „kihúzását” a kérés eredményéből számok és/vagy tartományok szerint, például, -n 3-7, vagy valami bonyolultabb: -n 1,5,8-10,13. Gyakran hasznos a megnyitás alparancsnál, amely lehetővé teszi a kívánt fájlok megnyitását egy listából.

Kategóriák könyvtárak helyett, vagy szemantikus fájlrendszer Linuxhoz

Miközben távolodunk a hagyományos címtárhierarchia használatától, gyakran hasznos az egymásba ágyazott kategóriák használata. Hozzunk létre egy „Statisztika” alkategóriát a „Matematika” kategória alatt, és adjuk hozzá ezt a kategóriát a megfelelő fájlhoz:

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

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

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

Kategóriák könyvtárak helyett, vagy szemantikus fájlrendszer Linuxhoz

Láthatjuk, hogy ennek a fájlnak most a „Matek/Statisztika” kategóriája van a „Matek” helyett (az extra hivatkozásokat a rendszer követi).

A teljes elérési út megcímzése kényelmetlen lehet, hozzunk létre egy „globális” aliast:

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

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

Kategóriák könyvtárak helyett, vagy szemantikus fájlrendszer Linuxhoz

Nem csak a szokásos fájlokat

Internetes hivatkozások

Bármilyen információ tárolásának egységesítése érdekében hasznos lenne legalább az internetes forrásokra mutató hivatkozásokat kategorizálni. És ez lehetséges:

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

Egy speciális helyen létrejön egy fájl a HTML oldal fejlécével és a .desktop kiterjesztéssel. Ez a hagyományos parancsikonformátum a GNU/Linuxban. Az ilyen parancsikonokat a rendszer automatikusan hálózati könyvjelzők kategóriába sorolja.

Természetesen a parancsikonok a következő használatra készültek:

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

A parancs végrehajtásával az újonnan mentett hivatkozás megnyílik a böngészőben. Az internetes források kategorizált hivatkozásai helyettesíthetik a böngésző könyvjelzőit.

Fájltöredékek

Hasznos az is, ha az egyes fájlokhoz kategóriákat rendelünk. Nem rossz kérés, mi? De a jelenlegi megvalósítás eddig csak a sima szöveges fájlokat, audio- és videofájlokat érinti. Tegyük fel, hogy meg kell jelölni egy koncert bizonyos részét vagy egy vicces pillanatot egy filmben, majd az assign használatakor használhatjuk a -fragname, -start, -finish zászlókat. Mentsük el a "DuckTales" képernyővédőt:

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

vitis open Заставки

A valóságban nem történik fájlvágás, hanem egy mutatófájl jön létre a töredékre, amely leírja a fájl típusát, a fájl elérési útját, a töredék elejét és végét. A töredékekre mutató mutatók létrehozása és megnyitása olyan segédprogramokra van delegálva, amelyeket kifejezetten erre a célra készítettem - ezek a mediafragmenter és a fragplayer. Az első létrehoz, a második megnyílik. Hang- és képfelvételek esetén a médiafájlt a VLC lejátszó segítségével egy bizonyos pozícióból egy bizonyos pozícióba indítják, így annak is a rendszerben kell lennie. Eleinte mplayer alapján akartam ezt megcsinálni, de valamiért nagyon ferde volt a megfelelő pillanatban történő pozicionálás.
Példánkban létrejön a „Duck Tales intro.fragpointer” fájl (speciális helyre kerül), majd a fájl elejétől lejátszik egy töredéket (mivel a –start nem volt megadva a létrehozáskor) egészen a 59. második jel, amely után a VLC bezár.

Egy másik példa, amikor úgy döntöttünk, hogy kategorizálunk egy fellépést egy híres művész koncertjén:

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

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

Megnyitáskor a fájl a kívánt pozícióba kerül, és négy és fél perc múlva bezárul.

Hogyan működik mindez + további funkciók

Kategóriák tárolása

A szemantikus fájlrendszer szervezéséről való gondolkodás legelején három út jutott eszünkbe: szimbolikus hivatkozások tárolása, adatbázis, XML-beli leírás. Az első módszer győzött, mert... egyrészt könnyen megvalósítható, másrészt a felhasználónak lehetősége van közvetlenül a fájlrendszerből nézegetni a kategóriákat (ez pedig kényelmes és fontos). A használat kezdetén Suttogás A „Vitis” könyvtár és a „.config/vitis/vitis.conf” konfigurációs fájl a felhasználó saját könyvtárában jön létre. A ~/Vitisben a kategóriáknak megfelelő könyvtárak jönnek létre, és ezekben a kategóriakönyvtárakban jönnek létre az eredeti fájlokra mutató szimbolikus hivatkozások. A kategóriaálnevek is csak linkek rájuk. Természetesen előfordulhat, hogy a „Vitis” könyvtár jelenléte a saját könyvtárban nem felel meg néhány embernek. Bármilyen más helyre tudunk váltani:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

Egy bizonyos ponton világossá válik, hogy nincs értelme a különböző helyeken szétszórt fájlokat kategorizálni, mivel a helyük változhat. Ezért kezdetben létrehoztam magamnak egy könyvtárat, ahová ostoba módon mindent kiraktam, és minden kategóriát megadtam. Aztán úgy döntöttem, hogy jó lenne ezt a pillanatot a program szintjén formalizálni. Így jelent meg a „fájlterület” fogalma. A használat kezdetén Suttogás Nem ártana azonnal beállítani egy ilyen helyet (az összes szükséges fájlt ott tároljuk), és engedélyezni az automatikus mentést:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Automatikus mentés nélkül, az "hozzárendelés" alparancs használatakor a --save kapcsolóra lesz szükség, ha a hozzáadott fájlt a fájlterületre szeretné menteni.

Ezenkívül több fájlterületet is hozzáadhat, és megváltoztathatja azok prioritását; ez akkor lehet hasznos, ha sok fájl van, és azokat különböző adathordozókon tárolják. Ezt a lehetőséget itt nem fogom figyelembe venni, a részletek a program súgójában találhatók.

Szemantikus fájlrendszer áttelepítése

Különben is, a Vitis könyvtár és fájlterületek elméletileg néha mozoghatnak egyik helyről a másikra. Hogy működjön, létrehoztam egy külön segédprogramot link-szerkesztő, amely tömegesen szerkesztheti a hivatkozásokat, és az útvonal egyes részeit másokkal helyettesítheti:

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

Az első esetben, miután az /mnt/MyFavoriteDisk/Vitis/ könyvtárból a kezdőkönyvtárba léptünk, az álnevekhez tartozó szimbolikus hivatkozások szerkesztésre kerülnek. A második esetben a fájlterület helyének megváltoztatása után a Vitisben lévő összes hivatkozás újra változik, az elérési út egy részének cseréjére vonatkozó kérésnek megfelelően.

Automatikus kategóriák

Ha lefuttatja a parancsot vitis service get autocategorization, láthatja, hogy alapértelmezés szerint az automatikus kategóriák formátum (Formátum és típus) és fájlkiterjesztés (Extension) szerint vannak hozzárendelve.

Ez akkor hasznos, ha például meg kell találnia valamit a PDF-ek között, vagy meg kell néznie, mit tárolt az EPUB-ból és az FB2-ből, egyszerűen futtathatja a kérést.

vitis show Format/MOBI u: Format/FB2

Történt ugyanis, hogy az olyan szabványos GNU/Linux eszközök, mint a fájl vagy a mimetype, pont azért nem jöttek be nekem, mert nem mindig határozzák meg helyesen a formátumot, saját implementációt kellett készítenem fájl aláírások és kiterjesztések alapján. Általánosságban elmondható, hogy a fájlformátumok meghatározása érdekes kutatási téma, és külön cikket érdemel. Egyelőre elmondhatom, hogy talán nem adtam meg a világ minden formátumának valódi elismerését, de összességében már jól működik. Igaz, az EPUB ma már ZIP-ként határozza meg a formátumot (általában ez indokolt, de a gyakorlatban ez nem tekinthető normális viselkedésnek). Egyelőre tekintse ezt a funkciót kísérleti jellegűnek, és jelentse az esetleges hibákat. Furcsa helyzetekben mindig használhat fájlkiterjesztési kategóriákat, például Extension/epub.

Ha a formátum szerinti automatikus kategóriák engedélyezve vannak, akkor az egyes formátumokat típus szerint csoportosító automatikus kategóriák is engedélyezve vannak: „Archívumok”, „Képek”, „Videó”, „Hang” és „Dokumentumok”. Ezekhez az alkategóriákhoz lokalizált nevek is készülnek.

Ami nincs kimondva

Suttogás Nagyon sokrétű eszköznek bizonyult, és nehéz mindent egyszerre lefedni. Hadd említsem meg röviden, hogy mit tehetsz még:

  • kategóriák törölhetők és eltávolíthatók a fájlokból;
  • a kifejezés lekérdezések eredményei a megadott könyvtárba másolhatók;
  • a fájlok programként futtathatók;
  • A show parancsnak számos opciója van, például rendezés név/módosítás dátuma vagy hozzáférés/méret/kiterjesztés szerint, fájltulajdonságok és az eredetihez vezető útvonalak megjelenítése, rejtett fájlok megjelenítésének engedélyezése stb.;
  • Az internetes forrásokra mutató hivatkozások mentésekor a HTML-oldalak helyi másolatait is mentheti.

További részletek a felhasználói súgóban találhatók.

Kilátások

A szkeptikusok gyakran mondják, hogy „senki sem fogja beállítani ezeket a címkéket maga”. Saját példámon is bebizonyíthatom az ellenkezőjét: már több mint hatezer fájlt kategorizáltam, több mint ezer kategóriát és álnevet hoztam létre, és megérte. Amikor egy csapat vitis open План nyissa meg a teendők listáját vagy amikor egyetlen paranccsal vitis open LaTeX Amikor megnyitja Stolyarov könyvét a LaTeX elrendezési rendszerről, már morálisan nehéz a fájlrendszert „régi módon” használni.

Ezen az alapon számos ötlet merül fel. Készíthet például egy automata rádiót, amely az aktuális időjárásnak, ünnepnapnak, a hét napjának, napszakának vagy évszakának megfelelően tematikus zenét kapcsol be. Még közelebb áll a témához egy zenelejátszó, amely ismeri a kategóriákat, és kifejezésekkel tud zenét lejátszani a kategóriákon és a készleteken végzett műveletekkel. Hasznos olyan démont készíteni, amely figyeli a "Letöltések" könyvtárat, és felajánlja az új fájlok kategorizálását. És természetesen egy normál grafikus szemantikai fájlkezelőt kell készítenünk. Valamikor réges-régen létrehoztam egy webszolgáltatást a vállalatnak a fájlok kollektív felhasználására, de ez nem volt prioritás, és lényegtelenné vált, bár magas szintű teljesítményt ért el. (A jelentős változások miatt Suttogás, már nem használható.)

itt egy kis bemutató

Kategóriák könyvtárak helyett, vagy szemantikus fájlrendszer Linuxhoz

Következtetés

vitis nem az első kísérlet az adatokkal való munkavégzés stílusának gyökeres megváltoztatására, de fontosnak tartottam, hogy megvalósítsam az elképzeléseimet és a megvalósítást nyilvánosan elérhetővé tegyem a GNU GPL licenc alatt. A kényelem kedvéért egy deb csomag készült az x86-64-hez, amely minden modern Debian disztribúción működik. Kisebb nehézségek adódtak az ARM-nél (míg az összes többi program a Suttogás, jól működik), de a jövőben működő csomagot állítanak össze erre a platformra (armhf). Egyelőre leállítottam az RPM-csomagok létrehozását a Fedora 30-as problémák és a sok RPM-disztribúció közötti terjedési nehézségek miatt, de ezek közül legalább néhányhoz később is készülnek csomagok. Addig is használhatod make && make install vagy checkinstall.

Köszönöm mindenkinek a figyelmet! Remélem, ez a cikk és ez a projekt hasznos lehet.

Link a projekttárhoz

Forrás: will.com

Hozzászólás