Dizinler yerine kategoriler veya Linux için Anlamsal dosya sistemi

Veri sınıflandırmanın kendisi ilginç bir araştırma konusudur. Gerekli görünen bilgileri toplamayı seviyorum ve her zaman dosyalarım için mantıksal dizin hiyerarşileri oluşturmaya çalıştım ve bir gün rüyamda dosyalara etiket atamak için güzel ve kullanışlı bir program gördüm ve yaşayamayacağıma karar verdim artık böyle.

Hiyerarşik dosya sistemleri sorunu

Kullanıcılar genellikle bir sonraki yeni dosyayı nereye kaydedeceklerini seçme sorunu ve kendi dosyalarını bulma sorunuyla karşı karşıya kalır (bazen dosya adlarının bir kişi tarafından hatırlanması amaçlanmaz).

Bu durumdan çıkmanın bir yolu, genellikle geleneksel dosya sistemine bir eklenti olan anlamsal dosya sistemleri olabilir. İçlerindeki dizinlerin yerini etiketler, kategoriler ve meta veriler olarak da adlandırılan anlamsal nitelikler alır. “Kategori” terimini daha sık kullanacağım çünkü... Dosya sistemleri bağlamında, "etiket" kelimesi bazen biraz tuhaf gelebilir, özellikle de "alt etiketler" ve "etiket takma adları" göründüğünde.

Dosyalara kategori atamak, bir dosyayı saklama ve arama sorununu büyük ölçüde ortadan kaldırır: Bir dosyaya atanan kategorilerden en az birini hatırlarsanız (veya tahmin ederseniz), dosya hiçbir zaman görünümden kaybolmaz.

Daha önce bu konu Habré'de birden fazla kez gündeme getirilmişti (zaman, iki, üç, dört vb.), burada çözümümü açıklıyorum.

Gerçekleşmeye Giden Yol

Bahsedilen rüyanın hemen ardından not defterimde kategorilerle gerekli çalışmayı sağlayan komut arayüzünü anlattım. Sonra bir veya iki hafta içinde Python veya Bash kullanarak bir prototip yazabileceğime ve ardından Qt veya GTK'da grafiksel bir kabuk oluşturmaya çalışmam gerektiğine karar verdim. Gerçek her zaman olduğu gibi çok daha sert çıktı ve geliştirme gecikti.

Orijinal fikir, öncelikle kullanışlı ve kısa bir komut satırı arayüzüne sahip, kategorileri oluşturacak, silecek, dosyalara kategori atayacak ve dosyalardan kategorileri silecek bir program yapmaktı. programı aradım Vitis.

İlk yaratma girişimi Vitis İşe ve üniversiteye çok zaman harcanmaya başladığı için hiçbir şeyle sonuçlanmadı. İkinci girişim zaten bir şeydi: Yüksek lisans tezi için planlanan projeyi tamamlamayı ve hatta GTK kabuğunun bir prototipini yapmayı başardım. Ancak bu versiyonun o kadar güvenilmez ve kullanışsız olduğu ortaya çıktı ki, birçok şeyin yeniden düşünülmesi gerekti.

Aslında üçüncü sürümü çok uzun süre kendim kullandım, binlerce dosyamı kategorilere aktardım. Bu aynı zamanda uygulanan bash tamamlamayla da büyük ölçüde kolaylaştırıldı. Ancak otomatik kategorilerin olmaması ve aynı addaki dosyaları saklama yeteneği gibi bazı sorunlar hâlâ devam ediyordu ve program zaten kendi karmaşıklığı altında bükülmüştü. Karmaşık yazılım geliştirme sorunlarını çözme ihtiyacına bu şekilde ulaştım: ayrıntılı gereksinimler yazın, işlevsel bir test sistemi geliştirin, paketleme talimatlarını inceleyin ve çok daha fazlası. Artık bu mütevazi eserin özgür topluluğa sunulabilmesi için planıma ulaştım. Kategori kavramı yoluyla yönetim gibi özel dosya yönetimi, beklenmeyen sorunları ve sorunları ortaya çıkarır ve bunların çözümünde Vitis kendi çevresinde beş proje daha ortaya çıkardı; bunlardan bazılarına makalede değinilecektir. Şimdiye kadar Vitis Grafiksel bir kabuk satın almadım, ancak dosya kategorilerini komut satırından kullanmanın rahatlığı benim için zaten normal bir grafiksel dosya yöneticisinin avantajlarından daha ağır basıyor.

Примеры использования

Basit başlayalım - bir kategori oluşturun:

vitis create Музыка

Örnek olarak bir kompozisyon ekleyelim:

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

“Müzik” kategorisinin içeriğini “göster” alt komutunu kullanarak görüntüleyebilirsiniz:

vitis show Музыка

“Aç” alt komutunu kullanarak oynatabilirsiniz.

vitis open Музыка

Çünkü “Müzik” kategorisinde yalnızca bir dosyamız varsa, yalnızca o dosya başlatılacaktır. Dosyaları varsayılan programlarıyla açmak amacıyla ayrı bir yardımcı program hazırladım vts-fs-açık (xdg-open veya mimeopen gibi standart araçlar birçok nedenden dolayı bana uymadı; ancak eğer varsa, ayarlarda evrensel dosya açma için başka bir yardımcı program belirtebilirsiniz). Bu yardımcı program, farklı çalışma ortamlarına sahip farklı dağıtımlarda iyi çalışır, bu nedenle onu vitis ile birlikte kurmanızı öneririm.

Dosyaları açacak programı doğrudan da belirleyebilirsiniz:

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

Dizinler yerine kategoriler veya Linux için Anlamsal dosya sistemi

Daha fazla kategori oluşturalım ve “ata” seçeneğini kullanarak dosya ekleyelim. Dosyalar henüz var olmayan kategorilere atanmışsa bunları oluşturmanız istenir. -yes bayrağı kullanılarak gereksiz bir istek önlenebilir.

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

Şimdi “İstatistiksel paket R: olasılık teorisi ve matematiksel istatistikler.pdf” dosyasına “Matematik” kategorisini eklemek istiyoruz. Bu dosyanın zaten "R" olarak kategorize edildiğini biliyoruz ve bu nedenle Vitis sistemindeki kategori yolunu kullanabiliriz:

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

Neyse ki bash tamamlama bunu kolaylaştırıyor.

Her dosya için kategori listesini görmek üzere --categories bayrağını kullanarak ne olduğuna bakalım:

vitis show R --categories

Dizinler yerine kategoriler veya Linux için Anlamsal dosya sistemi

Dosyaların ayrıca formata, türe (formatları birleştirir) ve dosya uzantısına göre otomatik olarak kategorilere ayrıldığını unutmayın. İstenirse bu kategoriler devre dışı bırakılabilir. Daha sonra isimlerini mutlaka yerelleştireceğim.

Çeşitlilik sağlamak adına “Matematik”e bir şey daha ekleyelim:

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

Ve şimdi işler ilginçleşiyor. Kategoriler yerine birleştirme, kesişme ve çıkarma işlemlerini içeren ifadeler yazabilirsiniz, yani kümeler üzerinde işlemler kullanabilirsiniz. Örneğin, "Matematik" ile "R"nin kesişmesi tek bir dosyayla sonuçlanacaktır.

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

“R” diline yapılan atıfları “Matematik”ten çıkaralım:

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

Müziği ve R dilini amaçsızca birleştirebiliriz:

vitis show Музыка u: R

-n bayrağı, gerekli dosyaları istek sonucundan sayılara ve/veya aralıklara göre "çekmenize" olanak tanır; örneğin, -n 3-7veya daha karmaşık bir şey: -n 1,5,8-10,13. Bir listeden istediğiniz dosyaları açmanıza olanak tanıyan open alt komutuyla genellikle kullanışlıdır.

Dizinler yerine kategoriler veya Linux için Anlamsal dosya sistemi

Geleneksel bir dizin hiyerarşisi kullanmaktan uzaklaşırken, iç içe geçmiş kategorilere sahip olmak genellikle faydalıdır. “Matematik” kategorisi altında “İstatistikler” alt kategorisi oluşturalım ve bu kategoriyi uygun dosyaya ekleyelim:

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

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

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

Dizinler yerine kategoriler veya Linux için Anlamsal dosya sistemi

Bu dosyanın artık “Matematik” yerine “Matematik/İstatistik” kategorisine sahip olduğunu görebiliyoruz (ekstra bağlantılar izleniyor).

Tam yolu adreslemek zahmetli olabilir, hadi "global" bir takma ad oluşturalım:

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

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

Dizinler yerine kategoriler veya Linux için Anlamsal dosya sistemi

Yalnızca normal dosyalar değil

İnternet bağlantıları

Herhangi bir bilginin depolanmasını birleştirmek için, en azından İnternet kaynaklarına olan bağlantıları kategorilere ayırmak yararlı olacaktır. Ve bu mümkündür:

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

HTML sayfasının başlığı ve .desktop uzantısıyla özel bir yerde bir dosya oluşturulacaktır. Bu, GNU/Linux'taki geleneksel kısayol formatıdır. Bu tür kısayollar otomatik olarak NetworkBookmarks olarak sınıflandırılır.

Doğal olarak kısayollar kullanılmak üzere yaratılmıştır:

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

Komutun yürütülmesi, yeni kaydedilen bağlantının tarayıcıda açılmasına neden olur. İnternet kaynaklarına yönelik kategorilere ayrılmış kısayollar, tarayıcı yer imlerinin yerini alabilir.

Dosya parçaları

Ayrı ayrı dosya parçaları için kategorilere sahip olmak da faydalıdır. Kötü bir istek değil, değil mi? Ancak şu ana kadarki mevcut uygulama yalnızca düz metin dosyalarını, ses ve video dosyalarını etkiliyor. Diyelim ki bir konserin belirli bir bölümünü veya bir filmdeki komik bir anı işaretlemeniz gerekiyor, ardından atamayı kullanırken -fragname, -start, -finish bayraklarını kullanabilirsiniz. Ekran koruyucuyu "DuckTales"ten kaydedelim:

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

vitis open Заставки

Gerçekte hiçbir dosya kesme işlemi gerçekleşmez; bunun yerine, dosya türünü, dosyanın yolunu, parçanın başlangıcını ve sonunu tanımlayan parçaya yönelik bir işaretçi dosyası oluşturulur. Parçalara yönelik işaretçilerin oluşturulması ve açılması, bu amaçlar için özel olarak oluşturduğum yardımcı programlara devredilmiştir - bunlar mediafragmenter ve fragplayer'dır. Birincisi yaratır, ikincisi açılır. Ses ve video kayıtlarında medya dosyası VLC oynatıcı kullanılarak belirli bir konumdan belirli bir konuma başlatılır, dolayısıyla sistemde de olması gerekir. İlk başta bunu mplayer'a dayalı olarak yapmak istedim, ancak bazı nedenlerden dolayı doğru anda konumlandırma konusunda çok çarpıktı.
Örneğimizde, “Duck Tales intro.fragpointer” dosyası oluşturulur (özel bir yere yerleştirilir) ve ardından dosyanın başından (oluşturma sırasında –start belirtilmediğinden) 59'a kadar bir parça oynatılır. ikinci işaret, ardından VLC kapanır .

Bir diğer örnek ise ünlü bir sanatçının konserindeki tek bir performansı kategorize etmeye karar vermemiz:

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

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

Dosya açıldığında istenilen konuma gelecek ve dört buçuk dakika sonra kapanacaktır.

Her şey nasıl çalışır + ek özellikler

Kategorilerin saklanması

Anlamsal bir dosya sistemi düzenlemeyi düşünmenin en başında aklıma üç yol geldi: sembolik bağlantıların depolanması, bir veritabanı aracılığıyla, XML'deki bir açıklama aracılığıyla. İlk yöntem kazandı çünkü... bir yandan uygulaması kolaydır, diğer yandan kullanıcı kategorilere doğrudan dosya sisteminden bakma olanağına sahiptir (ve bu kullanışlı ve önemlidir). Kullanımın başında Vitis Kullanıcının ana dizininde “Vitis” dizini ve “.config/vitis/vitis.conf” konfigürasyon dosyası oluşturulur. ~/Vitis'te kategorilere karşılık gelen dizinler oluşturulur ve bu kategori dizinlerinde orijinal dosyalara sembolik bağlantılar oluşturulur. Kategori takma adları da yalnızca onlara bağlantılardır. Elbette ana dizinde “Vitis” dizininin bulunması bazı kişilere pek yakışmayabilir. Başka herhangi bir konuma geçiş yapabiliriz:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

Belirli bir noktada, konumları değişebileceğinden, farklı yerlere dağılmış dosyaları kategorilere ayırmanın pek mantıklı olmadığı ortaya çıkıyor. Bu nedenle, başlangıç ​​​​olarak kendim için bir dizin oluşturdum, burada aptalca her şeyi attım ve ona tüm kategorileri verdim. Daha sonra bu anı program düzeyinde resmileştirmenin güzel olacağına karar verdim. “Dosya alanı” kavramı böyle ortaya çıktı. Kullanımın başında Vitis Böyle bir konumu hemen kurmanın (ihtiyacımız olan tüm dosyalar orada saklanacaktır) ve otomatik kaydetmeyi etkinleştirmenin zararı olmaz:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Otomatik kaydetme olmadan, "atama" alt komutunu kullanırken, eklenen dosyayı dosya alanına kaydetmek istiyorsanız --save bayrağı gerekli olacaktır.

Ayrıca, birkaç dosya alanı ekleyebilir ve bunların önceliklerini değiştirebilirsiniz; bu, çok sayıda dosya olduğunda ve bunlar farklı ortamlarda depolandığında yararlı olabilir. Bu olasılığı burada dikkate almayacağım; ayrıntıları program yardımında bulabilirsiniz.

Anlamsal Dosya Sistemi Geçişi

Her neyse, Vitis dizini ve dosya alanları teorik olarak bazen bir yerden bir yere taşınabilir. Çalışmasını sağlamak için ayrı bir yardımcı program oluşturdum bağlantı düzenleyici, yolun bazı kısımlarını başkalarıyla değiştirerek bağlantıları toplu olarak düzenleyebilir:

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

İlk durumda, /mnt/MyFavoriteDisk/Vitis/ dizininden ana dizine taşındıktan sonra takma adlarla ilişkili sembolik bağlantılar düzenlenir. İkinci durumda, dosya alanının konumu değiştirildikten sonra, Vitis'teki tüm bağlantılar, yollarının bir kısmının değiştirilmesi talebine uygun olarak yenileriyle değiştirilir.

Otomatik kategoriler

Eğer komutu çalıştırırsanız vitis service get autocategorization, otomatik kategorilerin varsayılan olarak formata (Biçim ve Tür) ve dosya uzantısına (Uzantı) göre atandığını görebilirsiniz.

Bu, örneğin PDF'ler arasında bir şey bulmanız veya EPUB ve FB2'de sakladıklarınıza bakmanız gerektiğinde kullanışlıdır; isteği çalıştırmanız yeterlidir.

vitis show Format/MOBI u: Format/FB2

Dosya veya mimetype gibi standart GNU/Linux araçları bana tam olarak uymuyordu çünkü formatı her zaman doğru şekilde belirlemiyorlardı; dosya imzalarına ve uzantılarına dayalı olarak kendi uygulamamı yapmak zorunda kaldım. Genel olarak dosya formatlarının tanımlanması konusu ilginç bir araştırma konusudur ve ayrı bir makaleyi hak etmektedir. Şimdilik belki dünyadaki tüm formatlar için gerçek tanınırlığı sağlayamadım ama genel olarak zaten iyi çalışıyor diyebilirim. Doğru, EPUB artık formatı ZIP olarak tanımlıyor (genel olarak bu haklıdır, ancak pratikte bu normal bir davranış olarak görülmemelidir). Şimdilik bu özelliği deneysel olarak değerlendirin ve hataları bildirin. Garip durumlarda, her zaman Uzantı/epub gibi dosya uzantısı kategorilerini kullanabilirsiniz.

Formata göre otomatik kategoriler etkinleştirilirse, bazı formatları türe göre gruplandıran otomatik kategoriler de etkinleştirilir: “Arşivler”, “Resimler”, “Video”, “Ses” ve “Belgeler”. Bu alt kategoriler için de yerelleştirilmiş isimler yapılacaktır.

Ne söylenmedi

Vitis Çok yönlü bir araç olduğu ortaya çıktı ve her şeyi bir kerede ele almak zor. Başka neler yapabileceğinizden kısaca bahsedeyim:

  • kategoriler dosyalardan silinebilir ve kaldırılabilir;
  • ifade sorgularının sonuçları belirtilen dizine kopyalanabilir;
  • dosyalar program olarak çalıştırılabilir;
  • Show komutunun birçok seçeneği vardır; örneğin ada/değiştirilme tarihine veya erişime/boyuta/uzantıya göre sıralama, dosya özelliklerini ve orijinallere giden yolları gösterme, gizli dosyaların görüntülenmesini etkinleştirme vb.;
  • İnternet kaynaklarına olan bağlantıları kaydettiğinizde, HTML sayfalarının yerel kopyalarını da kaydedebilirsiniz.

Tüm ayrıntıları kullanıcı yardımında bulabilirsiniz.

Beklentiler

Şüpheciler sıklıkla "hiç kimsenin bu etiketleri kendisi koymayacağını" söylüyor. Kendi örneğimi kullanarak bunun tersini kanıtlayabilirim: Zaten altı binden fazla dosyayı kategorize ettim, binden fazla kategori ve takma ad oluşturdum ve buna değdi. Bir takım ne zaman vitis open План yapılacaklar listenizi açın veya tek komutla vitis open LaTeX Stolyarov'un LaTeX düzen sistemi hakkındaki kitabını açtığınızda, dosya sistemini "eski moda şekilde" kullanmak zaten ahlaki açıdan zordur.

Bu temelde bir takım fikirler ortaya çıkıyor. Örneğin güncel hava durumuna, tatile, haftanın gününe, günün saatine veya yılın saatine göre tematik müziği açan otomatik bir radyo yapabilirsiniz. Konuya daha da yakın olan, kategorileri bilen ve setlerde olduğu gibi kategorilerdeki işlemlerle ifadeye göre müzik çalabilen bir müzik çalardır. "İndirilenler" dizinini izleyecek ve yeni dosyaları kategorilere ayırmayı teklif edecek bir arka plan programı yapmak faydalıdır. Ve elbette normal bir grafiksel anlamsal dosya yöneticisi yapmalıyız. Bir zamanlar, dosyaların toplu olarak kullanılması için işletme için bir web hizmeti bile oluşturdum, ancak yüksek düzeyde performans elde etmesine rağmen bu bir öncelik değildi ve önemsiz hale geldi. (Büyük değişiklikler nedeniyle Vitisartık kullanılamaz.)

işte küçük bir demo

Dizinler yerine kategoriler veya Linux için Anlamsal dosya sistemi

Sonuç

ziyaret verilerle çalışma tarzını kökten değiştirmeye yönelik ilk girişim değil, ancak fikirlerimi uygulamanın ve uygulamayı GNU GPL lisansı altında kamuya açık hale getirmenin önemli olduğunu düşündüm. Kolaylık sağlamak için x86-64 için bir borç paketi hazırlandı; tüm modern Debian dağıtımlarında çalışmalıdır. ARM'de küçük zorluklar vardı (diğer tüm programlarda ise Vitis, iyi çalışıyor), ancak gelecekte bu platform (armhf) için çalışan bir paket derlenecek. Fedora 30'daki sorunlar ve birçok RPM dağıtımına yayılmanın zorluğu nedeniyle şimdilik RPM paketleri oluşturmayı bıraktım, ancak daha sonra bunlardan en azından birkaçı için paketler yapılmaya devam edecek. Bu arada kullanabilirsiniz make && make install veya checkinstall.

İlginiz için hepinize teşekkür ederim! Umarım bu makale ve bu proje faydalı olabilir.

Proje deposuna bağlantı

Kaynak: habr.com

Yorum ekle