الفئات بدلاً من الدلائل ، أو نظام الملفات الدلالية لنظام Linux

يعد تصنيف البيانات في حد ذاته موضوعًا بحثيًا مثيرًا للاهتمام. أحب جمع المعلومات التي تبدو ضرورية، وحاولت دائمًا إنشاء تسلسلات هرمية منطقية للدليل لملفاتي، وفي أحد الأيام رأيت في المنام برنامجًا جميلًا ومريحًا لتعيين العلامات للملفات، وقررت أنني لا أستطيع العيش مثل هذا لفترة أطول.

مشكلة أنظمة الملفات الهرمية

غالبًا ما يواجه المستخدمون مشكلة اختيار مكان حفظ الملف الجديد التالي ومشكلة العثور على ملفاتهم الخاصة (في بعض الأحيان لا يكون المقصود من أسماء الملفات أن يتذكرها أي شخص على الإطلاق).

يمكن أن تكون أنظمة الملفات الدلالية طريقة للخروج من هذا الوضع، والتي عادة ما تكون إضافة إلى نظام الملفات التقليدي. يتم استبدال الدلائل الموجودة بها بالسمات الدلالية، والتي تسمى أيضًا العلامات والفئات والبيانات الوصفية. سأستخدم مصطلح "الفئة" في كثير من الأحيان، لأن... في سياق أنظمة الملفات، تكون كلمة "tag" غريبة بعض الشيء في بعض الأحيان، خاصة عند ظهور "العلامات الفرعية" و"الأسماء المستعارة للعلامات".

يؤدي تعيين فئات للملفات إلى التخلص إلى حد كبير من مشكلة تخزين الملف والبحث عنه: إذا تذكرت (أو خمنت) واحدة على الأقل من الفئات المخصصة لملف ما، فلن يختفي الملف أبدًا من العرض.

وسبق أن أثير هذا الموضوع أكثر من مرة على حبري (وقت, اثنان, ثلاثة, أربعة وما إلى ذلك)، وهنا أصف الحل الخاص بي.

الطريق إلى الإدراك

مباشرة بعد الحلم المذكور، وصفت في دفتر ملاحظاتي واجهة الأوامر التي توفر العمل اللازم مع الفئات. ثم قررت أنه في غضون أسبوع أو أسبوعين سأتمكن من كتابة نموذج أولي باستخدام Python أو Bash، ثم سأضطر إلى العمل على إنشاء غلاف رسومي في Qt أو GTK. الواقع، كما هو الحال دائما، تبين أنه أصعب بكثير، وتأخر التطوير.

كانت الفكرة الأصلية هي أولاً وقبل كل شيء إنشاء برنامج بواجهة سطر أوامر مريحة وموجزة من شأنها إنشاء الفئات وحذفها وتعيين فئات للملفات وحذف الفئات من الملفات. اتصلت بالبرنامج فيتيس.

المحاولة الأولى للإنشاء فيتيس انتهى بلا شيء، حيث بدأ قضاء الكثير من الوقت في العمل والكلية. كانت المحاولة الثانية شيئًا ما بالفعل: بالنسبة لأطروحة الماجستير، تمكنت من إكمال المشروع المخطط له وحتى إنشاء نموذج أولي لقذيفة GTK. ولكن تبين أن هذا الإصدار غير موثوق به وغير مريح لدرجة أنه كان لا بد من إعادة التفكير في الكثير.

لقد استخدمت بالفعل الإصدار الثالث بنفسي لفترة طويلة جدًا، حيث قمت بنقل عدة آلاف من ملفاتي إلى فئات. وقد تم تسهيل ذلك أيضًا بشكل كبير من خلال إكمال bash الذي تم تنفيذه. لكن بعض المشاكل، مثل عدم وجود فئات تلقائية والقدرة على تخزين الملفات التي تحمل نفس الاسم، لا تزال قائمة، وكان البرنامج عازمة بالفعل تحت تعقيدها. هذه هي الطريقة التي توصلت بها إلى الحاجة إلى حل مشكلات تطوير البرامج المعقدة: كتابة المتطلبات التفصيلية، وتطوير نظام اختبار وظيفي، ودراسة تعليمات التعبئة والتغليف، وغير ذلك الكثير. لقد وصلت الآن إلى خطتي، بحيث يمكن تقديم هذا الخلق المتواضع إلى المجتمع الحر. إدارة الملفات المحددة مثل الإدارة من خلال مفهوم الفئات تثير قضايا ومشاكل غير متوقعة، وفي حلها فيتيس أنتجت خمسة مشاريع أخرى حول نفسها، سيتم ذكر بعضها في المقالة. الى الآن فيتيس لم أقم بشراء غلاف رسومي، لكن سهولة استخدام فئات الملفات من سطر الأوامر تفوق بالفعل أي مزايا لمدير ملفات رسومية عادي.

أمثلة على الاستخدام

لنبدأ ببساطة - قم بإنشاء فئة:

vitis create Музыка

دعونا نضيف بعض التركيب إليها كمثال:

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

يمكنك عرض محتويات فئة "الموسيقى" باستخدام الأمر الفرعي "إظهار":

vitis show Музыка

يمكنك تشغيلها باستخدام الأمر الفرعي "فتح".

vitis open Музыка

لأن إذا كان لدينا ملف واحد فقط في فئة "الموسيقى"، فسيتم تشغيل هذا الملف فقط. لغرض فتح الملفات ببرامجها الافتراضية، قمت بإنشاء أداة مساعدة منفصلة vts-FS-فتح (الأدوات القياسية مثل xdg-open أو mimeopen لم تناسبني لعدد من الأسباب؛ ولكن، إذا كان هناك أي شيء، يمكنك تحديد أداة مساعدة أخرى لفتح الملف العالمي في الإعدادات). تعمل هذه الأداة بشكل جيد على توزيعات مختلفة مع بيئات عمل مختلفة، لذلك أوصي بتثبيتها مع Vitis.

يمكنك أيضًا تحديد البرنامج مباشرةً لفتح الملفات:

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

الفئات بدلاً من الدلائل ، أو نظام الملفات الدلالية لنظام Linux

لنقم بإنشاء المزيد من الفئات وإضافة الملفات باستخدام "تعيين". إذا تم تعيين الملفات إلى فئات غير موجودة بعد، فستتم مطالبتك بإنشائها. يمكن تجنب الطلب غير الضروري باستخدام علامة -yes.

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

نريد الآن إضافة فئة "الرياضيات" إلى ملف "الحزمة الإحصائية R: نظرية الاحتمالات والإحصائيات الرياضية.pdf". نحن نعلم أن هذا الملف تم تصنيفه بالفعل على أنه "R" وبالتالي يمكننا استخدام مسار الفئة من نظام Vitis:

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

ولحسن الحظ، فإن إكمال bash يجعل هذا الأمر سهلاً.

دعونا نرى ما حدث، باستخدام علامة --categories لرؤية قائمة الفئات لكل ملف:

vitis show R --categories

الفئات بدلاً من الدلائل ، أو نظام الملفات الدلالية لنظام Linux

لاحظ أنه تم أيضًا تصنيف الملفات تلقائيًا حسب التنسيق والنوع (يجمع بين التنسيقات) وامتداد الملف. يمكن تعطيل هذه الفئات إذا رغبت في ذلك. في وقت لاحق سأقوم بالتأكيد بتوطين أسمائهم.

دعونا نضيف شيئًا آخر إلى "الرياضيات" من أجل التنوع:

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

والآن أصبحت الأمور مثيرة للاهتمام. بدلاً من الفئات، يمكنك كتابة تعبيرات باستخدام عمليات الاتحاد والتقاطع والطرح، أي استخدام العمليات على المجموعات. على سبيل المثال، سيؤدي تقاطع "Math" مع "R" إلى ملف واحد.

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

دعونا نطرح المراجع الخاصة باللغة "R" من "الرياضيات":

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

يمكننا الجمع بين الموسيقى ولغة البحث بلا هدف:

vitis show Музыка u: R

تتيح لك العلامة -n "سحب" الملفات المطلوبة من نتيجة الطلب حسب الأرقام و/أو النطاقات، على سبيل المثال، -n 3-7، أو شيء أكثر تعقيدًا: -n 1,5,8-10,13. غالبًا ما يكون مفيدًا مع الأمر الفرعي المفتوح، والذي يسمح لك بفتح الملفات المطلوبة من القائمة.

الفئات بدلاً من الدلائل ، أو نظام الملفات الدلالية لنظام Linux

بينما نبتعد عن استخدام التسلسل الهرمي التقليدي للدليل، غالبًا ما يكون من المفيد أن يكون لدينا فئات متداخلة. لنقم بإنشاء فئة فرعية "الإحصائيات" ضمن فئة "الرياضيات" وأضف هذه الفئة إلى الملف المناسب:

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

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

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

الفئات بدلاً من الدلائل ، أو نظام الملفات الدلالية لنظام Linux

يمكننا أن نرى أن هذا الملف يحتوي الآن على فئة "الرياضيات/الإحصائيات" بدلاً من "الرياضيات" (يتم تعقب الروابط الإضافية).

قد تكون معالجة المسار الكامل أمرًا غير مريح، فلنقم بإنشاء اسم مستعار "عالمي":

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

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

الفئات بدلاً من الدلائل ، أو نظام الملفات الدلالية لنظام Linux

ليس فقط الملفات العادية

روابط الانترنت

لتوحيد تخزين أي معلومات، سيكون من المفيد، على الأقل، تصنيف الروابط إلى موارد الإنترنت. وهذا ممكن:

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

سيتم إنشاء ملف في مكان خاص برأس صفحة HTML والامتداد .desktop. هذا هو تنسيق الاختصار التقليدي في نظام GNU/Linux. يتم تصنيف هذه الاختصارات تلقائيًا على أنها إشارات مرجعية للشبكة.

وبطبيعة الحال، يتم إنشاء الاختصارات لاستخدامها:

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

يؤدي تنفيذ الأمر إلى فتح الرابط المحفوظ حديثًا في المتصفح. يمكن أن تكون الاختصارات المصنفة لمصادر الإنترنت بمثابة بديل للإشارات المرجعية للمتصفح.

شظايا الملف

من المفيد أيضًا أن يكون لديك فئات للأجزاء الفردية من الملفات. ليس طلبا سيئا، إيه؟ لكن التنفيذ الحالي حتى الآن يؤثر فقط على الملفات النصية العادية وملفات الصوت والفيديو. لنفترض أنك بحاجة إلى تحديد جزء معين من حفل موسيقي أو لحظة مضحكة في فيلم، ثم عند استخدام التعيين، يمكنك استخدام العلامات -fragname، -start، -finish. لنحفظ شاشة التوقف من "DuckTales":

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

vitis open Заставки

في الواقع، لا يحدث أي قطع للملف، وبدلاً من ذلك، يتم إنشاء ملف مؤشر للجزء، والذي يصف نوع الملف، والمسار إلى الملف، وبداية الجزء ونهايته. يتم تفويض إنشاء المؤشرات وفتحها على الأجزاء إلى الأدوات المساعدة التي قمت بإنشائها خصيصًا لهذه الأغراض - وهي mediafragmenter وfragplayer. الأول يخلق والثاني يفتح. في حالة تسجيلات الصوت والفيديو، يتم إطلاق ملف الوسائط من موضع معين إلى موضع معين باستخدام مشغل VLC، لذا يجب أن يكون موجودًا أيضًا في النظام. في البداية كنت أرغب في القيام بذلك استنادًا إلى mplayer، ولكن لسبب ما كان الأمر ملتويًا للغاية عند تحديد المواقع في اللحظة المناسبة.
في مثالنا، يتم إنشاء الملف "Duck Tales intro.fragpointer" (يتم وضعه في مكان خاص)، ثم يتم تشغيل جزء من بداية الملف (نظرًا لعدم تحديد –start عند الإنشاء) حتى 59 العلامة الثانية، وبعدها يتم إغلاق VLC.

مثال آخر هو عندما قررنا تصنيف أداء واحد في حفل موسيقي لفنان مشهور:

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

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

عند فتحه، سيتم إدراج الملف في الموضع المطلوب وسيتم إغلاقه بعد أربع دقائق ونصف.

كيف يعمل كل شيء + ميزات إضافية

فئات التخزين

في بداية التفكير في تنظيم نظام الملفات الدلالي، خطرت على ذهني ثلاث طرق: من خلال تخزين الروابط الرمزية، من خلال قاعدة بيانات، من خلال الوصف في XML. الطريقة الأولى نجحت، لأن... من ناحية، من السهل التنفيذ، ومن ناحية أخرى، لدى المستخدم الفرصة لإلقاء نظرة على الفئات مباشرة من نظام الملفات (وهذا مناسب ومهم). في بداية الاستخدام فيتيس يتم إنشاء دليل "Vitis" وملف التكوين ".config/vitis/vitis.conf" في الدليل الرئيسي للمستخدم. يتم إنشاء الدلائل المقابلة للفئات في ~/Vitis، ويتم إنشاء روابط رمزية للملفات الأصلية في أدلة الفئات هذه. الأسماء المستعارة للفئة هي أيضًا مجرد روابط لها. بالطبع، وجود دليل “Vitis” في الدليل الرئيسي قد لا يناسب بعض الأشخاص. يمكننا التبديل إلى أي مكان آخر:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

عند نقطة معينة، يصبح من الواضح أنه ليس من المنطقي تصنيف الملفات المنتشرة في أماكن مختلفة، حيث يمكن أن يتغير موقعها. لذلك، في البداية، قمت بإنشاء دليل لنفسي، حيث ألقيت كل شيء بغباء وأعطته جميع الفئات. ثم قررت أنه سيكون من الجيد إضفاء الطابع الرسمي على هذه اللحظة على مستوى البرنامج. هكذا ظهر مفهوم "مساحة الملف". في بداية الاستخدام فيتيس لن يضر إعداد مثل هذا الموقع على الفور (سيتم تخزين جميع الملفات التي نحتاجها هناك) وتمكين الحفظ التلقائي:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

بدون الحفظ التلقائي، عند استخدام الأمر الفرعي "تعيين"، ستكون علامة --save مطلوبة إذا كنت تريد حفظ الملف المضاف إلى مساحة الملف.

علاوة على ذلك، يمكنك إضافة عدة مساحات للملفات وتغيير أولوياتها؛ وقد يكون هذا مفيدًا عندما يكون هناك الكثير من الملفات ويتم تخزينها على وسائط مختلفة. لن أفكر في هذا الاحتمال هنا؛ التفاصيل يمكن العثور عليها في مساعدة البرنامج.

ترحيل نظام الملفات الدلالي

على أي حال، يمكن نظريًا في بعض الأحيان أن ينتقل دليل Vitis ومساحات الملفات من مكان إلى آخر. ولإنجاحه، قمت بإنشاء أداة مساعدة منفصلة محرر الارتباط، والذي يمكنه تحرير الروابط بشكل مجمّع، واستبدال أجزاء من المسار بأجزاء أخرى:

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

في الحالة الأولى، بعد أن انتقلنا من /mnt/MyFavoriteDisk/Vitis/ إلى الدليل الرئيسي، يتم تحرير الروابط الرمزية المرتبطة بالأسماء المستعارة. في الحالة الثانية، بعد تغيير موقع مساحة الملف، يتم تغيير جميع الروابط في Vitis إلى روابط جديدة وفقًا لطلب استبدال جزء من مسارها.

الفئات التلقائية

إذا قمت بتشغيل الأمر vitis service get autocategorization، يمكنك أن ترى أنه يتم تعيين الفئات التلقائية افتراضيًا حسب التنسيق (التنسيق والنوع) وامتداد الملف (الامتداد).

يكون هذا مفيدًا، على سبيل المثال، عندما تحتاج إلى العثور على شيء ما بين ملفات PDF أو إلقاء نظرة على ما قمت بتخزينه من EPUB وFB2، يمكنك ببساطة تشغيل الطلب

vitis show Format/MOBI u: Format/FB2

لقد حدث أن أدوات GNU/Linux القياسية مثل الملف أو نوع mimetype لم تناسبني على وجه التحديد لأنها لا تحدد التنسيق دائمًا بشكل صحيح؛ كان علي أن أقوم بالتنفيذ الخاص بي بناءً على توقيعات الملفات وامتداداتها. بشكل عام، يعد موضوع تحديد تنسيقات الملفات موضوعًا مثيرًا للاهتمام للبحث ويستحق مقالًا منفصلاً. في الوقت الحالي، أستطيع أن أقول إنني ربما لم أقدم اعترافًا حقيقيًا بجميع التنسيقات في العالم، ولكن بشكل عام، فهي تعمل بشكل جيد بالفعل. صحيح أن EPUB يعرف الآن التنسيق على أنه ZIP (بشكل عام، هذا له ما يبرره، ولكن في الممارسة العملية لا ينبغي اعتباره سلوكًا عاديًا). في الوقت الحالي، اعتبر هذه الميزة تجريبية وأبلغ عن أي أخطاء. في المواقف الغريبة، يمكنك دائمًا استخدام فئات امتدادات الملفات، على سبيل المثال، Extension/epub.

إذا تم تمكين الفئات التلقائية حسب التنسيق، فسيتم أيضًا تمكين الفئات التلقائية التي تجمع بعض التنسيقات حسب النوع: "الأرشيفات" و"الصور" و"الفيديو" و"الصوت" و"المستندات". سيتم أيضًا إنشاء أسماء محلية لهذه الفئات الفرعية.

ما لا يقال

فيتيس لقد اتضح أنها أداة متعددة الأوجه، ومن الصعب تغطية كل شيء مرة واحدة. اسمحوا لي أن أذكر بإيجاز ما يمكنك القيام به أيضًا:

  • يمكن حذف الفئات وإزالتها من الملفات؛
  • يمكن نسخ نتائج استعلامات التعبير إلى الدليل المحدد؛
  • يمكن تشغيل الملفات كبرامج؛
  • يحتوي الأمر show على العديد من الخيارات، على سبيل المثال، الفرز حسب الاسم/تاريخ التعديل أو الوصول/الحجم/الامتداد، وإظهار خصائص الملف والمسارات إلى النسخ الأصلية، وتمكين عرض الملفات المخفية، وما إلى ذلك؛
  • عندما تقوم بحفظ الارتباطات إلى مصادر الإنترنت، يمكنك أيضًا حفظ النسخ المحلية من صفحات HTML.

يمكن العثور على التفاصيل الكاملة في مساعدة المستخدم.

آفاق

كثيرًا ما يقول المتشككون إنه "لن يقوم أحد بوضع هذه العلامات بنفسه". باستخدام المثال الخاص بي، أستطيع إثبات العكس: لقد قمت بالفعل بتصنيف أكثر من ستة آلاف ملف، وإنشاء أكثر من ألف فئة وأسماء مستعارة، وكان الأمر يستحق ذلك. عندما يكون فريق واحد vitis open План افتح قائمة المهام الخاصة بك أو عندما يكون لديك أمر واحد vitis open LaTeX عندما تفتح كتاب Stolyarov حول نظام تخطيط LaTeX، فمن الصعب أخلاقياً استخدام نظام الملفات "بالطريقة القديمة".

وعلى هذا الأساس ينشأ عدد من الأفكار. على سبيل المثال، يمكنك إنشاء راديو تلقائي يقوم بتشغيل الموسيقى المواضيعية وفقًا للطقس الحالي أو العطلة أو يوم الأسبوع أو الوقت من اليوم أو السنة. أقرب إلى الموضوع هو مشغل الموسيقى الذي يعرف الفئات ويمكنه تشغيل الموسيقى عن طريق التعبير مع العمليات على الفئات كما هو الحال في المجموعات. من المفيد إنشاء برنامج خفي يراقب دليل "التنزيلات" ويعرض تصنيف الملفات الجديدة. وبطبيعة الحال، يجب علينا إنشاء مدير ملفات دلالية رسومية عادية. ذات مرة، قمت بإنشاء خدمة ويب للمؤسسة للاستخدام الجماعي للملفات، لكنها لم تكن أولوية وأصبحت غير ذات صلة، على الرغم من أنها حققت مستوى عالٍ من الأداء. (بسبب التغييرات الكبيرة في فيتيس، لم يعد صالحًا للاستخدام.)

هنا عرض صغير

الفئات بدلاً من الدلائل ، أو نظام الملفات الدلالية لنظام Linux

اختتام

كرمة ليست المحاولة الأولى لتغيير أسلوب العمل مع البيانات بشكل جذري، لكنني اعتبرت أنه من المهم تنفيذ أفكاري وإتاحة التنفيذ للجمهور بموجب ترخيص GNU GPL. للراحة، تم إنشاء حزمة deb لـ x86-64، وينبغي أن تعمل على جميع توزيعات دبيان الحديثة. كانت هناك صعوبات طفيفة في ARM (في حين أن جميع البرامج الأخرى المتعلقة بـ فيتيس، تعمل بشكل جيد)، ولكن في المستقبل سيتم تجميع حزمة عمل لهذه المنصة (armhf). لقد توقفت عن إنشاء حزم RPM في الوقت الحالي بسبب مشاكل في Fedora 30 وصعوبة الانتشار عبر العديد من توزيعات RPM، ولكن سيتم إنشاء حزم لاحقة لاثنين منها على الأقل. في هذه الأثناء يمكنك استخدام make && make install أو checkinstall.

شكرا لكم جميعا على اهتمامكم! آمل أن يكون هذا المقال وهذا المشروع مفيدًا.

رابط إلى مستودع المشروع

المصدر: www.habr.com

إضافة تعليق