Kategori, bukan direktori, atau sistem file semantik untuk Linux

Klasifikasi data sendiri merupakan topik penelitian yang menarik. Saya suka mengumpulkan informasi yang tampaknya diperlukan, dan saya selalu mencoba membuat hierarki direktori logis untuk file saya, dan suatu hari dalam mimpi saya melihat program yang indah dan nyaman untuk menetapkan tag ke file, dan saya memutuskan bahwa saya tidak bisa hidup seperti ini lagi.

Masalah sistem file hierarki

Pengguna sering dihadapkan pada masalah dalam memilih tempat menyimpan file baru berikutnya dan masalah dalam menemukan file mereka sendiri (terkadang nama file sama sekali tidak dimaksudkan untuk diingat oleh seseorang).

Jalan keluar dari situasi ini mungkin berupa sistem file semantik, yang biasanya merupakan tambahan pada sistem file tradisional. Direktori di dalamnya digantikan oleh atribut semantik, disebut juga tag, kategori, dan metadata. Saya akan lebih sering menggunakan istilah "kategori", karena... Dalam konteks sistem file, kata "tag" terkadang agak aneh, terutama ketika muncul "subtag" dan "tag alias".

Menetapkan kategori ke file sebagian besar menghilangkan masalah penyimpanan dan pencarian file: jika Anda mengingat (atau menebak) setidaknya satu kategori yang ditetapkan ke file, maka file tersebut tidak akan pernah hilang dari pandangan.

Sebelumnya, topik ini diangkat lebih dari satu kali di Habré (waktu, два, tiga, empat dll), di sini saya menjelaskan solusi saya.

Jalan Menuju Realisasi

Segera setelah mimpi tersebut, saya menjelaskan di buku catatan saya antarmuka perintah yang menyediakan pekerjaan yang diperlukan dengan kategori. Kemudian saya memutuskan bahwa dalam satu atau dua minggu saya bisa menulis prototipe menggunakan Python atau Bash, dan kemudian saya harus mengerjakan pembuatan shell grafis di Qt atau GTK. Kenyataannya, seperti biasa, ternyata jauh lebih sulit, dan pembangunan tertunda.

Ide awalnya adalah pertama-tama membuat program dengan antarmuka baris perintah yang nyaman dan ringkas yang akan membuat, menghapus kategori, menetapkan kategori ke file, dan menghapus kategori dari file. Saya menelepon programnya pemandangan.

Upaya pertama untuk membuat pemandangan berakhir sia-sia, karena banyak waktu mulai dihabiskan untuk bekerja dan kuliah. Upaya kedua sudah menjadi sesuatu: untuk tesis master, saya berhasil menyelesaikan proyek yang direncanakan dan bahkan membuat prototipe shell GTK. Namun versi itu ternyata sangat tidak dapat diandalkan dan merepotkan sehingga banyak hal yang harus dipikirkan ulang.

Saya sendiri sebenarnya telah menggunakan versi ketiga untuk waktu yang sangat lama, setelah mentransfer beberapa ribu file saya ke dalam kategori. Ini juga sangat difasilitasi oleh penyelesaian bash yang diimplementasikan. Namun beberapa masalah, seperti kurangnya kategori otomatis dan kemampuan untuk menyimpan file dengan nama yang sama, masih tetap ada, dan program sudah bengkok karena kompleksitasnya sendiri. Inilah sebabnya saya sampai pada kebutuhan untuk memecahkan masalah pengembangan perangkat lunak yang kompleks: menulis persyaratan terperinci, mengembangkan sistem pengujian fungsional, mempelajari instruksi pengemasan, dan banyak lagi. Saya sekarang telah sampai pada rencana saya, sehingga kreasi sederhana ini dapat dipresentasikan kepada komunitas bebas. Manajemen file tertentu seperti manajemen melalui konsep kategori menimbulkan permasalahan dan permasalahan yang tidak terduga, dan dalam penyelesaiannya pemandangan melahirkan lima proyek lagi, beberapa di antaranya akan disebutkan dalam artikel. Sampai sekarang pemandangan Saya belum membeli shell grafis, tetapi kenyamanan menggunakan kategori file dari baris perintah bagi saya sudah melebihi keuntungan apa pun dari pengelola file grafis biasa.

Contoh penggunaan

Mari kita mulai dengan sederhana - buat kategori:

vitis create Музыка

Mari tambahkan beberapa komposisi sebagai contoh:

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

Anda dapat melihat konten kategori “Musik” menggunakan subperintah “tampilkan”:

vitis show Музыка

Anda dapat memainkannya menggunakan subperintah “buka”.

vitis open Музыка

Karena Jika kita hanya memiliki satu file dalam kategori “Musik”, maka hanya file itu yang akan diluncurkan. Untuk tujuan membuka file dengan program defaultnya, saya membuat utilitas terpisah vts-fs-terbuka (alat standar seperti xdg-open atau mimeopen tidak cocok untuk saya karena sejumlah alasan; tetapi, jika ada, dalam pengaturan Anda dapat menentukan utilitas lain untuk membuka file universal). Utilitas ini bekerja dengan baik pada distribusi berbeda dengan lingkungan kerja berbeda, jadi saya sarankan menginstalnya bersama dengan vitis.

Anda juga dapat langsung menentukan program untuk membuka file:

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

Kategori, bukan direktori, atau sistem file semantik untuk Linux

Mari buat lebih banyak kategori dan tambahkan file menggunakan “assign”. Jika file ditetapkan ke kategori yang belum ada, Anda akan diminta untuk membuatnya. Permintaan yang tidak perlu dapat dihindari dengan menggunakan flag -yes.

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

Sekarang kami ingin menambahkan kategori “Matematika” ke file “Paket statistik R: teori probabilitas dan statistik matematika.pdf”. Kita tahu bahwa file ini sudah dikategorikan sebagai "R" dan oleh karena itu kita dapat menggunakan jalur kategori dari sistem Vitis:

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

Untungnya, penyelesaian bash membuat hal ini mudah.

Mari kita lihat apa yang terjadi, gunakan flag --categories untuk melihat daftar kategori untuk setiap file:

vitis show R --categories

Kategori, bukan direktori, atau sistem file semantik untuk Linux

Perhatikan bahwa file juga telah secara otomatis dikategorikan berdasarkan format, jenis (menggabungkan format) dan ekstensi file. Kategori-kategori ini dapat dinonaktifkan jika diinginkan. Nanti saya pasti akan lokalkan nama mereka.

Mari tambahkan sesuatu yang lain ke “Matematika” untuk variasi:

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

Dan sekarang segalanya menjadi menarik. Alih-alih kategori, Anda dapat menulis ekspresi dengan operasi gabungan, perpotongan, dan pengurangan, yaitu menggunakan operasi pada himpunan. Misalnya, perpotongan "Matematika" dengan "R" akan menghasilkan satu file.

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

Mari kita kurangi referensi bahasa “R” dari “Matematika”:

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

Kita dapat menggabungkan musik dan bahasa R tanpa tujuan:

vitis show Музыка u: R

Bendera -n memungkinkan Anda untuk "menarik" file yang diperlukan dari hasil permintaan berdasarkan angka dan/atau rentang, misalnya, -n 3-7, atau sesuatu yang lebih rumit: -n 1,5,8-10,13. Seringkali berguna dengan subperintah terbuka, yang memungkinkan Anda membuka file yang diinginkan dari daftar.

Kategori, bukan direktori, atau sistem file semantik untuk Linux

Meskipun kita beralih dari penggunaan hierarki direktori konvensional, sering kali berguna untuk memiliki kategori bertingkat. Mari buat subkategori “Statistik” di bawah kategori “Matematika” dan tambahkan kategori ini ke file yang sesuai:

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

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

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

Kategori, bukan direktori, atau sistem file semantik untuk Linux

Kita dapat melihat bahwa file ini sekarang memiliki kategori "Matematika/Statistik" dan bukan "Matematika" (tautan tambahan dilacak).

Mengatasi path lengkap bisa jadi merepotkan, mari kita buat alias “global”:

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

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

Kategori, bukan direktori, atau sistem file semantik untuk Linux

Bukan hanya file biasa

Tautan internet

Untuk menyatukan penyimpanan informasi apa pun, setidaknya akan berguna untuk mengkategorikan tautan ke sumber daya Internet. Dan ini mungkin:

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

Sebuah file akan dibuat di tempat khusus dengan header halaman HTML dan ekstensi .desktop. Ini adalah format pintasan tradisional di GNU/Linux. Pintasan tersebut secara otomatis dikategorikan sebagai NetworkBookmarks.

Tentu saja, pintasan dibuat untuk digunakan:

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

Menjalankan perintah menyebabkan tautan yang baru disimpan dibuka di browser. Pintasan yang dikategorikan ke sumber Internet dapat berfungsi sebagai pengganti penanda browser.

Fragmen file

Memiliki kategori untuk masing-masing bagian file juga berguna. Bukan permintaan yang buruk, ya? Namun implementasi saat ini sejauh ini hanya mempengaruhi file teks biasa, file audio dan video. Katakanlah Anda perlu menandai bagian tertentu dari sebuah konser atau momen lucu dalam sebuah film, lalu saat menggunakan penetapan Anda dapat menggunakan flag -fragname, -start, -finish. Mari simpan screensaver dari "DuckTales":

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

vitis open Заставки

Pada kenyataannya, tidak ada pemotongan file yang terjadi, sebagai gantinya, file penunjuk ke fragmen dibuat, yang menjelaskan jenis file, jalur ke file, awal dan akhir fragmen. Pembuatan dan pembukaan pointer ke fragmen didelegasikan ke utilitas yang saya buat khusus untuk tujuan ini - ini adalah mediafragmenter dan fragplayer. Yang pertama menciptakan, yang kedua membuka. Dalam hal perekaman audio dan video, file media diluncurkan dari posisi tertentu ke posisi tertentu menggunakan VLC player, sehingga harus juga ada di sistem. Awalnya saya ingin melakukan ini berdasarkan mplayer, namun entah kenapa sangat tidak tepat dengan positioning di momen yang tepat.
Dalam contoh kita, file “Duck Tales intro.fragpointer” dibuat (ditempatkan di tempat khusus), dan kemudian sebuah fragmen diputar dari awal file (karena –start tidak ditentukan saat membuat) hingga 59 tanda kedua, setelah itu VLC ditutup.

Contoh lainnya adalah ketika kami memutuskan untuk mengkategorikan penampilan tunggal di sebuah konser oleh artis terkenal:

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

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

Saat dibuka, file akan dimasukkan ke posisi yang diinginkan dan akan ditutup setelah empat setengah menit.

Cara kerja semuanya + fitur tambahan

Menyimpan kategori

Pada awal pemikiran tentang pengorganisasian sistem file semantik, tiga cara terlintas dalam pikiran: melalui penyimpanan tautan simbolik, melalui database, melalui deskripsi dalam XML. Cara pertama menang, karena... di satu sisi, mudah diterapkan, dan di sisi lain, pengguna memiliki kesempatan untuk melihat kategori langsung dari sistem file (yang nyaman dan penting). Pada awal penggunaan pemandangan Direktori “Vitis” dan file konfigurasi “.config/vitis/vitis.conf” dibuat di direktori home pengguna. Direktori yang sesuai dengan kategori dibuat di ~/Vitis, dan tautan simbolik ke file asli dibuat di direktori kategori ini. Alias ​​kategori juga hanya berupa tautan ke kategori tersebut. Tentu saja, kehadiran direktori “Vitis” di direktori home mungkin tidak cocok untuk sebagian orang. Kami dapat beralih ke lokasi lain:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

Pada titik tertentu, menjadi jelas bahwa tidak masuk akal untuk mengkategorikan file yang tersebar di tempat berbeda, karena lokasinya dapat berubah. Oleh karena itu, untuk memulainya, saya membuat direktori untuk diri saya sendiri, di mana saya dengan bodohnya membuang semuanya dan memberikan semua kategori. Kemudian saya memutuskan bahwa akan lebih baik jika momen ini diformalkan di tingkat program. Dari sinilah konsep “ruang file” muncul. Pada awal penggunaan pemandangan Tidak ada salahnya untuk segera mengatur lokasi tersebut (semua file yang kita butuhkan akan disimpan di sana) dan mengaktifkan penyimpanan otomatis:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Tanpa penyimpanan otomatis, saat menggunakan subperintah "tetapkan", tanda --save akan diperlukan jika Anda ingin menyimpan file yang ditambahkan ke ruang file.

Selain itu, Anda dapat menambahkan beberapa ruang file dan mengubah prioritasnya; ini berguna ketika ada banyak file dan disimpan di media yang berbeda. Saya tidak akan mempertimbangkan kemungkinan ini di sini; detailnya dapat ditemukan di bantuan program.

Migrasi Sistem File Semantik

Bagaimanapun, direktori Vitis dan ruang file secara teoritis terkadang dapat berpindah dari satu tempat ke tempat lain. Untuk membuatnya berfungsi, saya membuat utilitas terpisah editor tautan, yang dapat mengedit tautan secara massal, mengganti sebagian jalur dengan yang lain:

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

Dalam kasus pertama, setelah kita berpindah dari /mnt/MyFavoriteDisk/Vitis/ ke direktori home, tautan simbolis yang terkait dengan alias akan diedit. Dalam kasus kedua, setelah mengubah lokasi ruang file, semua tautan di Vitis diubah ke yang baru sesuai dengan permintaan untuk mengganti sebagian jalurnya.

Kategori otomatis

Jika Anda menjalankan perintah vitis service get autocategorization, Anda dapat melihat bahwa secara default, kategori otomatis ditetapkan berdasarkan format (Format dan Jenis) dan ekstensi file (Ekstensi).

Ini berguna ketika, misalnya, Anda perlu menemukan sesuatu di antara PDF atau melihat apa yang telah Anda simpan dari EPUB dan FB2, Anda cukup menjalankan permintaan tersebut

vitis show Format/MOBI u: Format/FB2

Kebetulan alat standar GNU/Linux seperti file atau mimetype tidak cocok untuk saya karena alat tersebut tidak selalu menentukan format dengan benar; Saya harus membuat implementasi sendiri berdasarkan tanda tangan dan ekstensi file. Secara umum, topik mendefinisikan format file merupakan topik yang menarik untuk diteliti dan patut mendapat artikel tersendiri. Untuk saat ini saya dapat mengatakan bahwa mungkin saya belum memberikan pengakuan yang sebenarnya untuk semua format yang ada di dunia, namun secara umum sudah berjalan dengan baik. Benar, EPUB sekarang mendefinisikan formatnya sebagai ZIP (secara umum, hal ini dibenarkan, tetapi dalam praktiknya hal ini tidak dianggap sebagai perilaku normal). Untuk saat ini, pertimbangkan fitur ini eksperimental dan laporkan bug apa pun. Dalam situasi yang aneh, Anda selalu dapat menggunakan kategori ekstensi file, misalnya Extension/epub.

Jika kategori otomatis menurut format diaktifkan, kategori otomatis yang mengelompokkan beberapa format menurut jenis juga diaktifkan: “Arsip”, “Gambar”, “Video”, “Audio”, dan “Dokumen”. Nama yang dilokalkan juga akan dibuat untuk subkategori ini.

Apa yang tidak dikatakan

pemandangan Ternyata alat ini memiliki banyak segi, dan sulit untuk mencakup semuanya sekaligus. Izinkan saya menyebutkan secara singkat apa lagi yang dapat Anda lakukan:

  • kategori dapat dihapus dan dihapus dari file;
  • hasil kueri ekspresi dapat disalin ke direktori yang ditentukan;
  • file dapat dijalankan sebagai program;
  • Perintah show memiliki banyak pilihan, misalnya mengurutkan berdasarkan nama/tanggal modifikasi atau akses/ukuran/ekstensi, menampilkan properti file dan jalur ke aslinya, mengaktifkan tampilan file tersembunyi, dll.;
  • Saat Anda menyimpan link ke sumber Internet, Anda juga dapat menyimpan salinan lokal halaman HTML.

Detail selengkapnya dapat ditemukan di bantuan pengguna.

Prospek

Orang yang skeptis sering mengatakan bahwa “tidak ada seorang pun yang akan menetapkan tag ini sendiri”. Dengan menggunakan contoh saya sendiri, saya dapat membuktikan sebaliknya: Saya telah mengkategorikan lebih dari enam ribu file, membuat lebih dari seribu kategori dan alias, dan itu sepadan. Ketika satu tim vitis open План buka daftar tugas Anda atau kapan dengan satu perintah vitis open LaTeX Saat Anda membuka buku Stolyarov tentang sistem tata letak LaTeX, secara moral sudah sulit untuk menggunakan sistem file “dengan cara lama”.

Atas dasar ini, sejumlah gagasan muncul. Misalnya, Anda dapat membuat radio otomatis yang menyalakan musik tematik sesuai dengan cuaca saat ini, hari libur, hari dalam seminggu, waktu atau tahun. Yang lebih dekat dengan topik ini adalah pemutar musik yang mengetahui tentang kategori dan dapat memutar musik dengan ekspresi dengan pengoperasian pada kategori seperti pada set. Berguna untuk membuat daemon yang akan memantau direktori "Unduhan" dan menawarkan untuk mengkategorikan file baru. Dan, tentu saja, kita harus membuat pengelola file semantik grafis yang normal. Saya bahkan pernah membuat layanan web untuk perusahaan untuk penggunaan file secara kolektif, tetapi itu bukan prioritas dan menjadi tidak relevan, meskipun mencapai tingkat kinerja yang tinggi. (Karena perubahan besar dalam pemandangan, itu tidak dapat digunakan lagi.)

ini sedikit demonya

Kategori, bukan direktori, atau sistem file semantik untuk Linux

Kesimpulan

Vitis Ini bukan upaya pertama untuk mengubah gaya bekerja dengan data secara radikal, namun saya menganggap penting untuk mengimplementasikan ide-ide saya dan membuat implementasinya tersedia untuk umum di bawah lisensi GNU GPL. Untuk kenyamanan, paket deb telah dibuat untuk x86-64; paket ini dapat bekerja pada semua distribusi Debian modern. Ada sedikit kesulitan pada ARM (sementara semua program lain yang terkait dengannya pemandangan, berfungsi dengan baik), tetapi di masa mendatang paket yang berfungsi akan dikompilasi untuk platform ini (armhf). Saya telah berhenti membuat paket RPM untuk saat ini karena masalah pada Fedora 30 dan kesulitan menyebar ke banyak distribusi RPM, namun paket selanjutnya akan tetap dibuat untuk setidaknya beberapa di antaranya. Sementara itu, Anda dapat menggunakan make && make install или checkinstall.

Terima kasih atas perhatian Anda! Semoga artikel dan proyek ini dapat bermanfaat.

Tautan ke repositori proyek

Sumber: www.habr.com

Tambah komentar