Kategorijas direktoriju vietā vai semantiskā failu sistēma Linux

Pati datu klasifikācija ir interesanta pētījuma tēma. Man patīk vākt informāciju, kas šķiet nepieciešama, un vienmēr esmu mēģinājis saviem failiem izveidot loģiskas direktoriju hierarhijas, un kādu dienu sapnī es redzēju skaistu un ērtu programmu tagu piešķiršanai failiem, un es nolēmu, ka es nevaru dzīvot. kā šis vairs.

Hierarhisko failu sistēmu problēma

Lietotāji bieži saskaras ar problēmu izvēlēties, kur saglabāt nākamo jauno failu, un problēmu atrast savus failus (dažreiz failu nosaukumi nemaz nav paredzēti, lai persona tos atcerētos).

Izeja no situācijas var būt semantiskās failu sistēmas, kas parasti ir tradicionālās failu sistēmas papildinājums. Katalogi tajos tiek aizstāti ar semantiskiem atribūtiem, ko sauc arī par tagiem, kategorijām un metadatiem. Biežāk lietošu terminu “kategorija”, jo... Failu sistēmu kontekstā vārds "tag" dažreiz ir nedaudz dīvains, it īpaši, ja parādās "apakštags" un "tagu aizstājvārdi".

Kategoriju piešķiršana failiem lielā mērā novērš faila saglabāšanas un meklēšanas problēmu: ja atceraties (vai uzminējat) vismaz vienu no failam piešķirtajām kategorijām, fails nekad nepazudīs no skata.

Iepriekš šī tēma vairāk nekā vienu reizi tika izvirzīta vietnē Habré (laiks, два, trīs, četri utt.), šeit es aprakstu savu risinājumu.

Ceļš uz realizāciju

Uzreiz pēc minētā sapņa savā piezīmju grāmatiņā aprakstīju komandu interfeisu, kas nodrošina nepieciešamo darbu ar kategorijām. Tad es nolēmu, ka pēc nedēļas vai divām varēšu uzrakstīt prototipu, izmantojot Python vai Bash, un tad man būs jāstrādā pie grafiskā apvalka izveides Qt vai GTK. Realitāte, kā vienmēr, izrādījās daudz skarbāka, un attīstība aizkavējās.

Sākotnējā ideja bija vispirms izveidot programmu ar ērtu un kodolīgu komandrindas interfeisu, kas veidotu, dzēstu kategorijas, piešķirtu kategorijas failiem un dzēstu kategorijas no failiem. Es piezvanīju programmai vīts.

Pirmais mēģinājums izveidot vīts beidzās ar neko, jo daudz laika sāka pavadīt darbam un koledžai. Otrais mēģinājums jau bija kaut kas: maģistra darbam izdevās pabeigt plānoto projektu un pat izgatavot GTK čaulas prototipu. Taču šī versija izrādījās tik neuzticama un neērta, ka daudz kas bija jāpārdomā.

Trešo versiju es patiešām izmantoju pats ļoti ilgu laiku, pārskaitot vairākus tūkstošus savu failu kategorijās. To lielā mērā veicināja arī īstenotā bash pabeigšana. Tomēr dažas problēmas, piemēram, automātisko kategoriju trūkums un iespēja saglabāt tāda paša nosaukuma failus, joprojām pastāvēja, un programma jau bija saliekta savā sarežģītībā. Tā es nonācu pie nepieciešamības atrisināt sarežģītas programmatūras izstrādes problēmas: uzrakstīt detalizētas prasības, izstrādāt funkcionālās testēšanas sistēmu, izpētīt iepakojuma instrukcijas un daudz ko citu. Tagad esmu nonācis pie sava plāna, lai šo pazemīgo radījumu varētu prezentēt brīvajai sabiedrībai. Īpaša failu pārvaldība, piemēram, pārvaldība, izmantojot kategoriju koncepciju, rada negaidītas problēmas un problēmas, kā arī to risināšanā vīts radīja ap sevi vēl piecus projektus, no kuriem daži tiks minēti rakstā. Līdz šim brīdim vīts Es neesmu iegādājies grafisko čaulu, bet ērtība, izmantojot komandrindas failu kategorijas, man jau atsver visas parastā grafiskā failu pārvaldnieka priekšrocības.

Lietošanas piemēri

Sāksim vienkārši – izveidojiet kategoriju:

vitis create Музыка

Kā piemēru pievienosim tam kādu kompozīciju:

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

Kategorijas “Mūzika” saturu var apskatīt, izmantojot apakškomandu “show”:

vitis show Музыка

Varat to atskaņot, izmantojot apakškomandu “atvērt”.

vitis open Музыка

Jo Ja mums kategorijā “Mūzika” ir tikai viens fails, tiks palaists tikai tas. Lai atvērtu failus ar to noklusējuma programmām, es izveidoju atsevišķu utilītu vts-fs-open (standarta rīki, piemēram, xdg-open vai mimeopen, man nederēja vairāku iemeslu dēļ; bet, ja kas, iestatījumos varat norādīt citu utilītu universālai failu atvēršanai). Šī utilīta labi darbojas dažādos izplatījumos ar dažādām darba vidēm, tāpēc iesaku to instalēt kopā ar vitis.

Varat arī tieši norādīt programmu failu atvēršanai:

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

Kategorijas direktoriju vietā vai semantiskā failu sistēma Linux

Izveidosim vairāk kategoriju un pievienosim failus, izmantojot “piešķirt”. Ja faili ir piešķirti kategorijām, kuras vēl neeksistē, jums tiek piedāvāts tās izveidot. No nevajadzīga pieprasījuma var izvairīties, izmantojot karogu -yes.

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

Tagad failam “Statistikas pakete R: varbūtības teorija un matemātiskā statistika.pdf” vēlamies pievienot kategoriju “Matemātika”. Mēs zinām, ka šis fails jau ir iedalīts kategorijā "R", un tāpēc mēs varam izmantot kategorijas ceļu no sistēmas Vitis:

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

Par laimi, bash pabeigšana to atvieglo.

Apskatīsim, kas notika, izmantojot karodziņu --categories, lai skatītu katra faila kategoriju sarakstu:

vitis show R --categories

Kategorijas direktoriju vietā vai semantiskā failu sistēma Linux

Ņemiet vērā, ka faili ir arī automātiski klasificēti kategorijās pēc formāta, veida (apvieno formātus) un faila paplašinājuma. Ja vēlaties, šīs kategorijas var atspējot. Vēlāk noteikti lokalizēšu viņu vārdus.

Papildināsim “matemātikai” kaut ko citu:

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

Un tagad lietas kļūst interesantas. Kategoriju vietā var rakstīt izteiksmes ar savienošanas, krustojuma un atņemšanas operācijām, tas ir, izmantot darbības kopām. Piemēram, "Math" krustošanās ar "R" radīs vienu failu.

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

Atņemsim atsauces uz valodu “R” no “matemātikas”:

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

Mēs varam bezmērķīgi apvienot mūziku un R valodu:

vitis show Музыка u: R

Karogs -n ļauj “izvilkt” nepieciešamos failus no pieprasījuma rezultāta pēc skaitļiem un/vai diapazoniem, piemēram, -n 3-7vai kaut kas sarežģītāks: -n 1,5,8-10,13. Bieži vien tas ir noderīgi ar atvērto apakškomandu, kas ļauj atvērt vajadzīgos failus no saraksta.

Kategorijas direktoriju vietā vai semantiskā failu sistēma Linux

Kamēr mēs vairs neizmantojam parasto direktoriju hierarhiju, bieži vien ir noderīgi izmantot ligzdotas kategorijas. Kategorijā “Matemātika” izveidosim apakškategoriju “Statistika” un pievienosim šo kategoriju atbilstošajam failam:

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

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

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

Kategorijas direktoriju vietā vai semantiskā failu sistēma Linux

Mēs redzam, ka šim failam tagad ir kategorija “Math/Statistics”, nevis “Math” (tiek izsekotas papildu saites).

Pilna ceļa adresēšana var būt neērta, izveidosim “globālo” aizstājvārdu:

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

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

Kategorijas direktoriju vietā vai semantiskā failu sistēma Linux

Ne tikai parastie faili

Interneta saites

Lai vienotu jebkādas informācijas glabāšanu, būtu lietderīgi vismaz kategorizēt saites uz interneta resursiem. Un tas ir iespējams:

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

Īpašā vietā tiks izveidots fails ar HTML lapas galveni un paplašinājumu .desktop. Šis ir tradicionālais GNU/Linux saīsnes formāts. Šādi īsceļi tiek automātiski klasificēti kā tīkla grāmatzīmes.

Protams, tiek izveidoti saīsnes lietošanai:

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

Izpildot komandu, pārlūkprogrammā tiek atvērta tikko saglabātā saite. Kategorizētās saīsnes uz interneta avotiem var aizstāt pārlūkprogrammas grāmatzīmes.

Failu fragmenti

Ir arī noderīgi izveidot kategorijas atsevišķām failu daļām. Nav slikts pieprasījums, vai ne? Taču pašreizējā ieviešana līdz šim ietekmē tikai teksta failus, audio un video failus. Pieņemsim, ka filmā jāatzīmē noteikta koncerta daļa vai smieklīgs brīdis, tad, izmantojot assign, var izmantot karogus -fragname, -start, -finish. Saglabāsim ekrānsaudzētāju no "DuckTales":

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

vitis open Заставки

Patiesībā fails netiek izgriezts, tā vietā tiek izveidots rādītāja fails uz fragmentu, kas apraksta faila tipu, ceļu uz failu, fragmenta sākumu un beigas. Rādītāju uz fragmentiem izveide un atvēršana ir deleģēta utilītprogrammām, kuras es speciāli izveidoju šiem nolūkiem - tie ir multivides fragmenti un fragplayer. Pirmais rada, otrais atveras. Audio un video ierakstu gadījumā multivides fails tiek palaists no noteiktas uz noteiktu pozīciju, izmantojot VLC atskaņotāju, tātad tam ir jābūt arī sistēmā. Sākumā es gribēju to darīt, pamatojoties uz mplayer, bet nez kāpēc tas bija ļoti greizs ar pozicionēšanu īstajā brīdī.
Mūsu piemērā tiek izveidots fails “Duck Tales intro.fragpointer” (novietots īpašā vietā), un pēc tam tiek atskaņots fragments no faila sākuma (jo veidojot netika norādīts starts) līdz 59. otrā atzīme, pēc kuras VLC aizveras .

Vēl viens piemērs ir tas, kad mēs nolēmām klasificēt atsevišķu priekšnesumu slavena mākslinieka koncertā:

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

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

Atverot failu, tas tiks iekļauts vēlamajā pozīcijā un tiks aizvērts pēc četrarpus minūtēm.

Kā tas viss darbojas + papildu funkcijas

Kategoriju uzglabāšana

Jau pašā sākumā, domājot par semantiskās failu sistēmas organizēšanu, prātā ienāca trīs veidi: caur simbolisku saišu glabāšanu, caur datu bāzi, ar aprakstu XML formātā. Pirmā metode uzvarēja, jo... no vienas puses, to ir viegli ieviest, un, no otras puses, lietotājam ir iespēja apskatīt kategorijas tieši no failu sistēmas (un tas ir ērti un svarīgi). Lietošanas sākumā vīts Lietotāja mājas direktorijā tiek izveidots direktorijs “Vitis” un konfigurācijas fails “.config/vitis/vitis.conf”. ~/Vitis tiek izveidoti kategorijām atbilstošie direktoriji, un šajos kategoriju direktorijos tiek izveidotas simboliskas saites uz oriģinālajiem failiem. Arī kategoriju aizstājvārdi ir tikai saites uz tiem. Protams, dažiem cilvēkiem direktorija “Vitis” klātbūtne mājas direktorijā var nebūt piemērota. Mēs varam pārslēgties uz jebkuru citu vietu:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

Noteiktā brīdī kļūst skaidrs, ka nav jēgas klasificēt failus, kas izkaisīti dažādās vietās, jo to atrašanās vieta var mainīties. Tāpēc, lai sāktu, es izveidoju sev direktoriju, kurā es stulbi visu izgāzu un iedevu visas kategorijas. Tad nolēmu, ka būtu jauki šo brīdi noformēt programmas līmenī. Tādā veidā parādījās jēdziens “failu telpa”. Lietošanas sākumā vīts Nenāktu par ļaunu nekavējoties iestatīt šādu atrašanās vietu (tur tiks saglabāti visi nepieciešamie faili) un iespējot automātisko saglabāšanu:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Bez automātiskās saglabāšanas, izmantojot apakškomandu "piešķirt", būs nepieciešams karogs --save, ja vēlaties saglabāt pievienoto failu faila vietā.

Turklāt varat pievienot vairākas faila vietas un mainīt to prioritātes; tas var būt noderīgi, ja failu ir daudz un tie tiek glabāti dažādos datu nesējos. Es šo iespēju šeit neapsvēršu; sīkāku informāciju var atrast programmas palīdzībā.

Semantiskās failu sistēmas migrācija

Jebkurā gadījumā Vitis direktorijs un failu telpas teorētiski dažreiz var pārvietoties no vienas vietas uz otru. Lai tas darbotos, es izveidoju atsevišķu utilītu saišu redaktors, kas var lielapjoma rediģēt saites, aizstājot ceļa daļas ar citām:

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

Pirmajā gadījumā pēc tam, kad esam pārcēlušies no /mnt/MyFavoriteDisk/Vitis/ uz mājas direktoriju, tiek rediģētas ar aizstājvārdiem saistītās simboliskās saites. Otrajā gadījumā pēc faila vietas atrašanās vietas maiņas visas Vitis saites tiek mainītas uz jaunām saskaņā ar pieprasījumu aizstāt daļu no to ceļa.

Automātiskās kategorijas

Ja palaižat komandu vitis service get autocategorization, varat redzēt, ka pēc noklusējuma automātiskās kategorijas tiek piešķirtas pēc formāta (Formāts un veids) un faila paplašinājuma (Paplašinājums).

Tas ir noderīgi, ja, piemēram, jums ir jāatrod kaut kas starp PDF failiem vai jāskatās, ko esat saglabājis no EPUB un FB2, varat vienkārši izpildīt pieprasījumu

vitis show Format/MOBI u: Format/FB2

Tā sagadījās, ka standarta GNU/Linux rīki, piemēram, fails vai mime tips, man nederēja tieši tāpēc, ka tie ne vienmēr pareizi nosaka formātu; man bija jāizveido sava ieviešana, pamatojoties uz failu parakstiem un paplašinājumiem. Kopumā failu formātu noteikšanas tēma ir interesanta izpētes tēma, un tā ir pelnījusi atsevišķu rakstu. Pagaidām varu teikt, ka, iespējams, neesmu nodrošinājis patiesu atpazīstamību visiem formātiem pasaulē, bet kopumā tas jau darbojas labi. Tiesa, EPUB formātu tagad definē kā ZIP (kopumā tas ir pamatoti, taču praksē to nevajadzētu uzskatīt par normālu rīcību). Pagaidām uzskatiet šo funkciju par eksperimentālu un ziņojiet par visām kļūdām. Dīvainās situācijās vienmēr varat izmantot failu paplašinājumu kategorijas, piemēram, Extension/epub.

Ja ir iespējotas automātiskās kategorijas pēc formāta, tiek iespējotas arī automātiskās kategorijas, kas grupē dažus formātus pēc veida: “Arhīvi”, “Attēli”, “Video”, “Audio” un “Dokumenti”. Šīm apakškategorijām tiks izveidoti arī lokalizēti nosaukumi.

Kas nav pateikts

vīts Tas izrādījās ļoti daudzpusīgs rīks, un ir grūti aptvert visu uzreiz. Ļaujiet man īsi pieminēt, ko vēl varat darīt:

  • kategorijas var izdzēst un noņemt no failiem;
  • izteiksmes vaicājumu rezultātus var iekopēt norādītajā direktorijā;
  • failus var palaist kā programmas;
  • Komandai parādīt ir daudz iespēju, piemēram, kārtošana pēc nosaukuma/modifikācijas datuma vai piekļuves/izmēra/paplašinājuma, faila rekvizītu un ceļu uz oriģināliem parādīšana, slēpto failu parādīšanas iespējošana utt.;
  • Saglabājot saites uz interneta avotiem, varat saglabāt arī vietējās HTML lapu kopijas.

Pilnu informāciju var atrast lietotāja palīdzībā.

Perspektīvas

Skeptiķi bieži saka, ka "neviens pats neuzliks šīs atzīmes". Izmantojot savu piemēru, es varu pierādīt pretējo: esmu jau kategorizējis vairāk nekā sešus tūkstošus failu, izveidojis vairāk nekā tūkstoti kategoriju un aizstājvārdu, un tas bija tā vērts. Kad viena komanda vitis open План atveriet savu uzdevumu sarakstu vai kad ar vienu komandu vitis open LaTeX Atverot Stoļarova grāmatu par LaTeX izkārtojuma sistēmu, jau ir morāli grūti izmantot failu sistēmu “vecmodīgā veidā”.

Pamatojoties uz to, rodas vairākas idejas. Piemēram, varat izveidot automātisku radio, kas ieslēdz tematisko mūziku atbilstoši pašreizējiem laikapstākļiem, svētkiem, nedēļas dienai, diennakts vai gada laikam. Vēl tuvāk tēmai ir mūzikas atskaņotājs, kas zina par kategorijām un var atskaņot mūziku pēc izteiksmes ar darbībām kategorijās kā komplektos. Ir lietderīgi izveidot dēmonu, kas uzraudzīs direktoriju "Lejupielādes" un piedāvās klasificēt jaunus failus. Un, protams, mums vajadzētu izveidot normālu grafisko semantisko failu pārvaldnieku. Kādreiz es pat izveidoju uzņēmumam tīmekļa pakalpojumu kolektīvai failu lietošanai, taču tas nebija prioritāte un kļuva nenozīmīgs, lai gan tas sasniedza augstu veiktspējas līmeni. (Sakarā ar būtiskām izmaiņām vīts, tas vairs nav lietojams.)

šeit ir neliela demonstrācija

Kategorijas direktoriju vietā vai semantiskā failu sistēma Linux

Secinājums

Vītis nav pirmais mēģinājums radikāli mainīt darba stilu ar datiem, taču uzskatīju par svarīgu īstenot savas idejas un padarīt ieviešanu publiski pieejamu ar GNU GPL licenci. Ērtības labad ir izveidota deb pakotne priekš x86-64; tai vajadzētu darboties visos mūsdienu Debian izplatījumos. Ar ARM bija nelielas grūtības (kamēr visas pārējās programmas bija saistītas ar vīts, darbojas labi), bet nākotnē šai platformai (armhf) tiks apkopota darba pakete. Pagaidām esmu pārtraucis RPM pakotņu veidošanu Fedora 30 problēmu dēļ un grūtību dēļ izplatīties pa daudziem RPM izplatījumiem, taču vismaz dažiem no tiem joprojām tiks izveidotas vēlākas pakotnes. Pa to laiku jūs varat izmantot make && make install vai checkinstall.

Paldies visiem par uzmanību! Es ceru, ka šis raksts un šis projekts var būt noderīgs.

Saite uz projekta repozitoriju

Avots: www.habr.com

Pievieno komentāru