{"id":35687,"date":"2019-10-31T22:05:46","date_gmt":"2019-10-31T19:05:46","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kategorii-vmesto-direktorij-ili-semanticheskaya-fajlovaya-sistema-dlya-linux\/"},"modified":"2019-10-31T22:05:46","modified_gmt":"2019-10-31T19:05:46","slug":"kategorii-vmesto-direktorij-ili-semanticheskaya-fajlovaya-sistema-dlya-linux","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/kategorii-vmesto-direktorij-ili-semanticheskaya-fajlovaya-sistema-dlya-linux","title":{"rendered":"Kategorier ist\u00e4llet f\u00f6r kataloger, eller en semantisk filsystem f\u00f6r Linux","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Data classification is itself an interesting topic for research. I enjoy collecting information that seems necessary and have always tried to create logical hierarchies of directories for my files. One night, I dreamt of a beautiful and convenient program for tagging files, and I decided that I could no longer live this way.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"problema-ierarhicheskih-faylovyh-sistem\">The problem of hierarchical file systems<\/h1>\n<p><\/p>\n<p>Users often face the issue of choosing a storage location for each new file and the problem of finding their own files (sometimes file names are not intended to be memorable for humans at all).<\/p>\n<p><\/p>\n<p>En l\u00f6sning kan vara semantiska filsystem, som vanligtvis fungerar som ett lager ovanp\u00e5 det traditionella filsystemet. Kataloger ers\u00e4tts d\u00e4r med semantiska attribut, \u00e4ven kallade taggar, kategorier och metadata. Jag kommer oftare att anv\u00e4nda termen \"kategori\", eftersom ordet \"tagg\" kan verka konstigt i sammanhanget av filsystem, s\u00e4rskilt n\u00e4r det finns \"under-taggar\" och \"synonymer f\u00f6r taggar\".<\/p>\n<p><\/p>\n<p>Assigning categories to files largely alleviates the storage and searching problems: if you remember (or suspect) at least one of the assigned categories for a file, it will never be out of sight.<\/p>\n<p><\/p>\n<p>This topic has been raised multiple times on Habr earlier (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/27581\/\">ett<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/337202\/\">tv\u00e5<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/374465\/\">tre<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/81352\/\">fyra<\/a><\/noindex> and others), here I describe my solution.<\/p>\n<p><\/p>\n<h1 id=\"put-k-realizacii\">Path to implementation<\/h1>\n<p><\/p>\n<p>Immediately after the mentioned dream, I described in a notebook a command interface that provides the necessary work with categories. At that time, I thought that within a week or two, I could write a prototype using Python or Bash, and then work on creating a graphical interface using Qt or GTK would follow. Reality, as always, turned out to be much harsher, and development took longer.<\/p>\n<p><\/p>\n<p>The initial idea was to create a program with a user-friendly and concise command-line interface that would create and delete categories, assign categories to files, and remove categories from files. I named the program <em>vitis<\/em>.<\/p>\n<p><\/p>\n<p>The first attempt to create <em>vitis<\/em> det slutade utan resultat, eftersom mycket tid b\u00f6rjade g\u00e5 \u00e5t till arbete och institutet. Det andra f\u00f6rs\u00f6ket resulterade i n\u00e5got: jag lyckades avsluta det planerade projektet f\u00f6r min magisteravhandling och till och med g\u00f6ra en prototyp av GTK-gr\u00e4nssnittet. Men den versionen visade sig vara s\u00e5 op\u00e5litlig och ohandlig att jag var tvungen att t\u00e4nka om mycket.<\/p>\n<p><\/p>\n<p>I den tredje versionen anv\u00e4nde jag det faktiskt sj\u00e4lv under en l\u00e5ng tid, d\u00e4r jag flyttade flera tusen av mina filer till kategorier. Detta p\u00e5verkades starkt av den implementerade autocompletion i bash. Men vissa problem, s\u00e5som avsaknaden av automatiska kategorier och m\u00f6jligheten att lagra filer med samma namn, kvarstod, och programmet b\u00f6rjade knaka under sin egen komplexitet. S\u00e5 jag ins\u00e5g behovet av att l\u00f6sa problemen med utveckling av komplex mjukvara: skriva detaljerade krav, utveckla ett system f\u00f6r funktionell testning, studera instruktioner f\u00f6r paketering och mycket mer. Nu har jag n\u00e5tt dit jag t\u00e4nkt mig, s\u00e5 detta blygsamma verk kan nu presenteras f\u00f6r det \u00f6ppna samfundet. S\u00e5dan specifik filhantering, som hantering genom kategorikonceptet, v\u00e4cker ov\u00e4ntade fr\u00e5gor och problem, och i l\u00f6sningen av dem. <em>vitis<\/em> skapade omkring sig ytterligare fem projekt, n\u00e5gra av dem kommer att n\u00e4mnas i artikeln. \u00c4n idag <em>vitis<\/em> har jag inte f\u00e5tt n\u00e5gon grafisk gr\u00e4nssnitt, men anv\u00e4ndarv\u00e4nligheten med filkategorier fr\u00e5n kommandoraden \u00f6verskytter redan f\u00f6r mig alla f\u00f6rdelar med en vanlig grafisk filhanterare.<\/p>\n<p><\/p>\n<h1 id=\"primery-ispolzovaniya\">Exempel p\u00e5 anv\u00e4ndning<\/h1>\n<p><\/p>\n<p>L\u00e5t oss b\u00f6rja enkelt - skapa en kategori:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis create Musik<\/code><\/pre>\n<p><\/p>\n<p>L\u00e5t oss l\u00e4gga till en komposition som exempel:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign Musik -f \"The Ink Spots - I Don't Want To Set The World On Fire.mp3\"<\/code><\/pre>\n<p><\/p>\n<p>Inneh\u00e5llet i kategorin \"Musik\" kan ses med underkommandot \"show\":<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis show Musik<\/code><\/pre>\n<p><\/p>\n<p>Det kan spelas upp med underkommandot \"open\"<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis open Musik<\/code><\/pre>\n<p><\/p>\n<p>Eftersom vi i kategorin \"Musik\" endast har en fil kommer endast den att k\u00f6ras. F\u00f6r att \u00f6ppna filer med standardprogram gjorde jag ett separat verktyg. <em>vts-fs-open<\/em> (standardverktyg som xdg-open eller mimeopen passade mig inte av flera sk\u00e4l; men om s\u00e5 \u00e4r fallet, kan du i inst\u00e4llningarna ange ett annat verktyg f\u00f6r universell fil\u00f6ppning). Detta verktyg fungerar bra p\u00e5 olika distributioner med olika skrivbordsmilj\u00f6er, s\u00e5 jag rekommenderar att installera det tillsammans med vitis.<\/p>\n<p><\/p>\n<p>Man kan ocks\u00e5 ange programmet f\u00f6r att \u00f6ppna filer direkt:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis open Musik --app qmmp<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kategorier ist\u00e4llet f\u00f6r kataloger, eller en semantisk filsystem f\u00f6r Linux\" src=\"\/wp-content\/uploads\/2019\/06\/4823ff69e03b2e8b9986eedfe0604a9d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi skapar fler kategorier och l\u00e4gger till filer med \"assign\". Om filer tilldelas \u00e4nnu icke existerande kategorier ges en beg\u00e4ran om deras skapande. Den \u00f6verfl\u00f6diga beg\u00e4ran kan undvikas om vi anv\u00e4nder flaggan \u2013yes.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign Programmering R -f \"Introduktion till R.pdf\" \"Statistiskt paket R: sannolikhetsteori och matstatistik.pdf\" --yes<\/code><\/pre>\n<p><\/p>\n<p>Nu vill vi l\u00e4gga till filen \"Statistical Package R: Probability Theory and Mathematical Statistics.pdf\" till kategorin \"Matematika\". Vi vet att den h\u00e4r filen redan har kategorin \"R\" och kan d\u00e4rf\u00f6r anv\u00e4nda kategoriv\u00e4gen fr\u00e5n Vitis-systemet:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign Matematik -v \"R\/Statistiskt paket R: sannolikhetsteori och matstatistik.pdf\"<\/code><\/pre>\n<p><\/p>\n<p>Tack och lov kommer bash-autocomplete att g\u00f6ra detta enkelt.<\/p>\n<p><\/p>\n<p>L\u00e5t oss se vad vi har f\u00e5tt till st\u00e5nd genom att anv\u00e4nda flaggan \u2013categories f\u00f6r att se listan \u00f6ver kategorier f\u00f6r varje fil:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis show R --categories<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kategorier ist\u00e4llet f\u00f6r kataloger, eller en semantisk filsystem f\u00f6r Linux\" src=\"\/wp-content\/uploads\/2019\/06\/7bbaf561e6efe407ec8dfcda3a89c3b8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Observera att filerna ocks\u00e5 fick automatiskt tilldelade kategorier baserat p\u00e5 format, typ (som sammanf\u00f6r format) och fil\u00e4ndelse. Dessa kategorier kan st\u00e4ngas av om s\u00e5 \u00f6nskas. Jag kommer definitivt att lokalisera deras namn senare.<\/p>\n<p><\/p>\n<p>F\u00f6r att variera lite, l\u00e4gg till n\u00e5got mer i \"Matematika\":<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign Matematik -f \"Matematisk analys - 1984.pdf\" Perelman_Underh\u00e5llande_mathematik_1927.djvu <\/code><\/pre>\n<p><\/p>\n<p>Nu b\u00f6rjar det bli intressant. Ist\u00e4llet f\u00f6r kategorier kan vi skriva uttryck med operationer f\u00f6r union, snitt och subtraktion, det vill s\u00e4ga anv\u00e4nda operationer f\u00f6r m\u00e4ngder. Till exempel kommer snittet av \"Matematika\" och \"R\" ge en fil.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis show R i: Matematik<\/code><\/pre>\n<p><\/p>\n<p>Vi subtraherar omn\u00e4mnanden av spr\u00e5ket \"R\" fr\u00e5n \"Matematika\":<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis show Matematik R  #eller vitis show Matematik c: R<\/code><\/pre>\n<p><\/p>\n<p>Vi kan meningsl\u00f6st f\u00f6rena musik och spr\u00e5k R:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis show Musik u: R<\/code><\/pre>\n<p><\/p>\n<p>Flaggan -n till\u00e5ter oss att \"plocka ut\" de \u00f6nskade filerna fr\u00e5n resultatet av fr\u00e5gan baserat p\u00e5 nummer och\/eller intervall, till exempel: <code>-n 3-7<\/code>, eller lite mer komplicerat: <code>-n 1,5,8-10,13<\/code>. Det \u00e4r ofta anv\u00e4ndbart med delkommandot open, vilket till\u00e5ter att \u00f6ppna \u00f6nskade filer fr\u00e5n listan.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kategorier ist\u00e4llet f\u00f6r kataloger, eller en semantisk filsystem f\u00f6r Linux\" src=\"\/wp-content\/uploads\/2019\/06\/5e9181a711a88368b38d8cd2f2e628f4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c4ven om vi g\u00e5r bortom anv\u00e4ndandet av vanliga hierarkiska kataloger, \u00e4r det ofta anv\u00e4ndbart att ha underkategorier. Vi skapar underkategorin \"Statistik\" i kategorin \"Matematika\" och l\u00e4gger till denna kategori till den l\u00e4mpliga filen:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis create Matematik\/Statistik\n\nvitis assign Matematik\/Statistik -v \"R\/Introduktion till R.pdf\"\n\nvitis show Matematik --categories<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kategorier ist\u00e4llet f\u00f6r kataloger, eller en semantisk filsystem f\u00f6r Linux\" src=\"\/wp-content\/uploads\/2019\/06\/0bb3381f35cfa2fce381ecc66a62701f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi kan se att filen nu har kategorin \"Matematika\/Statistik\" ist\u00e4llet f\u00f6r \"Matematika\" (\u00f6verfl\u00f6diga l\u00e4nkar sp\u00e5ras).<\/p>\n<p><\/p>\n<p>Att anv\u00e4nda hela s\u00f6kv\u00e4gen kan vara besv\u00e4rligt, l\u00e5t oss skapa ett 'globalt' alias:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign Matematik\/Statistik -a Statistik\n\nvitis show Statistik<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kategorier ist\u00e4llet f\u00f6r kataloger, eller en semantisk filsystem f\u00f6r Linux\" src=\"\/wp-content\/uploads\/2019\/06\/619c27802802fd93594d3c0050dd78e8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"ne-tolko-obychnye-fayly\">Inte bara vanliga filer<\/h2>\n<p><\/p>\n<h3 id=\"internet-ssylki\">Internetl\u00e4nkar<\/h3>\n<p><\/p>\n<p>F\u00f6r att standardisera lagringen av information skulle det vara bra att, \u00e5tminstone, kategorisera l\u00e4nkar till webbresurser. Och det \u00e4r m\u00f6jligt:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign Habr F\u00e4rganomali -i https:\/\/habr.com\/ru\/company\/sfe_ru\/blog\/437304\/ --yes<\/code><\/pre>\n<p><\/p>\n<p>En fil kommer att skapas p\u00e5 en speciell plats med titeln av HTML-sidan och med till\u00e4gget .desktop. Det \u00e4r det traditionella formatet f\u00f6r genv\u00e4gar i GNU\/Linux. S\u00e5dana genv\u00e4gar f\u00e5r automatiskt kategorin NetworkBookmarks.<\/p>\n<p><\/p>\n<p>Naturligtvis skapas genv\u00e4gar f\u00f6r att anv\u00e4ndas:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis open F\u00e4rganomali<\/code><\/pre>\n<p><\/p>\n<p>Att utf\u00f6ra kommandot \u00f6ppnar den just sparade l\u00e4nken i webbl\u00e4saren. Kategoriserade genv\u00e4gar till webbresurser kan fungera som en ers\u00e4ttning f\u00f6r webbl\u00e4sarbokm\u00e4rken.<\/p>\n<p><\/p>\n<h3 id=\"fragmenty-faylov\">Filfragment<\/h3>\n<p><\/p>\n<p>Det \u00e4r ocks\u00e5 bra att ha kategorier f\u00f6r specifika filfragment. Inte d\u00e5ligt, va? Men den aktuella implementationen r\u00f6r f\u00f6r tillf\u00e4llet bara vanliga textfiler, ljudfiler och videofiler. L\u00e5t oss s\u00e4ga att du vill markera ett specifikt stycke fr\u00e5n en konsert eller ett roligt \u00f6gonblick i en film, d\u00e5 kan du n\u00e4r du anv\u00e4nder assign dra nytta av flaggorna \u2014fragname, \u2014start, \u2014finish. Vi sparar inledningen fr\u00e5n 'Duck Tales':<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign vitis assign -c Intros -f Duck_Tales\/s01s01.avi --finish 00:00:59 --fragname \"Duck Tales intro\"\n\nvitis open Intros<\/code><\/pre>\n<p><\/p>\n<p>Det sker faktiskt ingen avsk\u00e4rning av filer, ist\u00e4llet skapas en pekarfil p\u00e5 fragmentet som beskriver filtyp, filv\u00e4g, start- och slutpunkten f\u00f6r fragmentet. Skapandet och \u00f6ppnandet av pekare till fragment delegeras till verktyg som jag specifikt har gjort f\u00f6r dessa \u00e4ndam\u00e5l \u2014 det \u00e4r mediafragmenter och fragplayer. Den f\u00f6rsta skapar, den andra \u00f6ppnar. F\u00f6r ljud- och videoinspelningar spelar mediespelaren VLC upp mediefilen fr\u00e5n en viss position till en viss position, s\u00e5 den m\u00e5ste ocks\u00e5 finnas i systemet. Jag ville f\u00f6rst g\u00f6ra det baserat p\u00e5 mplayer, men d\u00e4r var det p\u00e5 n\u00e5got s\u00e4tt mycket kr\u00e5ngligt med positioneringen i de exakta \u00f6gonblicken.<br \/>\nI v\u00e5rt exempel skapas en fil 'Duck Tales intro.fragpointer' (den placeras p\u00e5 en speciell plats), och sedan spelas fragmentet fr\u00e5n b\u00f6rjan av filen (eftersom \u2014start inte angavs vid skapandet) till en punkt vid 59 sekunder, och sedan st\u00e4ngs VLC.<\/p>\n<p><\/p>\n<p>Ett annat exempel \u00e4r att vi \u00f6nskar kategorisera en specifik upptr\u00e4dande p\u00e5 en konsert med en k\u00e4nd artist:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign \u041b\u0435\u043f\u0441 \"\u0421\u043f\u0430\u0441\u0438\u0442\u0435 \u043d\u0430\u0448\u0438 \u0434\u0443\u0448\u0438\" -f \u0413\u0440\u0438\u0433\u043e\u0440\u0438\u0439 \u041b\u0435\u043fc - \u041a\u043e\u043d\u0446\u0435\u0440\u0442 \u041f\u0430\u0440\u0443\u0441 - \u043f\u0435\u0441\u043d\u0438 \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440\u0430 \u0412\u044b\u0441\u043e\u0446\u043a\u043e\u0433\u043e.mp4 --fragname \"\u0421\u043f\u0430\u0441\u0438\u0442\u0435 \u043d\u0430\u0448\u0438 \u0434\u0443\u0448\u0438\" --start 00:32:18 --finish 00:36:51\n\nvitis open \"\u0421\u043f\u0430\u0441\u0438\u0442\u0435 \u043d\u0430\u0448\u0438 \u0434\u0443\u0448\u0438\"<\/code><\/pre>\n<p><\/p>\n<p>Vid \u00f6ppnandet kommer filen att spelas fr\u00e5n den angivna positionen och st\u00e4ngas efter fyra och en halv minut.<\/p>\n<p><\/p>\n<h1 id=\"kak-eto-vsyo-rabotaet--dopolnitelnye-vozmozhnosti\">Hur det hela fungerar + ytterligare m\u00f6jligheter<\/h1>\n<p><\/p>\n<h2 id=\"hranenie-kategoriy\">Lagring av kategorier<\/h2>\n<p><\/p>\n<p>N\u00e4r jag f\u00f6rst t\u00e4nkte p\u00e5 hur jag skulle organisera det semantiska filsystemet kom jag p\u00e5 tre s\u00e4tt: genom att lagra symboliska l\u00e4nkar, via en databas, genom en beskrivning i XML. Den f\u00f6rsta metoden segrade eftersom den, \u00e5 ena sidan, \u00e4r enkel att implementera, och \u00e5 andra sidan - ger anv\u00e4ndaren m\u00f6jlighet att se kategorierna direkt fr\u00e5n filsystemet (och det \u00e4r praktiskt och viktigt). N\u00e4r jag b\u00f6rjade anv\u00e4nda <em>vitis<\/em> I anv\u00e4ndarens hemkatalog skapas en katalog 'Vitis' och konfigurationsfilen '.config\/vitis\/vitis.conf'. I ~\/Vitis skapas kataloger som motsvarar kategorierna, och i dessa kategorikataloger skapas symboliska l\u00e4nkar till de ursprungliga filerna. Kategorilierna \u00e4r ocks\u00e5 bara l\u00e4nkar till dem. Naturligtvis kan det vara n\u00e5got som st\u00f6r vissa att ha en 'Vitis'-katalog i hemkatalogen. Vi kan byta till en annan plats:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis service set path \/mnt\/MyFavoriteDisk\/Vitis\/<\/code><\/pre>\n<p><\/p>\n<p>Vid en viss punkt blir det tydligt att det \u00e4r meningsl\u00f6st att kategorisera filer som ligger utspridda p\u00e5 olika platser, eftersom deras placering kan f\u00f6r\u00e4ndras. D\u00e4rf\u00f6r skapade jag f\u00f6rst en katalog d\u00e4r jag bara sl\u00e4ngde allt och gav detta allt kategorier. Sedan best\u00e4mde jag mig f\u00f6r att det kanske skulle vara bra att formulera detta p\u00e5 programniv\u00e5. S\u00e5 f\u00f6ddes begreppet 'filutrymme'. I b\u00f6rjan av anv\u00e4ndningen. <em>vitis<\/em> Det skulle omedelbart vara bra att st\u00e4lla in ett s\u00e5dant utrymme (d\u00e4r alla n\u00f6dv\u00e4ndiga filer kommer att lagras) och aktivera automatisk lagring:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis service add filespace \/mnt\/MyFavoriteDisk\/Filespace\/\n\nvitis service set autosave yes<\/code><\/pre>\n<p><\/p>\n<p>Utan automatisk sparande n\u00e4r du anv\u00e4nder underkommandot &#171;assign&#187; kommer flaggan &#8212;save att kr\u00e4vas om du vill spara den tillagda filen i filsystemet.<\/p>\n<p><\/p>\n<p>Dessutom kan man l\u00e4gga till flera filsystem och \u00e4ndra deras prioriteringar, vilket kan vara anv\u00e4ndbart n\u00e4r det finns m\u00e5nga filer och de lagras p\u00e5 olika enheter. H\u00e4r kommer jag inte att g\u00e5 in p\u00e5 detta, detaljer kan l\u00e4sas i programmets hj\u00e4lp.<\/p>\n<p><\/p>\n<h2 id=\"migraciya-semanticheskoy-faylovoy-sistemy\">Migrering av semantiskt filsystem<\/h2>\n<p><\/p>\n<p>S\u00e5 eller s\u00e5 kan katalogen Vitis och filsystemen teoretiskt flyttas emellan\u00e5t. F\u00f6r att \u00e5tg\u00e4rda detta har jag skapat ett separat verktyg <em>link-editor<\/em>, som kan redigera l\u00e4nkar massivt genom att byta ut delar av s\u00f6kv\u00e4gen mot andra:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">cp -r \/mnt\/MyFavoriteDisk\/Vitis\/ ~\/Vitis\nlink-editor -d ~\/Vitis\/ -f \/mnt\/MyFavoriteDisk\/Vitis\/ -r ~\/Vitis\/ -R\ncp -r \/mnt\/MyFavoriteDisk\/Filespace\/ ~\/MyFiles\nlink-editor -d ~\/Vitis\/ -f \/mnt\/FlashDrive-256\/Filespace\/ -r ~\/MyFiles -R<\/code><\/pre>\n<p><\/p>\n<p>I det f\u00f6rsta fallet, efter att vi flyttat fr\u00e5n \/mnt\/MyFavoriteDisk\/Vitis\/ till hemkatalogen, redigeras de symboliska l\u00e4nkarna relaterade till alias. I det andra fallet, efter att ha f\u00f6r\u00e4ndrat platsen f\u00f6r filsystemet, \u00e4ndras alla l\u00e4nkar i Vitis till nya enligt f\u00f6rfr\u00e5gan om att byta del av deras s\u00f6kv\u00e4g.<\/p>\n<p><\/p>\n<h2 id=\"avtomaticheskie-kategorii\">Automatiska kategorier<\/h2>\n<p><\/p>\n<p>Om man k\u00f6r kommandot <code>vitis service get autocategorization<\/code>, kan man se att automatisk kategorisering som standard \u00e4r inst\u00e4lld enligt format (Format och Typ) och fil\u00e4ndelse (Extension).<\/p>\n<p><\/p>\n<p>Detta \u00e4r anv\u00e4ndbart n\u00e4r man till exempel beh\u00f6ver hitta n\u00e5got bland PDF-filer eller se vad man har lagrat av EPUB och FB2, man kan helt enkelt k\u00f6ra kommandot<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis show Format\/MOBI u: Format\/FB2<\/code><\/pre>\n<p><\/p>\n<p>Det visade sig att standardverktyg i GNU\/Linux som file eller mimetype inte tillfredsst\u00e4llde mina behov just f\u00f6r att de inte alltid korrekt identifierar format. Jag var tvungen att g\u00f6ra min egen implementation baserad p\u00e5 filsignaturer och fil\u00e4ndelser. \u00d6verhuvudtaget \u00e4r \u00e4mnet f\u00f6r att best\u00e4mma filformat ett intressant forskningsomr\u00e5de och f\u00f6rtj\u00e4nar en separat artikel. Jag kan \u00e4n s\u00e5 l\u00e4nge s\u00e4ga att jag kanske inte har f\u00f6rutsett korrekt identifiering f\u00f6r alla format i v\u00e4rlden, men generellt fungerar det redan ganska bra. Sant \u00e4r att EPUB just nu identifieras som ZIP (vilket i stort sett \u00e4r ber\u00e4ttigat, men i praktiken b\u00f6r det inte betraktas som normalt beteende). Tills vidare kan ni betrakta denna funktion som experimentell, och rapportera eventuella buggar. I m\u00e4rkliga situationer kan man alltid anv\u00e4nda kategorier baserade p\u00e5 fil\u00e4ndelser, till exempel Extension\/epub.<\/p>\n<p><\/p>\n<p>Om automatiska kategorier \u00e4r aktiverade efter format, inkluderar det \u00e4ven automatiska kategorier som grupperar vissa format, s\u00e5som: &#171;Arkiv&#187;, &#171;Bilder&#187;, &#171;Video&#187;, &#171;Ljud&#187; och &#171;Dokument&#187;. Lokala namn kommer ocks\u00e5 att g\u00f6ras f\u00f6r dessa underkategorier.<\/p>\n<p><\/p>\n<h1 id=\"o-chyom-ne-skazano\">Om vad som inte n\u00e4mns<\/h1>\n<p><\/p>\n<p><em>vitis<\/em> blev en mycket m\u00e5ngfacetterad verktyg och det \u00e4r sv\u00e5rt att t\u00e4cka allt p\u00e5 en g\u00e5ng. Kort ska jag n\u00e4mna vad mer som kan g\u00f6ras:<\/p>\n<p><\/p>\n<ul>\n<li>kategorier kan tas bort och avl\u00e4gsnas fr\u00e5n filer;<\/li>\n<li>resultaten av s\u00f6kningar p\u00e5 uttryck kan kopieras till den angivna katalogen;<\/li>\n<li>filer kan k\u00f6ras som program;<\/li>\n<li>kommandot show har m\u00e5nga alternativ, till exempel sortering efter namn\/datum f\u00f6r \u00e4ndring eller \u00e5tkomst\/storlek\/\u00e4ndelse, visning av filers egenskaper och v\u00e4gar till original, inklusive visning av dolda filer m.m.;<\/li>\n<li>vid sparande av l\u00e4nkar till internetk\u00e4llor kan \u00e4ven lokala kopior av HTML-sidor sparas.<\/li>\n<\/ul>\n<p><\/p>\n<p>Alla detaljer kan hittas i anv\u00e4ndarhandledningen.<\/p>\n<p><\/p>\n<h1 id=\"perspektivy\">Framtidsutsikter<\/h1>\n<p><\/p>\n<p>Ofta s\u00e4ger skeptiker att &#171;ingen kommer att s\u00e4tta dessa taggar sj\u00e4lv&#187;. Jag kan bevisa motsatsen med mitt exempel: jag har redan kategoriserat mer \u00e4n sex tusen filer, skapat mer \u00e4n tusen kategorier och alias, och det var v\u00e4rt det. N\u00e4r man med ett enda kommando <code>vitis open Plan<\/code> \u00f6ppnar din att-g\u00f6ra-lista eller n\u00e4r du med ett kommando <code>vitis open LaTeX<\/code> \u00f6ppnar boken av Stolyarov om LaTeX layoutsystem, blir det mentalt sv\u00e5rt att anv\u00e4nda filsystemet &#171;p\u00e5 det gamla s\u00e4ttet&#187;.<\/p>\n<p><\/p>\n<p>P\u00e5 den grunden uppst\u00e5r en rad id\u00e9er. Till exempel kan man skapa en automatisk radio som spelar tematisk musik baserat p\u00e5 aktuellt v\u00e4der, helgdag, veckodag, tid p\u00e5 dygnet eller \u00e5rstid. N\u00e4ra \u00e4mnet \u00e4r en musikspelare som vet om kategorier och kan spela musik efter uttryck med operationer \u00f6ver kategorier som om de vore m\u00e4ngder. Det vore bra att skapa en daemon som \u00f6vervakar katalogen &#171;Nedladdningar&#187; och erbjuder att kategorisera nya filer. Naturligtvis skulle en bra grafisk semantisk filhanterare vara n\u00f6dv\u00e4ndig. Jag gjorde en webbtj\u00e4nst f\u00f6r kollektiva filanv\u00e4ndningar f\u00f6r f\u00f6retaget, men det var inte prioriterat och blev omodernt, \u00e4ven om det n\u00e5dde en h\u00f6g niv\u00e5 av funktionalitet. (I samband med stora f\u00f6r\u00e4ndringar i sj\u00e4lva <em>vitis<\/em>, \u00e4r den redan oanv\u00e4ndbar.)<\/p>\n<p>\n<b class=\"spoiler_title\">H\u00e4r \u00e4r en liten demonstration<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Kategorier ist\u00e4llet f\u00f6r kataloger, eller en semantisk filsystem f\u00f6r Linux\" src=\"\/wp-content\/uploads\/2019\/06\/0a8e3829424135a6bf9390d2b2654499.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">Slutsats<\/h1>\n<p><\/p>\n<p><em>Vitis<\/em> \u2014 inte det f\u00f6rsta f\u00f6rs\u00f6ket att radikalt f\u00f6r\u00e4ndra arbetsstilen med data, men jag tyckte det var viktigt att realisera mina id\u00e9er och publicera implementationen som \u00f6ppen k\u00e4llkod under licensen GNU GPL. F\u00f6r bekv\u00e4mlighet har jag gjort ett deb-paket f\u00f6r x86-64, det b\u00f6r fungera p\u00e5 alla moderna Debian-distributioner. F\u00f6r ARM uppstod det sm\u00e5 problem (\u00e4ven om alla andra program som relaterar till <em>vitis<\/em>, fungerar bra), men senare kommer det \u00e4nd\u00e5 att skapas ett fungerande paket f\u00f6r denna plattform (armhf). Jag har f\u00f6r tillf\u00e4llet slutat med skapandet av RPM-paket p\u00e5 grund av problem med Fedora 30 och problematiken i att sprida sig \u00f6ver m\u00e5nga RPM-distributioner, men senare kommer det \u00e4nd\u00e5 att g\u00f6ras paket f\u00f6r \u00e5tminstone ett par av dem. Tills dess kan man anv\u00e4nda <code>make &amp;&amp; make install<\/code> eller <code>checkinstall<\/code>.<\/p>\n<p><\/p>\n<p>Tack f\u00f6r uppm\u00e4rksamheten! Jag hoppas att denna artikel och detta projekt kan visa sig vara anv\u00e4ndbara.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/tech.vindex\/vitis\">L\u00e4nk till projektets repository<\/a><\/noindex><\/p>\n<p>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/457328\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439. \u042f \u043b\u044e\u0431\u043b\u044e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u043a\u0430\u0436\u0443\u0449\u0443\u044e\u0441\u044f \u043d\u0443\u0436\u043d\u043e\u0439, \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u0438 \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u0432\u043e \u0441\u043d\u0435 \u044f \u0443\u0432\u0438\u0434\u0435\u043b \u043a\u0440\u0430\u0441\u0438\u0432\u0443\u044e \u0438 \u0443\u0434\u043e\u0431\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u044d\u0433\u043e\u0432 \u0444\u0430\u0439\u043b\u0430\u043c, \u0438 \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0442\u0430\u043a \u0436\u0438\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0447\u0430\u0441\u0442\u043e \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26733,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-35687","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/kategorii-vmesto-direktorij-ili-semanticheskaya-fajlovaya-sistema-dlya-linux\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439, \u0438\u043b\u0438 \u0421\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f Linux | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/kategorii-vmesto-direktorij-ili-semanticheskaya-fajlovaya-sistema-dlya-linux\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:05:46+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:05:46+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Kategorier ist\u00e4llet f\u00f6r mappar, eller Semantisk filsystem f\u00f6r Linux | ProHoster","description":"Klassificering av data \u00e4r ett intressant forskningsomr\u00e5de i sig.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/kategorii-vmesto-direktorij-ili-semanticheskaya-fajlovaya-sistema-dlya-linux","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439, \u0438\u043b\u0438 \u0421\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f Linux | ProHoster","og:description":"\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439.","og:url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/kategorii-vmesto-direktorij-ili-semanticheskaya-fajlovaya-sistema-dlya-linux","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:05:46+00:00","article:modified_time":"2019-10-31T19:05:46+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35687","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 00:23:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:57:46","updated":"2026-01-22 00:23:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/35687","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=35687"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/35687\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/26733"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=35687"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=35687"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=35687"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}