Luokat hakemistojen sijaan tai semanttinen tiedostojärjestelmä Linuxille

Tietojen luokittelu itsessään on mielenkiintoinen tutkimusaihe. Rakastan tarpeelliselta näyttävien tietojen keräämistä, ja olen aina yrittänyt luoda tiedostoilleni loogisia hakemistohierarkioita, ja eräänä päivänä unessa näin kauniin ja kätevän ohjelman tiedostojen tunnisteiden määrittämiseen ja päätin, että en voi elää. näin enää.

Hierarkkisten tiedostojärjestelmien ongelma

Käyttäjät kohtaavat usein ongelman valita seuraavan uuden tiedoston tallennuspaikka ja omien tiedostojensa löytämisessä (joskus tiedostonimiä ei ole tarkoituskaan muistaa).

Pääsy ulos tilanteesta voivat olla semanttiset tiedostojärjestelmät, jotka ovat yleensä lisäosa perinteiseen tiedostojärjestelmään. Niissä olevat hakemistot korvataan semanttisilla attribuuteilla, joita kutsutaan myös tunnisteiksi, luokiksi ja metatiedoiksi. Käytän termiä "luokka" useammin, koska... Tiedostojärjestelmien yhteydessä sana "tag" on joskus hieman outo, varsinkin kun "alatunnisteet" ja "tunnisteen aliakset" esiintyvät.

Luokkien määrittäminen tiedostoille poistaa suurelta osin tiedoston tallennuksen ja etsimisen ongelmat: jos muistat (tai arvaat) ainakin yhden tiedostolle määritetyistä luokista, tiedosto ei koskaan katoa näkyvistä.

Aiemmin tämä aihe esitettiin useammin kuin kerran Habressa (aika, два, kolme, neljä jne.), tässä kuvaan ratkaisuni.

Polku oivallukseen

Heti mainitun unen jälkeen kuvailin muistikirjassani komentorajapinnan, joka tarjoaa tarvittavan työn luokkien kanssa. Sitten päätin, että viikon tai kahden kuluttua voin kirjoittaa prototyypin Pythonilla tai Bashilla, ja sitten minun on työstettävä graafisen kuoren luomista Qt: ssä tai GTK:ssa. Todellisuus, kuten aina, osoittautui paljon ankarammaksi, ja kehitys viivästyi.

Alkuperäisenä ideana oli tehdä ensin ohjelma, jossa on kätevä ja ytimekäs komentorivikäyttöliittymä, joka luo, poista luokkia, määritä tiedostoille luokkia ja poistaisi luokkia tiedostoista. Soitin ohjelmaan tulehdus.

Ensimmäinen yritys luoda tulehdus ei päättynyt mihinkään, koska paljon aikaa alettiin käyttää työhön ja yliopistoon. Toinen yritys oli jo jotain: pro gradua varten onnistuin toteuttamaan suunnitellun projektin ja jopa tekemään prototyypin GTK-kuoresta. Mutta tuo versio osoittautui niin epäluotettavaksi ja hankalaksi, että paljon piti miettiä uudelleen.

Itse asiassa käytin kolmatta versiota itse hyvin pitkään, siirtäen useita tuhansia tiedostojani luokkiin. Tätä helpotti suuresti myös toteutettu bashin viimeistely. Mutta jotkut ongelmat, kuten automaattisten luokkien puute ja kyky tallentaa samannimiset tiedostot, olivat edelleen olemassa, ja ohjelma oli jo taipunut oman monimutkaisuutensa alle. Näin tulin tarpeeseen ratkaista monimutkaisia ​​ohjelmistokehitysongelmia: kirjoittaa yksityiskohtaisia ​​vaatimuksia, kehittää toiminnallinen testausjärjestelmä, tutkia pakkausohjeita ja paljon muuta. Olen nyt saavuttanut suunnitelmani, jotta tämä nöyrä luomus voidaan esitellä vapaalle yhteisölle. Tietty tiedostojen hallinta, kuten hallinta luokkien käsitteen kautta, herättää odottamattomia ongelmia ja ongelmia sekä niiden ratkaisemisessa tulehdus poiki viisi muuta projektia ympärilleen, joista osa mainitaan artikkelissa. Tähän asti tulehdus En ole ostanut graafista kuorta, mutta tiedostoluokkien käyttämisen mukavuus komentoriviltä on jo minulle tärkeämpi kuin tavallisen graafisen tiedostonhallinnan edut.

Esimerkkejä käytöstä

Aloitetaan yksinkertaisella tavalla - luo luokka:

vitis create Музыка

Lisätään siihen esimerkkinä jokin koostumus:

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

Voit tarkastella "Musiikki"-kategorian sisältöä "show"-alikomennolla:

vitis show Музыка

Voit toistaa sen käyttämällä "open"-alikomentoa.

vitis open Музыка

Koska Jos meillä on vain yksi tiedosto "Musiikki"-luokassa, vain se käynnistyy. Tiedostojen avaamista varten niiden oletusohjelmilla tein erillisen apuohjelman vts-fs-open (Vakiotyökalut, kuten xdg-open tai mimeopen, eivät sopineet minulle useista syistä; mutta jos mikä tahansa, voit määrittää asetuksissa toisen apuohjelman yleiseen tiedostojen avaamiseen). Tämä apuohjelma toimii hyvin erilaisissa jakeluissa eri työympäristöissä, joten suosittelen sen asentamista yhdessä vitiksen kanssa.

Voit myös määrittää suoraan ohjelman tiedostojen avaamiseksi:

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

Luokat hakemistojen sijaan tai semanttinen tiedostojärjestelmä Linuxille

Luodaan lisää luokkia ja lisätään tiedostoja käyttämällä "määritä". Jos tiedostot on määritetty luokkiin, joita ei vielä ole, sinua kehotetaan luomaan ne. Tarpeeton pyyntö voidaan välttää käyttämällä -yes-lippua.

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

Nyt haluamme lisätä "Matematiikka" -kategorian tiedostoon "Tilastopaketti R: todennäköisyysteoria ja matemaattiset tilastot.pdf". Tiedämme, että tämä tiedosto on jo luokiteltu "R":ksi ja siksi voimme käyttää Vitis-järjestelmän luokkapolkua:

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

Onneksi bashin viimeistely tekee tämän helpoksi.

Katsotaanpa mitä tapahtui käyttämällä --categories-lippua nähdäksesi luettelon kunkin tiedoston luokista:

vitis show R --categories

Luokat hakemistojen sijaan tai semanttinen tiedostojärjestelmä Linuxille

Huomaa, että tiedostot on myös automaattisesti luokiteltu muodon, tyypin (yhdistää muodot) ja tiedostotunnisteen mukaan. Nämä luokat voidaan haluttaessa poistaa käytöstä. Myöhemmin tulen varmasti lokalisoimaan heidän nimensä.

Lisätään "Matematiikkaan" jotain muuta vaihtelun vuoksi:

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

Ja nyt asiat ovat mielenkiintoisia. Kategorioiden sijasta voit kirjoittaa lausekkeita yhdistämis-, leikkaus- ja vähennyslaskuoperaatioilla, eli käyttää operaatioita joukkoihin. Esimerkiksi "Math":n ja "R":n leikkaus johtaa yhteen tiedostoon.

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

Vähennetään viittaukset kieleen "R" "matematiikasta":

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

Voimme yhdistää musiikin ja R-kielen päämäärättömästi:

vitis show Музыка u: R

Lippu -n mahdollistaa vaadittujen tiedostojen "vetämisen" pyynnön tuloksesta numeroiden ja/tai alueiden mukaan, esim. -n 3-7tai jotain monimutkaisempaa: -n 1,5,8-10,13. Se on usein hyödyllinen avoimen alikomennon kanssa, jonka avulla voit avata haluamasi tiedostot luettelosta.

Luokat hakemistojen sijaan tai semanttinen tiedostojärjestelmä Linuxille

Vaikka olemme siirtymässä pois perinteisen hakemistohierarkian käytöstä, sisäkkäisten luokkien käyttö on usein hyödyllistä. Luodaan "Matematiikka"-kategoriaan alaluokka "Tilastot" ja lisätään tämä luokka sopivaan tiedostoon:

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

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

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

Luokat hakemistojen sijaan tai semanttinen tiedostojärjestelmä Linuxille

Voimme nähdä, että tässä tiedostossa on nyt luokka "Math/Statistics" "Math" sijaan (lisälinkkejä seurataan).

Koko polun osoittaminen voi olla hankalaa, luodaan "globaali" alias:

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

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

Luokat hakemistojen sijaan tai semanttinen tiedostojärjestelmä Linuxille

Ei vain tavallisia tiedostoja

Internet-linkit

Tietojen tallennuksen yhtenäistämiseksi olisi hyödyllistä ainakin luokitella linkit Internet-resursseihin. Ja tämä on mahdollista:

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

Erityiseen paikkaan luodaan tiedosto, jossa on HTML-sivun otsikko ja tunniste .desktop. Tämä on perinteinen pikakuvakemuoto GNU/Linuxissa. Tällaiset pikakuvakkeet luokitellaan automaattisesti Verkkokirjanmerkeiksi.

Luonnollisesti pikakuvakkeet luodaan käytettäviksi:

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

Komennon suorittaminen avaa äskettäin tallennettu linkin selaimessa. Luokitetut pikakuvakkeet Internet-lähteisiin voivat korvata selaimen kirjanmerkit.

Tiedoston fragmentit

On myös hyödyllistä luoda luokkia yksittäisille tiedostoille. Ei huono pyyntö, vai mitä? Mutta nykyinen toteutus vaikuttaa vain tekstitiedostoihin, ääni- ja videotiedostoihin. Oletetaan, että sinun täytyy merkitä tietty osa konserttia tai hauska hetki elokuvassa, sitten assign-toimintoa käytettäessä voit käyttää lippuja -fragname, -start, -finish. Tallennetaan näytönsäästäjä "DuckTalesista":

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

vitis open Заставки

Todellisuudessa tiedostoa ei leikata, vaan fragmenttiin luodaan osoitintiedosto, joka kuvaa tiedostotyypin, tiedoston polun, fragmentin alun ja lopun. Fragmenttien osoittimien luominen ja avaaminen on delegoitu apuohjelmille, jotka olen tehnyt erityisesti näitä tarkoituksia varten - nämä ovat mediafragmenter ja fragplayer. Ensimmäinen luo, toinen avautuu. Ääni- ja videotallenteiden tapauksessa mediatiedosto käynnistetään VLC-soittimella tietystä paikasta tiettyyn kohtaan, joten sen on oltava myös järjestelmässä. Aluksi halusin tehdä tämän mplayerin pohjalta, mutta jostain syystä se meni hyvin vinoon paikannuksella oikealla hetkellä.
Esimerkissämme luodaan tiedosto "Duck Tales intro.fragpointer" (se sijoitetaan erityiseen paikkaan), jonka jälkeen fragmenttia toistetaan tiedoston alusta (koska –alkua ei määritetty luotaessa) 59. toinen merkki, jonka jälkeen VLC sulkeutuu .

Toinen esimerkki on, kun päätimme luokitella yksittäisen esityksen kuuluisan artistin konsertissa:

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

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

Avattaessa tiedosto sisällytetään haluttuun paikkaan ja sulkeutuu neljän ja puolen minuutin kuluttua.

Kuinka se kaikki toimii + lisäominaisuudet

Luokkien tallennus

Semanttisen tiedostojärjestelmän järjestämisen miettimisen alussa tuli mieleen kolme tapaa: symbolisten linkkien tallentaminen, tietokannan kautta, XML-kuvauksen kautta. Ensimmäinen menetelmä voitti, koska... toisaalta se on helppo toteuttaa, ja toisaalta käyttäjällä on mahdollisuus tarkastella luokkia suoraan tiedostojärjestelmästä (ja tämä on kätevää ja tärkeää). Käytön alussa tulehdus "Vitis"-hakemisto ja ".config/vitis/vitis.conf"-määritystiedosto luodaan käyttäjän kotihakemistoon. Luokkia vastaavat hakemistot luodaan ~/Vitis -hakemistoon ja symboliset linkit alkuperäisiin tiedostoihin luodaan näihin luokkahakemistoihin. Luokkien aliakset ovat myös vain linkkejä niihin. Tietenkin "Vitis"-hakemiston läsnäolo kotihakemistossa ei välttämättä sovi joillekin ihmisille. Voimme vaihtaa mihin tahansa muuhun paikkaan:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

Jossain vaiheessa käy selväksi, että eri paikkoihin hajallaan olevien tiedostojen luokittelussa ei ole mitään järkeä, koska niiden sijainti voi muuttua. Siksi aluksi loin itselleni hakemiston, johon upotin typerästi kaiken ja annoin sille kaikki luokat. Sitten päätin, että olisi mukava virallistaa tämä hetki ohjelmatasolla. Näin syntyi käsite "tiedostotila". Käytön alussa tulehdus Ei haittaisi heti määrittää tällainen sijainti (kaikki tarvitsemamme tiedostot tallennetaan sinne) ja ottaa käyttöön automaattinen tallennus:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Ilman automaattista tallennusta käytettäessä "assign"-alikomentoa tarvitaan --save-lippu, jos haluat tallentaa lisätyn tiedoston tiedostotilaan.

Lisäksi voit lisätä useita tiedostotiloja ja muuttaa niiden prioriteetteja; tämä voi olla hyödyllistä, kun tiedostoja on paljon ja ne on tallennettu eri tietovälineille. En harkitse tätä mahdollisuutta tässä, lisätietoja löytyy ohjelman ohjeesta.

Semanttinen tiedostojärjestelmän siirto

Joka tapauksessa Vitis-hakemisto ja tiedostotilat voivat teoriassa joskus liikkua paikasta toiseen. Jotta se toimisi, loin erillisen apuohjelman linkkieditori, joka voi joukkomuokata linkkejä ja korvata polun osia muilla:

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

Ensimmäisessä tapauksessa, kun olemme siirtyneet hakemistosta /mnt/MyFavoriteDisk/Vitis/ kotihakemistoon, aliaksiin liittyviä symbolisia linkkejä muokataan. Toisessa tapauksessa tiedostotilan sijainnin muuttamisen jälkeen kaikki Vitisin linkit vaihdetaan uusiin pyynnön mukaisesti korvata osa niiden polusta.

Automaattiset luokat

Jos suoritat komennon vitis service get autocategorization, näet, että oletusarvoisesti automaattiset luokat määritetään muodon (muoto ja tyyppi) ja tiedostotunnisteen (laajennus) mukaan.

Tästä on hyötyä esimerkiksi silloin, kun haluat löytää jotain PDF-tiedostojen joukosta tai katsoa mitä olet tallentanut EPUB:sta ja FB2:sta, voit suorittaa pyynnön

vitis show Format/MOBI u: Format/FB2

Sattui vain niin, että tavalliset GNU/Linux-työkalut, kuten tiedosto tai mimetyyppi, eivät sopineet minulle juuri siksi, että ne eivät aina määritä muotoa oikein, vaan minun piti tehdä oma toteutus tiedostojen allekirjoitusten ja laajennuksien perusteella. Yleisesti ottaen tiedostomuotojen määrittelyn aihe on mielenkiintoinen tutkimusaihe ja ansaitsee erillisen artikkelin. Toistaiseksi voin sanoa, että ehkä en ole antanut todellista tunnustusta kaikille maailman formaateille, mutta yleisesti ottaen se toimii jo hyvin. Totta, EPUB määrittelee nyt muodon ZIP:ksi (yleensä tämä on perusteltua, mutta käytännössä tätä ei pitäisi pitää normaalina käytöksenä). Pidä tätä ominaisuutta toistaiseksi kokeellisena ja ilmoita mahdollisista virheistä. Oudoissa tilanteissa voit aina käyttää tiedostopääteluokkia, esimerkiksi Extension/epub.

Jos automaattiset luokat muodon mukaan ovat käytössä, myös autoluokat, jotka ryhmittelevät joitakin muotoja tyypin mukaan, ovat käytössä: "Arkistot", "Kuvat", "Video", "Ääni" ja "Asiakirjat". Näille alaluokille tehdään myös lokalisoidut nimet.

Mitä ei sanota

tulehdus Se osoittautui erittäin monipuoliseksi työkaluksi, ja kaikkea on vaikea kattaa kerralla. Mainitsen lyhyesti, mitä muuta voit tehdä:

  • luokat voidaan poistaa ja poistaa tiedostoista;
  • lausekekyselyiden tulokset voidaan kopioida määritettyyn hakemistoon;
  • tiedostoja voidaan ajaa ohjelmina;
  • Show-komennolla on monia vaihtoehtoja, esimerkiksi lajittelu nimen/muokkauspäivämäärän tai käyttöoikeuden/koon/laajennuksen mukaan, tiedostojen ominaisuuksien ja alkuperäisten polkujen näyttäminen, piilotettujen tiedostojen näyttäminen jne.;
  • Kun tallennat linkkejä Internet-lähteisiin, voit myös tallentaa paikallisia kopioita HTML-sivuista.

Täydelliset tiedot löytyvät käyttäjän ohjeesta.

Tulevaisuudennäkymät

Skeptikot sanovat usein, että "kukaan ei aseta näitä tunnisteita itse". Omalla esimerkilläni voin todistaa päinvastaisen: olen jo luokitellut yli kuusi tuhatta tiedostoa, luonut yli tuhat luokkaa ja aliaksia, ja se kannatti. Kun yksi joukkue vitis open План avaa tehtävälistasi tai milloin yhdellä komennolla vitis open LaTeX Kun avaat Stolyarovin kirjan LaTeX-asettelujärjestelmästä, on jo moraalisesti vaikeaa käyttää tiedostojärjestelmää "vanhanaikaiseen tapaan".

Tältä pohjalta syntyy useita ideoita. Voit esimerkiksi tehdä automaattisen radion, joka käynnistää teemamusiikin vallitsevan sään, loman, viikonpäivän, kellonajan tai vuoden mukaan. Vielä lähempänä aihetta on musiikkisoitin, joka tuntee kategoriat ja osaa soittaa musiikkia ilmaisujen avulla kategorioiden kuten sarjojen operaatioilla. On hyödyllistä tehdä demoni, joka valvoo "Lataukset"-hakemistoa ja tarjoaa uusien tiedostojen luokittelun. Ja tietysti meidän pitäisi tehdä normaali graafinen semanttinen tiedostohallinta. Kerran olen jopa luonut yritykselle verkkopalvelun tiedostojen kollektiivista käyttöä varten, mutta se ei ollut prioriteetti ja muuttui merkityksettömäksi, vaikka saavuttikin korkean suorituskyvyn. (Suurimpien muutosten vuoksi tulehdus, se ei ole enää käyttökelpoinen.)

tässä pieni demo

Luokat hakemistojen sijaan tai semanttinen tiedostojärjestelmä Linuxille

Johtopäätös

tulehdus ei ole ensimmäinen yritys muuttaa radikaalisti datan kanssa työskentelytyyliä, mutta pidin tärkeänä toteuttaa ideani ja tuoda toteutuksen julkisesti saataville GNU GPL -lisenssillä. Mukavuuden vuoksi x86-64:lle on tehty deb-paketti, jonka pitäisi toimia kaikissa nykyaikaisissa Debian-jakeluissa. ARM:ssa oli pieniä vaikeuksia (kun taas kaikki muut ohjelmat liittyivät tulehdus, toimivat hyvin), mutta tulevaisuudessa tälle alustalle (armhf) kootaan toimiva paketti. Olen toistaiseksi lopettanut RPM-pakettien luomisen Fedora 30:n ongelmien ja monien RPM-jakelujen välillä leviämisen vaikeuden vuoksi, mutta ainakin muutamalle niistä tehdään vielä myöhempiä paketteja. Sillä välin voit käyttää make && make install tai checkinstall.

Kiitos kaikille huomiosta! Toivon, että tämä artikkeli ja tämä projekti voivat olla hyödyllisiä.

Linkki projektivarastoon

Lähde: will.com

Lisää kommentti