Kategorier istället för kataloger, eller semantiskt filsystem för Linux

Dataklassificering i sig är ett intressant forskningsämne. Jag älskar att samla information som verkar nödvändig, och jag har alltid försökt skapa logiska kataloghierarkier för mina filer, och en dag i en dröm såg jag ett vackert och bekvämt program för att tilldela taggar till filer, och jag bestämde mig för att jag inte kunde leva så här längre.

Problemet med hierarkiska filsystem

Användare ställs ofta inför problemet med att välja var nästa nya fil ska sparas och problemet med att hitta sina egna filer (ibland är filnamn inte alls avsedda att komma ihåg av en person).

En väg ut ur situationen kan vara semantiska filsystem, som vanligtvis är ett tillägg till det traditionella filsystemet. Kataloger i dem ersätts av semantiska attribut, även kallade taggar, kategorier och metadata. Jag kommer att använda termen "kategori" oftare, eftersom... I filsystemssammanhang är ordet "tagg" ibland lite konstigt, speciellt när "subtaggar" och "taggaliaser" dyker upp.

Att tilldela kategorier till filer eliminerar till stor del problemet med att lagra och söka efter en fil: om du kommer ihåg (eller gissar) minst en av kategorierna som tilldelats en fil, kommer filen aldrig att försvinna från visningen.

Tidigare togs detta ämne upp mer än en gång på Habré (tid, два, tre, fyra etc.), här beskriver jag min lösning.

Vägen till förverkligande

Omedelbart efter den nämnda drömmen beskrev jag i min anteckningsbok kommandogränssnittet som ger det nödvändiga arbetet med kategorier. Sedan bestämde jag mig för att om en vecka eller två kunde jag skriva en prototyp med Python eller Bash, och sedan skulle jag behöva arbeta med att skapa ett grafiskt skal i Qt eller GTK. Verkligheten visade sig som alltid vara mycket hårdare och utvecklingen försenades.

Den ursprungliga idén var att först och främst skapa ett program med ett bekvämt och kortfattat kommandoradsgränssnitt som skulle skapa, ta bort kategorier, tilldela kategorier till filer och ta bort kategorier från filer. Jag ringde programmet Viska.

Första försöket att skapa Viska slutade i ingenting, eftersom mycket tid började läggas på arbete och högskola. Det andra försöket var redan något: för masteruppsatsen lyckades jag slutföra det planerade projektet och till och med göra en prototyp av GTK-skalet. Men den versionen visade sig vara så opålitlig och obekväm att mycket fick tänkas om.

Jag använde faktiskt den tredje versionen själv under väldigt lång tid, efter att ha överfört flera tusen av mina filer till kategorier. Detta underlättades också avsevärt av det implementerade bash-slutförandet. Men vissa problem, som avsaknaden av automatiska kategorier och möjligheten att lagra filer med samma namn, fanns fortfarande kvar, och programmet var redan böjt under sin egen komplexitet. Så här kom jag till behovet av att lösa komplexa mjukvaruutvecklingsproblem: skriva detaljerade krav, utveckla ett funktionellt testsystem, studera förpackningsinstruktioner och mycket mer. Jag har nu kommit fram till min plan, så att denna ödmjuka skapelse kan presenteras för den fria gemenskapen. Specifik filhantering såsom hantering genom konceptet kategorier väcker oväntade problem och problem, och när det gäller att lösa dem Viska skapade ytterligare fem projekt runt sig, varav några kommer att nämnas i artikeln. Tills nu Viska Jag har inte köpt ett grafiskt skal, men bekvämligheten med att använda filkategorier från kommandoraden uppväger redan för mig alla fördelar med en vanlig grafisk filhanterare.

Exempel på användning

Låt oss börja enkelt - skapa en kategori:

vitis create Музыка

Låt oss lägga till lite komposition till det som ett exempel:

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

Du kan se innehållet i kategorin "Musik" med hjälp av underkommandot "visa":

vitis show Музыка

Du kan spela det med hjälp av underkommandot "öppna".

vitis open Музыка

Därför att Om vi ​​bara har en fil i kategorin "Musik", kommer bara den att starta. För att öppna filer med deras standardprogram gjorde jag ett separat verktyg vts-fs-öppen (standardverktyg som xdg-open eller mimeopen passade inte mig av flera anledningar, men om något kan du i inställningarna ange ett annat verktyg för universell filöppning). Det här verktyget fungerar bra på olika distributioner med olika arbetsmiljöer, så jag rekommenderar att du installerar det tillsammans med vitis.

Du kan också direkt ange programmet för att öppna filer:

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

Kategorier istället för kataloger, eller semantiskt filsystem för Linux

Låt oss skapa fler kategorier och lägga till filer med "tilldela". Om filer tilldelas kategorier som ännu inte finns, uppmanas du att skapa dem. En onödig begäran kan undvikas genom att använda flaggan -yes.

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

Nu vill vi lägga till kategorin "Matematik" till filen "Statistisk paket R: sannolikhetsteori och matematisk statistik.pdf". Vi vet att den här filen redan är kategoriserad som "R" och därför kan vi använda kategorisökvägen från Vitis-systemet:

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

Lyckligtvis gör bash-slutförandet detta enkelt.

Låt oss se vad som hände, med flaggan --categories för att se en lista med kategorier för varje fil:

vitis show R --categories

Kategorier istället för kataloger, eller semantiskt filsystem för Linux

Observera att filerna också automatiskt har kategoriserats efter format, typ (kombinerar format) och filtillägg. Dessa kategorier kan inaktiveras om så önskas. Senare kommer jag definitivt att lokalisera deras namn.

Låt oss lägga till något annat till "Matematik" för variation:

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

Och nu blir det intressant. Istället för kategorier kan du skriva uttryck med operationerna union, skärning och subtraktion, det vill säga använda operationer på mängder. Till exempel kommer skärningspunkten mellan "Math" och "R" att resultera i en fil.

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

Låt oss subtrahera referenser till språket "R" från "Matematik":

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

Vi kan mållöst kombinera musik och R-språket:

vitis show Музыка u: R

Flaggan -n låter dig "dra ut" de nödvändiga filerna från förfrågningsresultatet med siffror och/eller intervall, till exempel, -n 3-7, eller något mer komplicerat: -n 1,5,8-10,13. Det är ofta användbart med underkommandot öppna, som låter dig öppna önskade filer från en lista.

Kategorier istället för kataloger, eller semantiskt filsystem för Linux

Medan vi går bort från att använda en konventionell kataloghierarki, är det ofta användbart att ha kapslade kategorier. Låt oss skapa en underkategori "Statistik" under kategorin "Matematik" och lägga till denna kategori i lämplig fil:

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

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

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

Kategorier istället för kataloger, eller semantiskt filsystem för Linux

Vi kan se att den här filen nu har kategorin "Math/Statistics" istället för "Math" (extra länkar spåras).

Att adressera hela sökvägen kan vara obekvämt, låt oss skapa ett "globalt" alias:

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

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

Kategorier istället för kataloger, eller semantiskt filsystem för Linux

Inte bara vanliga filer

Internetlänkar

För att förena lagringen av all information skulle det åtminstone vara användbart att kategorisera länkar till Internetresurser. Och detta är möjligt:

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

En fil kommer att skapas på en speciell plats med rubriken på HTML-sidan och filtillägget .desktop. Detta är det traditionella genvägsformatet i GNU/Linux. Sådana genvägar kategoriseras automatiskt som nätverksbokmärken.

Naturligtvis skapas genvägar för att användas:

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

Genom att köra kommandot öppnas den nyligen sparade länken i webbläsaren. Kategoriserade genvägar till Internetkällor kan fungera som en ersättning för webbläsarbokmärken.

Filfragment

Det är också användbart att ha kategorier för enskilda filer. Ingen dålig begäran, va? Men den nuvarande implementeringen hittills påverkar bara vanliga textfiler, ljud- och videofiler. Låt oss säga att du behöver markera en viss del av en konsert eller ett roligt ögonblick i en film, då när du använder tilldela kan du använda flaggorna -fragname, -start, -finish. Låt oss spara skärmsläckaren från "DuckTales":

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

vitis open Заставки

I verkligheten sker ingen filklippning, istället skapas en pekarfil till fragmentet som beskriver filtypen, sökvägen till filen, början och slutet av fragmentet. Skapandet och öppnandet av pekare till fragment delegeras till verktyg som jag har gjort speciellt för dessa ändamål - dessa är mediafragmenter och fragplayer. Den första skapar, den andra öppnar. Vid ljud- och videoinspelningar startas mediefilen från en viss till en viss position med hjälp av VLC-spelaren, så den måste också finnas i systemet. Först ville jag göra det här baserat på mplayer, men av någon anledning var det väldigt snett med positionering i rätt ögonblick.
I vårt exempel skapas filen “Duck Tales intro.fragpointer” (den placeras på en speciell plats), och sedan spelas ett fragment upp från början av filen (eftersom –start inte angavs när du skapade) tills den 59 andra märket, varefter VLC stänger .

Ett annat exempel är när vi bestämde oss för att kategorisera ett enda framträdande på en konsert av en känd artist:

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

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

När den öppnas kommer filen att inkluderas i önskad position och stängs efter fyra och en halv minut.

Hur det hela fungerar + ytterligare funktioner

Lagra kategorier

Allra i början av att fundera på att organisera ett semantiskt filsystem kom tre sätt att tänka på: genom lagring av symboliska länkar, genom en databas, genom en beskrivning i XML. Den första metoden vann, eftersom... dels är det lätt att implementera, dels har användaren möjlighet att titta på kategorier direkt från filsystemet (och det är bekvämt och viktigt). I början av användning Viska "Vitis"-katalogen och ".config/vitis/vitis.conf"-konfigurationsfilen skapas i användarens hemkatalog. Kataloger som motsvarar kategorier skapas i ~/Vitis, och symboliska länkar till originalfilerna skapas i dessa kategorikataloger. Kategorialias är också bara länkar till dem. Förekomsten av "Vitis"-katalogen i hemkatalogen kanske inte passar vissa personer. Vi kan byta till vilken annan plats som helst:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

Vid en viss tidpunkt blir det tydligt att det inte är meningsfullt att kategorisera filer utspridda på olika platser, eftersom deras plats kan ändras. Därför skapade jag till att börja med en katalog för mig själv, där jag dumt dumpade allt och gav det alla kategorier. Sedan bestämde jag mig för att det skulle vara trevligt att formalisera denna stund på programnivå. Så här dök begreppet "filutrymme" ut. I början av användning Viska Det skulle inte skada att omedelbart ställa in en sådan plats (alla filer vi behöver kommer att lagras där) och aktivera autospara:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Utan autosave, när du använder underkommandot "tilldela", kommer flaggan --save att krävas om du vill spara den tillagda filen i filutrymmet.

Dessutom kan du lägga till flera filutrymmen och ändra deras prioriteringar; detta kan vara användbart när det finns många filer och de är lagrade på olika media. Jag kommer inte att överväga denna möjlighet här; detaljer kan hittas i programmets hjälp.

Semantisk filsystemmigrering

Hur som helst, Vitis-katalogen och filutrymmen kan teoretiskt sett ibland flytta från plats till plats. För att få det att fungera skapade jag ett separat verktyg länkredigerare, som kan massredigera länkar och ersätta delar av sökvägen med andra:

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

I det första fallet, efter att vi har flyttat från /mnt/MyFavoriteDisk/Vitis/ till hemkatalogen, redigeras de symboliska länkarna som är associerade med aliasen. I det andra fallet, efter att ha ändrat platsen för filutrymmet, ändras alla länkar i Vitis till nya i enlighet med begäran om att ersätta en del av deras sökväg.

Automatiska kategorier

Om du kör kommandot vitis service get autocategorization, kan du se att automatiska kategorier som standard tilldelas efter format (Format och Typ) och filtillägg (Extension).

Detta är användbart när du till exempel behöver hitta något bland PDF-filer eller titta på vad du har lagrat från EPUB och FB2, du kan helt enkelt köra förfrågan

vitis show Format/MOBI u: Format/FB2

Det råkade bara vara så att vanliga GNU/Linux-verktyg som fil eller mimetyp inte passade mig just för att de inte alltid bestämmer formatet korrekt, jag var tvungen att göra min egen implementering baserat på filsignaturer och filtillägg. I allmänhet är ämnet att definiera filformat ett intressant ämne för forskning och förtjänar en separat artikel. För nu kan jag säga att jag kanske inte har gett sann erkännande för alla format i världen, men i allmänhet fungerar det redan bra. Det är sant att EPUB nu definierar formatet som ZIP (i allmänhet är detta motiverat, men i praktiken bör detta inte betraktas som normalt beteende). För närvarande, betrakta denna funktion som experimentell och rapportera eventuella buggar. I konstiga situationer kan du alltid använda filtilläggskategorier, till exempel Extension/epub.

Om autokategorier efter format är aktiverade, aktiveras även autokategorier som grupperar vissa format efter typ: "Arkiv", "Bilder", "Video", "Ljud" och "Dokument". Lokaliserade namn kommer också att skapas för dessa underkategorier.

Vad sägs inte

Viska Det visade sig vara ett mycket mångfacetterat verktyg, och det är svårt att täcka allt på en gång. Låt mig kort nämna vad mer du kan göra:

  • kategorier kan tas bort och tas bort från filer;
  • resultaten av uttrycksfrågor kan kopieras till den angivna katalogen;
  • filer kan köras som program;
  • Show-kommandot har många alternativ, till exempel sortering efter namn/datum för ändring eller åtkomst/storlek/tillägg, visa filegenskaper och sökvägar till original, möjliggöra visning av dolda filer, etc.;
  • När du sparar länkar till Internetkällor kan du också spara lokala kopior av HTML-sidor.

Fullständig information finns i användarhjälpen.

Utsikter

Skeptiker säger ofta att "ingen kommer att sätta dessa taggar själv." Med mitt eget exempel kan jag bevisa motsatsen: jag har redan kategoriserat mer än sex tusen filer, skapat mer än tusen kategorier och alias, och det var värt det. När ett lag vitis open План öppna din att göra-lista eller när med ett kommando vitis open LaTeX När du öppnar Stolyarovs bok om LaTeX-layoutsystemet är det redan moraliskt svårt att använda filsystemet "på gammaldags sätt."

På grundval av detta uppstår ett antal idéer. Du kan till exempel göra en automatisk radio som sätter på tematisk musik efter aktuellt väder, semester, veckodag, tid på dagen eller året. Ännu närmare ämnet finns en musikspelare som kan kategorier och kan spela musik genom uttryck med operationer på kategorier som på uppsättningar. Det är användbart att skapa en demon som övervakar katalogen "Nedladdningar" och erbjuder att kategorisera nya filer. Och, naturligtvis, bör vi göra en normal grafisk semantisk filhanterare. En gång i tiden skapade jag till och med en webbtjänst för företaget för kollektiv användning av filer, men den var inte prioriterad och blev irrelevant, även om den uppnådde en hög prestandanivå. (På grund av stora förändringar i Viska, det går inte längre att använda.)

här är en liten demo

Kategorier istället för kataloger, eller semantiskt filsystem för Linux

Slutsats

Vitis är inte det första försöket att radikalt ändra stilen att arbeta med data, men jag ansåg det viktigt att implementera mina idéer och göra implementeringen offentligt tillgänglig under GNU GPL-licensen. För enkelhetens skull har ett deb-paket gjorts för x86-64; det borde fungera på alla moderna Debian-distributioner. Det fanns mindre svårigheter på ARM (medan alla andra program relaterade till Viska, fungerar bra), men i framtiden kommer ett arbetspaket att sammanställas för denna plattform (armhf). Jag har slutat skapa RPM-paket för tillfället på grund av problem på Fedora 30 och svårigheten att sprida över många RPM-distributioner, men senare paket kommer fortfarande att göras för åtminstone ett par av dem. Under tiden kan du använda make && make install eller checkinstall.

Tack alla för er uppmärksamhet! Jag hoppas att den här artikeln och det här projektet kan vara till nytta.

Länk till projektförrådet

Källa: will.com

Lägg en kommentar