Sistem file ‘File Filesystem’ dirilis (2021)
(mgree.github.io)- ffs(file filesystem) adalah alat yang me-mount data semi-terstruktur seperti JSON, YAML, dan TOML sebagai sistem file agar bisa dijelajahi dan diedit dengan alat shell Unix
- Shell Unix kaya akan alat pemrosesan string, tetapi karena struktur data dasarnya adalah sistem file, shell ini kurang cocok untuk mengedit data berbentuk pohon
ffs [file]menghubungkan file ke mount point, lalu saat di-unmount mengekspor hasil yang telah diperbarui ke stdout atau ke file output yang ditentukan- Penulisan file dan pembuatan direktori diubah menjadi key dan objek JSON;
1,true,false, dan file kosong masing-masing direpresentasikan sebagai nilai angka, boolean, dan null - Linux memerlukan FUSE, macOS memerlukan macFUSE, dan alat ini mungkin tidak cocok untuk Windows, lingkungan yang tidak bisa memakai FUSE, pekerjaan yang hanya butuh pencarian, atau file yang sangat besar
Menangani data semi-terstruktur seperti direktori
- ffs adalah singkatan dari file filesystem, yang me-mount data semi-terstruktur seperti sistem file agar bisa dikerjakan dengan alat shell yang sudah familiar
- Format yang saat ini didukung adalah JSON, YAML, dan TOML, dan dukungan untuk lebih banyak format direncanakan
- Cara penggunaan lengkap bisa dilihat di
ffsmanpage
Alur mount dan pengeditan
- Eksekusi dasarnya adalah
ffs [file], yang me-mountfile.blahke mount pointfiledan mencetak versi akhir yang telah diperbarui ke stdout - Dengan
ffs -m MOUNT fileAnda bisa menentukan mount point secara eksplisit, dan dengan-o OUTPUTAnda bisa menentukan file output ffs -i filemengedit file di tempat, dan saat volume di-unmount hasilnya akan ditulis kembali kefile-
Aturan konversi yang terlihat pada contoh
echo Mikey Indiana >object/namemengubah nilainamedi JSONecho 1 >object/nosediterapkan sebagai angka1, bukan stringmkdir object/pocketsdan file-file di dalamnya diubah menjadi objek JSON- File kosong
mistakesdicatat sebagainulldi JSON
Syarat instalasi dan distribusi
- Di Linux diperlukan FUSE
- Di macOS diperlukan macFUSE
- Build pengembangan terbaru tersedia sebagai executable tunggal untuk Linux dan macOS
- Rilis tertentu bisa dilihat di release page, dan versi saat ini adalah 0.1.2
- Anda juga bisa membangunnya dari source
Materi terkait dan titik perbandingan
- Ada makalah PLOS 2021 “Files-as-Filesystems for POSIX Shell Data Processing”
- jq dan gron adalah alat untuk menangani JSON dari baris perintah
- Keunggulan ffs adalah mendukung beberapa format, bisa diedit dengan alat shell yang familiar, dan tidak mengharuskan mempelajari bahasa baru
- Penggunaan di Windows, kondisi tanpa FUSE, pekerjaan yang hanya memerlukan pencarian, atau file yang sangat besar mungkin tidak cocok untuk ffs
- Lisensinya adalah GPLv3
1 komentar
Komentar Hacker News
Ini keren. Baru-baru ini saya membungkus libfuse dengan Nim, lalu mem-port contoh filesystem
hello, dan mencoba membuat sesuatu yang hampir samaVersi saya memasukkan data lewat pipe dan harus menentukan titik mount, lalu setelah selesai menulis hasilnya ke standard output. Jadi bisa disisipkan ke dalam rantai pipe, tetapi output-nya juga harus ditangani sendiri
Saat ini saya sedang mengeksplorasi apakah hal lain juga bisa dibuat menjadi filesystem. Saya juga membuat status bar untuk window manager Nimdow; jika menulis konten ke file-file individual, akan terbentuk bar berisi blok sebagai output sehingga isi status bar bisa diganti dengan mudah
Alat lain yang saya buat adalah pemutar musik berbasis libvlc. Jika diberi sebuah folder, alat ini membaca media yang memiliki tag ID3 dan menyusun folder seperti
by-artist,by-album. Setiap file bernama-dan berisi path lengkap file aslinya. Untuk memutar lagu, caranya seperti melakukancatsatu file kecontrol/currentdan menulisplaykecontrol/command. Ada fitur dan perintah playlist lain, tetapi tujuannya adalah membuat pemutar musik yang sangat mudah di-scriptJika ingin memahami struktur codebase, cukup jalankan
tree:)Kalau masuk lebih dalam, import mungkin juga bisa diinterpretasikan sebagai symbolic link dan sebagainya; ada banyak kemungkinan menarik
Misalnya menjalankan
cat /proc/$pid/fs/current_trackuntuk mendapatkan nama lagu yang sedang diputar di pemutar musik, atauls /proc/$pid/fs/tabsuntuk melihat daftar tab yang terbuka di browser. Mungkin HTML atau gambar yang disematkan juga bisa diambilSekarang ini memang bisa dengan FUSE, tetapi merepotkan sehingga tidak ada yang melakukannya
Menurut saya ini cukup berguna sehingga seharusnya menjadi fitur standar di tingkat sistem operasi
Sistem operasi keluarga Unix bisa me-mount disk image dan menjelajahi isinya. Namun jika menelusuri file di dalam file, ada jauh lebih banyak format yang berguna. Arsip terkompresi adalah contoh utamanya
Sebagian file manager mendukung ini, tetapi menurut saya menaruhnya di lapisan aplikasi bukanlah tempat yang optimal. Sepertinya bisa diimplementasikan dengan pendekatan semacam driver per format file
file, dan semuanya seharusnya bisa dilakukan di user spaceSatu-satunya faktor yang menghambat hal ini sekarang adalah MacOS tidak mengekspos API filesystem user space. Di Linux, Windows, dan BSD ini sudah memungkinkan
Jika ada developer Apple yang melihat ini: ekstensi File Provider tidak cukup. Berikan padanan FUSE. Saya tahu itu ada
https://avf.sourceforge.net/
Bagaimanapun, sekalipun itu bukan yang Anda inginkan, FUSE adalah mekanisme yang lebih umum, jadi sepertinya bisa memungkinkan Anda melakukan hal yang diinginkan, bahkan lebih
Commit git juga bisa di-mount sebagai filesystem
https://jvns.ca/blog/2023/12/04/mounting-git-commits-as-fold...
Tulisan sebelumnya: https://news.ycombinator.com/item?id=38527866
Saat melihat judulnya, saya berharap ini adalah sesuatu yang dulu pernah saya cari atau ingin saya buat sendiri. Sepertinya cocok bertanya di sini
Apakah ada filesystem FUSE yang, selama di-mount, berjalan di memori seperti tmpfs, lalu saat di-unmount diserialisasi menjadi satu file tunggal di disk?
Yang paling mendekati adalah driver FUSE yang me-mount file arsip, tetapi dengan begitu sulit mendapatkan hal seperti symbolic link
libsqlfs mengimplementasikan filesystem bergaya POSIX di atas database SQLite. Ini menyediakan filesystem baca/tulis dengan hierarki dan namespace sendiri di dalam satu file, dan bisa digunakan sebagai shared library atau modul FUSE
Memang kasar dibanding DMG di OSX, tetapi jika dilihat dengan toleran, tujuannya mirip
Atau bisa juga membungkus tmpfs agar saat unmount diserialisasi menjadi tarball yang mempertahankan symbolic link
Seperti yang mungkin sudah Anda tahu, ada banyak skenario realistis di mana hanya melakukan flush buffer saat unmount bisa berujung pada kerusakan data
Tetap saja, masalah yang ingin Anda pecahkan terlihat menarik
/tmp, menggunakannya, lalu setelah unmount memindahkannya ke disk sepertinya cukup mendekatiAda juga Parts-of-file File System: https://www.usenix.org/conference/2005-usenix-annual-technic...
Saya teringat TabFS buatan Omar Rizwan: <https://omar.website/tabfs/>
Saya pernah melakukan ini pada 2003. Mengejutkannya, ini cepat, dan membuat fine-grained locking mudah dilakukan
Saya memakainya sebagai database per pengguna dalam bahasa template web untuk alat pembuatan situs web besar
Saat melihat judulnya, saya kira ini meme
Ternyata idenya benar-benar cerdas. Secara pribadi, saya melakukan sebagian besar pemrosesan data di bahasa tingkat lebih tinggi, jadi saya tidak yakin akan memakainya langsung, tetapi sepertinya akan ada orang yang menemukan use case-nya
Pendekatan bagus yang berpikir di luar kebiasaan
Ini tampak sangat bagus, dan saya harus mencobanya sesegera mungkin
Sepertinya akan sangat berguna untuk menjelajahi atau mencari di dalam file JSON
Jika ini menarik bagi Anda, Solvent-Configr juga mungkin menarik
https://aws.amazon.com/marketplace/pp/prodview-i3ym46leenag4
Dengan memodelkan objek melalui mekanisme filesystem, Anda bisa merancang solusi berbasis objek yang mendukung penjelajahan ala filesystem
Demo: https://youtu.be/XgTgubZQPHw