Dosya sistemi ‘File Filesystem’ yayımlandı (2021)
(mgree.github.io)- ffs(file filesystem), JSON, YAML ve TOML gibi yarı yapılandırılmış verileri dosya sistemi olarak bağlayıp Unix kabuk araçlarıyla gezmeyi ve düzenlemeyi sağlayan bir araçtır
- Unix kabuğu metin işleme araçları açısından zengindir; ancak temel veri yapısı dosya sistemi olduğu için ağaç biçimli verileri düzenlemeye pek uygun değildir
ffs [file], dosyayı bir bağlama noktasına bağlar ve ayırma sırasında güncellenmiş sonucu stdout’a ya da belirtilen çıktı dosyasına aktarır- Dosya yazma ve dizin oluşturma işlemleri JSON anahtarlarına ve nesnelerine dönüştürülür;
1,true,falseve boş dosya sırasıyla sayı, boolean ve null değerleri olarak yansıtılır - Linux’ta FUSE, macOS’ta macFUSE gerekir; Windows, FUSE kullanılamayan ortamlar, yalnızca arama amaçlı işler ve çok büyük dosyalar için uygun olmayabilir
Yarı yapılandırılmış verileri dizin gibi ele almak
- ffs, file filesystem ifadesinin kısaltmasıdır; yarı yapılandırılmış verileri dosya sistemi gibi bağlayarak alışıldık kabuk araçlarıyla çalışmayı sağlar
- Şu anda desteklenen biçimler JSON, YAML ve TOML olup daha fazla biçim desteği planlanmaktadır
- Ayrıntılı kullanım
ffsmanpage sayfasında görülebilir
Bağlama ve düzenleme akışı
- Varsayılan çalıştırma
ffs [file]şeklindedir;file.blahdosyasınıfilebağlama noktasına bağlar ve nihai güncellenmiş kopyayı stdout’a yazar ffs -m MOUNT fileile açıkça bir bağlama noktası belirtilebilir,-o OUTPUTile çıktı dosyası belirtilebilirffs -i filedosyayı yerinde düzenler; hacim ayrıldığında sonuç yenidenfileiçine yazılır-
Örnekte görülen dönüşüm kuralları
echo Mikey Indiana >object/name, JSON’dakinamedeğerini değiştirirecho 1 >object/nose, string değil sayı1olarak yansıtılırmkdir object/pocketsve içindeki dosyalar JSON nesnesine dönüştürülür- Boş dosya
mistakes, JSON’danullolarak kaydedilir
Kurulum koşulları ve dağıtım
- Linux’ta FUSE gerekir
- macOS’ta macFUSE gerekir
- En güncel geliştirme derlemesi Linux ve macOS için tek çalıştırılabilir dosya olarak sunulur
- Belirli sürümler release page üzerinden görülebilir; mevcut sürüm 0.1.2’dir
- source üzerinden derlemek de mümkündür
İlgili materyaller ve karşılaştırma noktaları
- PLOS 2021 makalesi “Files-as-Filesystems for POSIX Shell Data Processing” bulunmaktadır
- jq ve gron, komut satırında JSON ile çalışmaya yönelik araçlardır
- ffs’nin farkı, birden çok biçimi desteklemesi, alışıldık kabuk araçlarıyla düzenlemeye izin vermesi ve yeni bir dil öğrenmeyi gerektirmemesidir
- Windows kullanımı, FUSE kullanılamaması, yalnızca arama gerektiren işler ve çok büyük dosyalar ffs’ye uygun olmayabilir
- Lisansı GPLv3’tür
1 yorum
Hacker News yorumları
Bu harika. Yakın zamanda libfuse’u Nim ile sarmaladıktan sonra
hellodosya sistemi örneğini port ettim ve neredeyse aynısını denedim.Benim sürümümde veriyi pipe ile içeri vermek ve bağlama noktasını belirtmek gerekiyor; bitince sonucu standart çıktıya yazıyor. Bu yüzden bir pipe zincirinin arasına yerleştirilebiliyor ama çıktıyı da sizin yönetmeniz gerekiyor.
Şimdilerde başka şeyleri de dosya sistemi olarak yapıp yapamayacağımı araştırıyorum. Nimdow pencere yöneticisi için bir durum çubuğu da yaptım; tek tek dosyalara içerik yazınca bloklardan oluşan bir çubuk çıktı olarak üretiliyor, böylece çubuk içeriğini kolayca değiştirebiliyorsunuz.
Yaptığım bir başka araç da libvlc tabanlı bir müzik çalar. Bir klasör verdiğinizde ID3 etiketleri olan medyayı okuyor ve
by-artist,by-albumgibi klasörler oluşturuyor. Her dosyanın adı-ve gerçek dosyanın tam yolunu içeriyor. Bir şarkı çalmak için bir dosyayıcontrol/currentiçinecatetmek vecontrol/commandiçineplayyazmak gibi. Daha fazla çalma listesi özelliği ve komut var, ama amaç çok kolay betiklenebilen bir müzik çalar yapmak.Kod tabanının yapısını anlamak istiyorsanız sadece
treeçalıştırmanız yeter :)Daha derine inince import’ları sembolik bağlantılar vb. olarak çözümlemek de mümkün olabilir; ilginç olasılıklar çok.
Örneğin müzik çaların mevcut parçasının adını almak için
cat /proc/$pid/fs/current_trackyapmak ya da tarayıcıdaki açık sekmelerin listesini görmek içinls /proc/$pid/fs/tabsçalıştırmak gibi. Belki HTML’i veya gömülü görselleri de almak mümkün olurdu.Bugün de FUSE ile yapılabilir, ama zahmetli olduğu için kimse yapmıyor.
Yeterince kullanışlı; bence işletim sistemi düzeyinde standart bir özellik olmalı.
Unix benzeri işletim sistemlerinde disk imajlarını mount edip içeriklerine bakabiliyorsunuz. Ama bir dosyanın içindeki dosyaları gezdiğinizde işe yarayan biçimlerin sayısı çok daha fazla. Sıkıştırılmış arşivler bunun başlıca örneği.
Bazı dosya yöneticileri bunu destekliyor, fakat bunu uygulama katmanına koymanın en uygun yer olduğunu düşünmüyorum. Dosya biçimine özel sürücüler gibi uygulanabilir.
filekomutuna benzer olur ve tamamı kullanıcı alanında mümkün olmalı.Şu anda bunu engelleyen tek şey MacOS’un kullanıcı alanı dosya sistemi API’sini açığa çıkarmaması. Linux, Windows ve BSD’de zaten mümkün.
Bunu gören bir Apple geliştiricisi varsa: dosya sağlayıcı uzantıları yeterli değil. Bize FUSE karşılığını verin. Var olduğunu biliyorum.
https://avf.sourceforge.net/
Her hâlükârda istediğiniz şey tam olarak o olmasa bile FUSE daha genel bir mekanizma; istediğinizi yapmanıza, hatta fazlasına izin verecek gibi görünüyor.
git commit’lerini dosya sistemi olarak mount etmek de mümkün.
https://jvns.ca/blog/2023/12/04/mounting-git-commits-as-fold...
Önceki yazı: https://news.ycombinator.com/item?id=38527866
Başlığı görünce, eskiden aradığım ya da kendim yapmayı düşündüğüm şey sandım ve heyecanlandım. Burada sormak iyi olabilir.
Mount edilmişken tmpfs gibi bellekte çalışan, unmount edildiğinde de diskte tek bir dosyaya serileştiren bir FUSE dosya sistemi var mı?
En yakını arşiv dosyalarını mount eden FUSE sürücüleri, ama o zaman sembolik bağlantılar gibi şeyleri elde etmek zorlaşıyor.
libsqlfs, SQLite veritabanı üzerinde POSIX tarzı bir dosya sistemi uygular. Tek bir dosyanın içinde kendi hiyerarşisi ve ad alanı olan okuma/yazma dosya sistemi sağlar; paylaşımlı kütüphane ya da FUSE modülü olarak kullanılabilir.
OSX’in DMG’sine kıyasla kaba, ama hoşgörülü bakarsanız benzer bir amaca hizmet ediyor.
Ya da tmpfs’i sarıp unmount sırasında sembolik bağlantıları koruyan bir tarball’a serileştirecek şekilde yapılabilir.
Muhtemelen zaten biliyorsunuzdur; tamponları yalnızca unmount sırasında flush etmek veri bozulmasına yol açabilecek çok sayıda gerçekçi senaryo yaratır.
Yine de çözmeye çalıştığınız sorun ilginç görünüyor.
/tmpiçine kopyalayıp kullanmak, sonra unmount edip diske taşımak oldukça yakın olabilir.Parts-of-file File System de var: https://www.usenix.org/conference/2005-usenix-annual-technic...
Omar Rizwan’ın TabFS’ini hatırlatıyor: <https://omar.website/tabfs/>
2003’te bunu denemiştim. Şaşırtıcı derecede hızlıydı ve ince taneli kilitlemeyi kolaylaştırıyordu.
Devasa bir web sitesi oluşturma aracı için web şablon dilinde, kullanıcı bazlı veritabanı olarak kullanmıştım.
Başlığı gördüğümde bir meme sandım.
Ama gerçekten akıllıca bir fikir. Kişisel olarak çoğu veri işlemeyi daha yüksek seviyeli dillerde yaptığım için doğrudan kullanır mıyım bilmiyorum; yine de kullanım alanları bulacak insanlar olacaktır.
Kalıpların dışında düşünülmüş iyi bir yaklaşım.
Gerçekten iyi görünüyor; mümkün olan en kısa sürede denemeliyim.
JSON dosyalarının içinde gezinmek veya arama yapmak için iyi kullanılabilir gibi.
Bu ilginizi çektiyse Solvent-Configr da ilginizi çekebilir.
https://aws.amazon.com/marketplace/pp/prodview-i3ym46leenag4
Nesneleri dosya sistemi mekanizmalarıyla modelleyerek, dosya sistemi tarzı gezinmeyi destekleyen nesne tabanlı çözümler tasarlayabilirsiniz.
Demo: https://youtu.be/XgTgubZQPHw