{"id":35687,"date":"2019-10-31T22:05:46","date_gmt":"2019-10-31T19:05:46","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kategorii-vmesto-direktorij-ili-semanticheskaya-fajlovaya-sistema-dlya-linux\/"},"modified":"2019-10-31T22:05:46","modified_gmt":"2019-10-31T19:05:46","slug":"kategorii-vmesto-direktorij-ili-semanticheskaya-fajlovaya-sistema-dlya-linux","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kategorii-vmesto-direktorij-ili-semanticheskaya-fajlovaya-sistema-dlya-linux","title":{"rendered":"Categories Instead of Directories, or Semantic File System for Linux","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Data classification is an interesting research topic in itself. I love collecting information that seems necessary, and I've always tried to create logical hierarchies of directories for my files. One night, I had a dream about a beautiful and convenient program for assigning tags to files, and I decided that I could no longer live this way.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"problema-ierarhicheskih-faylovyh-sistem\">The Problem of Hierarchical File Systems<\/h1>\n<p><\/p>\n<p>Users often face the problem of choosing where to save a new file and the challenge of finding their own files (sometimes file names are not meant to be easily remembered by people).<\/p>\n<p><\/p>\n<p>A solution might be semantic file systems, which are typically an extension of traditional file systems. In them, directories are replaced with semantic attributes, also known as tags, categories, and metadata. I will more frequently use the term 'category' as the word 'tag' can sometimes sound odd in the context of file systems, especially when 'subtags' and 'tag aliases' come into play.<\/p>\n<p><\/p>\n<p>Assigning categories to files largely alleviates the issues of storage location and file retrieval: if you remember (or can guess) at least one of the categories assigned to a file, the file will never go missing.<\/p>\n<p><\/p>\n<p>This topic has been raised multiple times on Habr (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/27581\/\">one<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/337202\/\">two<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/374465\/\">three<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/81352\/\">four<\/a><\/noindex> and others), here I describe my solution.<\/p>\n<p><\/p>\n<h1 id=\"put-k-realizacii\">Path to Implementation<\/h1>\n<p><\/p>\n<p>Right after the mentioned dream, I sketched out a command interface in a notebook to handle categories. I thought that within a week or two, I could write a prototype using Python or Bash, and later work on creating a graphical interface with Qt or GTK. Reality, as always, turned out to be much harsher, and the development took longer than expected.<\/p>\n<p><\/p>\n<p>The initial idea was to create a program with a user-friendly and concise command-line interface that would allow users to create and delete categories, assign categories to files, and remove categories from files. I named the program <em>vitis<\/em>.<\/p>\n<p><\/p>\n<p>The First Attempt to Create <em>vitis<\/em> ended up going nowhere, as a lot of time was spent on work and school. The second attempt was something: I managed to complete the intended project for my master's thesis and even create a GTK shell prototype. However, that version turned out to be so unreliable and inconvenient that I had to rethink many things.<\/p>\n<p><\/p>\n<p>I actually used the third version for a long time, categorizing several thousand of my files. This was greatly aided by the implemented bash autocompletion. However, some issues remained, such as the absence of automatic categories and the ability to store files with the same name, and the program was already struggling under its own complexity. Thus, I felt the need to address the challenges of developing complex software: writing detailed requirements, developing a functional testing system, studying packaging instructions, and much more. Now I have reached my goal, and this modest creation can be presented to the free community. Such a specific file management method, like managing through the concept of categories, raises unexpected questions and problems, and in addressing them <em>vitis<\/em> it spawned five more projects, some of which will be mentioned in the article. To this day <em>vitis<\/em> I haven't acquired a graphical interface, but the convenience of using file categories from the command line already outweighs any advantages of a typical graphical file manager.<\/p>\n<p><\/p>\n<h1 id=\"primery-ispolzovaniya\">Examples of usage<\/h1>\n<p><\/p>\n<p>Let's start simple \u2014 we'll create a category:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis create Music<\/code><\/pre>\n<p><\/p>\n<p>We'll add a piece of music for example:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign Music -f \"The Ink Spots - I Don't Want To Set The World On Fire.mp3\"<\/code><\/pre>\n<p><\/p>\n<p>You can view the contents of the category 'Music' using the command 'show':<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis show Music<\/code><\/pre>\n<p><\/p>\n<p>You can play it using the command 'open'.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis open Music<\/code><\/pre>\n<p><\/p>\n<p>Since we have only one file in the 'Music' category, only it will be launched. For the purpose of opening files with default programs, I created a separate utility. <em>vts-fs-open<\/em> (Standard tools like xdg-open or mimeopen didn't suit me for various reasons; however, if needed, you can specify another utility for universal file opening in the settings). This utility works well on various distributions with different desktop environments, so I recommend installing it along with vitis.<\/p>\n<p><\/p>\n<p>You can also directly specify a program to open files:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis open Music --app qmmp<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Categories Instead of Directories, or Semantic File System for Linux\" src=\"\/wp-content\/uploads\/2019\/06\/4823ff69e03b2e8b9986eedfe0604a9d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Let's create more categories and add files using 'assign'. If the files are assigned to non-existent categories, a request for their creation will be issued. You can avoid the extra request by using the flag \u2014yes.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign Programming R -f \"Introduction to R.pdf\" \"Statistical Package R: Probability Theory and Mathematical Statistics.pdf\" --yes<\/code><\/pre>\n<p><\/p>\n<p>Now we want to add the file 'Statistical Package R: Theory of Probability and Mathematical Statistics.pdf' to the category 'Mathematics'. We know that this file already has the category 'R', so we can use the category path from the Vitis system:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign Mathematics -v \"R\/Statistical Package R: Probability Theory and Mathematical Statistics.pdf\"<\/code><\/pre>\n<p><\/p>\n<p>Fortunately, bash autocompletion will make this easy.<\/p>\n<p><\/p>\n<p>Let's see what we have, using the flag \u2014categories to see the list of categories for each file:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis show R --categories<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Categories Instead of Directories, or Semantic File System for Linux\" src=\"\/wp-content\/uploads\/2019\/06\/7bbaf561e6efe407ec8dfcda3a89c3b8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Note that files also have been automatically assigned categories based on format, type (which combines formats), and file extensions. These categories can be disabled if desired. I will definitely localize their names later.<\/p>\n<p><\/p>\n<p>Let's add something else to 'Mathematics' for variety:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign Mathematics -f \"Mathematical Analysis - 1984.pdf\" Perelman_Entertaining_Mathematics_1927.djvu <\/code><\/pre>\n<p><\/p>\n<p>Now it gets interesting. Instead of categories, you can write expressions with union, intersection, and subtraction operations, that is, use set operations. For example, the intersection of 'Mathematics' and 'R' will yield one file.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis show R i: Mathematics<\/code><\/pre>\n<p><\/p>\n<p>Let's subtract mentions of the language 'R' from 'Mathematics':<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis show Mathematics R  #or vitis show Mathematics c: R<\/code><\/pre>\n<p><\/p>\n<p>We can randomly unite music and language R:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis show Music u: R<\/code><\/pre>\n<p><\/p>\n<p>The flag -n allows you to 'extract' the necessary files by numbers and\/or ranges from the query result, for example, <code>-n 3-7<\/code>, or something more complex: <code>-n 1,5,8-10,13<\/code>. It is often useful with the open sub-command, which allows opening the necessary files from the list.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Categories Instead of Directories, or Semantic File System for Linux\" src=\"\/wp-content\/uploads\/2019\/06\/5e9181a711a88368b38d8cd2f2e628f4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Even though we are stepping away from using the conventional directory hierarchy, it is often useful to have nested categories. Let's create a subcategory 'Statistics' under the category 'Mathematics' and add this category to the appropriate file:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis create Mathematics\/Statistics\n\nvitis assign Mathematics\/Statistics -v \"R\/Introduction to R.pdf\"\n\nvitis show Mathematics --categories<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Categories Instead of Directories, or Semantic File System for Linux\" src=\"\/wp-content\/uploads\/2019\/06\/0bb3381f35cfa2fce381ecc66a62701f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>We can see that this file now has the category 'Mathematics\/Statistics' instead of 'Mathematics' (unnecessary links are tracked).<\/p>\n<p><\/p>\n<p>It can be inconvenient to refer to the full path, let's create a 'global' alias:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign Mathematics\/Statistics -a Statistics\n\nvitis show Statistics<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Categories Instead of Directories, or Semantic File System for Linux\" src=\"\/wp-content\/uploads\/2019\/06\/619c27802802fd93594d3c0050dd78e8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"ne-tolko-obychnye-fayly\">Not just regular files<\/h2>\n<p><\/p>\n<h3 id=\"internet-ssylki\">Internet links<\/h3>\n<p><\/p>\n<p>To unify the storage of any information, it would be useful to at least categorize links to Internet resources. And this is possible:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign Habr ColorAnomaly -i https:\/\/habr.com\/en\/company\/sfe_ru\/blog\/437304\/ --yes<\/code><\/pre>\n<p><\/p>\n<p>A file with the HTML page title and a .desktop extension will be created in a special location. This is the traditional shortcut format in GNU\/Linux. Such shortcuts receive an automatic category of NetworkBookmarks.<\/p>\n<p><\/p>\n<p>Naturally, shortcuts are created to be used:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis open ColorAnomaly<\/code><\/pre>\n<p><\/p>\n<p>Executing the command opens the just-saved link in the browser. Categorized shortcuts to Internet sources can serve as a replacement for browser bookmarks.<\/p>\n<p><\/p>\n<h3 id=\"fragmenty-faylov\">File fragments<\/h3>\n<p><\/p>\n<p>It's also useful to have categories for separate file segments. Not a bad request, right? But the current implementation only affects regular text files, audio, and video files. Suppose you need to mark a specific part of a concert or a funny moment in a movie, then when using assign, you can use the flags \u2014fragname, \u2014start, \u2014finish. Let's save the intro from 'Duck Tales':<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign vitis assign -c Titles -f Duck_Tales\/s01s01.avi --finish 00:00:59 --fragname \"Duck Tales intro\"\n\nvitis open Titles<\/code><\/pre>\n<p><\/p>\n<p>In reality, no files are cut; instead, a pointer file to the fragment is created, which describes the file type, file path, starting and ending points of the fragment. The creation and opening of fragment pointers are delegated to utilities I specifically made for these purposes \u2014 mediafragmenter and fragplayer. The first creates, the second opens. In the case of audio and video recordings, playing the media file from a specific position to a certain point is done using the VLC player, so it must also be present on the system. I initially wanted to base this on mplayer, but for some reason, it was very unsatisfactory with positioning at the right moment.<br \/>\nIn our example, a file 'Duck Tales intro.fragpointer' is created (it is placed in a specific location), and then the fragment is played from the beginning of the file (since \u2014start was not specified during creation) to the mark at 59 seconds, after which VLC closes.<\/p>\n<p><\/p>\n<p>Another example \u2014 we decided to categorize a specific performance at a concert of some famous artist:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis assign Lep\u0441 \"Save Our Souls\" -f Grigory Leps - Concert Sail - songs of Vladimir Vysotsky.mp4 --fragname \"Save Our Souls\" --start 00:32:18 --finish 00:36:51\n\nvitis open \"Save Our Souls\"<\/code><\/pre>\n<p><\/p>\n<p>When opened, the file will be included at the required position and will close after four and a half minutes.<\/p>\n<p><\/p>\n<h1 id=\"kak-eto-vsyo-rabotaet--dopolnitelnye-vozmozhnosti\">How it all works + additional features<\/h1>\n<p><\/p>\n<h2 id=\"hranenie-kategoriy\">Storage of categories<\/h2>\n<p><\/p>\n<p>At the very beginning of planning the organization of the semantic file system, three methods came to mind: through storing symbolic links, via a database, and through XML description. The first method won, as it is simple to implement and allows the user to view categories directly from the file system (which is convenient and important). At the beginning of usage <em>vitis<\/em> In the user's home directory, a directory 'Vitis' is created along with the configuration file '.config\/vitis\/vitis.conf'. In ~\/Vitis, directories corresponding to categories are created, and symbolic links to the original files are created in these category directories. Category aliases are also just links to them. Of course, having a 'Vitis' directory in the home folder may not suit everyone. We can switch to any other location:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis service set path \/mnt\/MyFavoriteDisk\/Vitis\/<\/code><\/pre>\n<p><\/p>\n<p>At a certain point, it becomes clear that categorizing files scattered across different locations is rather pointless, as their location may change. Therefore, I initially created a directory where I simply dropped everything and assigned categories to it. Then I thought it would be nice to formalize this concept at a programming level. Thus, the notion of 'file space' emerged. <em>vitis<\/em> it wouldn't hurt to set up such a place (where all the files we need will be stored) and enable autosave:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis service add filespace \/mnt\/MyFavoriteDisk\/Filespace\/\nvitis service set autosave yes<\/code><\/pre>\n<p><\/p>\n<p>Without autosave when using the 'assign' subcommand, the --save flag will be required if you wish to save the added file in the file space.<\/p>\n<p><\/p>\n<p>Moreover, you can add multiple filespaces and change their priorities, which can be useful when there are many files stored on different media. I won't be discussing this option here; you can read more about it in the program's help.<\/p>\n<p><\/p>\n<h2 id=\"migraciya-semanticheskoy-faylovoy-sistemy\">Migrating the semantic filesystem<\/h2>\n<p><\/p>\n<p>One way or another, the Vitis directory and filespaces can theoretically move from place to place. To restore functionality, I created a separate utility <em>link-editor<\/em>, which can batch edit links, replacing parts of the path with others:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">cp -r \/mnt\/MyFavoriteDisk\/Vitis\/ ~\/Vitis\nlink-editor -d ~\/Vitis\/ -f \/mnt\/MyFavoriteDisk\/Vitis\/ -r ~\/Vitis\/ -R\ncp -r \/mnt\/MyFavoriteDisk\/Filespace\/ ~\/MyFiles\nlink-editor -d ~\/Vitis\/ -f \/mnt\/FlashDrive-256\/Filespace\/ -r ~\/MyFiles -R<\/code><\/pre>\n<p><\/p>\n<p>In the first case, after we moved from \/mnt\/MyFavoriteDisk\/Vitis\/ to the home directory, symbolic links related to aliases are edited. In the second case, after changing the location of the filespace, all links in Vitis are updated to the new ones according to the request to replace part of their path.<\/p>\n<p><\/p>\n<h2 id=\"avtomaticheskie-kategorii\">Automatic categories<\/h2>\n<p><\/p>\n<p>If you run the command <code>vitis service get autocategorization<\/code>, you'll see that, by default, automatic category assignment is set up according to the format (Format and Type) and file extension (Extension).<\/p>\n<p><\/p>\n<p>This is useful when, for example, you need to find something among PDFs or check what you have stored as EPUB and FB2; you can simply execute the request<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">vitis show Format\/MOBI u: Format\/FB2<\/code><\/pre>\n<p><\/p>\n<p>It so happened that standard GNU\/Linux tools like file or mimetype did not satisfy me precisely because they do not always correctly determine the format, which led me to implement my own solution based on file signatures and extensions. In general, the topic of file format detection is an interesting area for research and deserves a separate article. For now, I can say that while I might not have accounted for accurate recognition for all formats in the world, it is already working reasonably well. However, EPUB currently defines the format as ZIP (which is generally justified, but in practice, this should not be considered normal behavior). For a while, consider this feature experimental; please report any bugs. In unusual situations, you can always use categories based on file extensions, for example, Extension\/epub.<\/p>\n<p><\/p>\n<p>If auto-categories are enabled by format, auto-categories that merge some formats will also be included, such as: 'Archives', 'Pictures', 'Video', 'Audio', and 'Documents'. Localized names will also be created for these subcategories.<\/p>\n<p><\/p>\n<h1 id=\"o-chyom-ne-skazano\">What is not mentioned<\/h1>\n<p><\/p>\n<p><em>vitis<\/em> turned out to be a very versatile tool, and it\u2019s hard to cover everything at once. I will briefly mention what else can be done:<\/p>\n<p><\/p>\n<ul>\n<li>categories can be deleted and removed from files;<\/li>\n<li>search results based on expressions can be copied to a specified directory;<\/li>\n<li>files can be run as programs;<\/li>\n<li>the show command has many options, such as sorting by name\/date modified or by size\/extension, displaying properties of files and paths to originals, including hidden files display, etc.;<\/li>\n<li>when saving links to online sources, local copies of HTML pages can also be saved.<\/li>\n<\/ul>\n<p><\/p>\n<p>All details can be found in the user guide.<\/p>\n<p><\/p>\n<h1 id=\"perspektivy\">Prospects<\/h1>\n<p><\/p>\n<p>Skeptics often say that 'no one will categorize these tags themselves.' I can prove otherwise from my experience: I have already categorized over six thousand files and created more than a thousand categories and aliases, and it was worth it. When you open <code>vitis open Plan<\/code> you open your to-do list or when using a single command <code>vitis open LaTeX<\/code> Stolyarov's book about the LaTeX typesetting system, it becomes mentally challenging to use the file system 'the old way'.<\/p>\n<p><\/p>\n<p>On this basis, several ideas arise. For example, an automatic radio could be created that plays thematic music according to the current weather, holiday, day of the week, time of day, or year. Additionally, a music player that understands categories and can play music based on expressions with operations over categories as if they were sets would be relevant. It would also be useful to create a daemon that monitors the 'Downloads' folder and suggests categorizing new files. And of course, a proper graphical semantic file manager should be developed. At one point, I even created a web service for collective file sharing for the company, but it became a lower priority and became outdated, although it reached a high level of functionality. (Due to significant changes in the actual) <em>vitis<\/em>, it is no longer usable.)<\/p>\n<p>\n<b class=\"spoiler_title\">here is a small demonstration<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Categories Instead of Directories, or Semantic File System for Linux\" src=\"\/wp-content\/uploads\/2019\/06\/0a8e3829424135a6bf9390d2b2654499.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">Conclusion<\/h1>\n<p><\/p>\n<p><em>Vitis<\/em> \u2014 not the first attempt to radically change the way we work with data, but I found it important to implement my ideas and release the implementation as open source under the GNU GPL license. For convenience, a deb package has been created for x86-64, which should work on all modern Debian distributions. There were some minor issues on ARM (although all other programs related to <em>vitis<\/em>, work fine), but a working package for this platform (armhf) will also be prepared in the future. I have stopped creating RPM packages for now due to issues with Fedora 30 and the difficulty of spreading across multiple RPM distributions, but packages will still be made for at least a couple of them later. In the meantime, you can use <code>make &amp;&amp; make install<\/code> or <code>checkinstall<\/code>.<\/p>\n<p><\/p>\n<p>Thank you all for your attention! I hope this article and project can prove useful.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/tech.vindex\/vitis\">Link to the project repository<\/a><\/noindex><\/p>\n<p>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/457328\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439. \u042f \u043b\u044e\u0431\u043b\u044e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u043a\u0430\u0436\u0443\u0449\u0443\u044e\u0441\u044f \u043d\u0443\u0436\u043d\u043e\u0439, \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u0438 \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u0432\u043e \u0441\u043d\u0435 \u044f \u0443\u0432\u0438\u0434\u0435\u043b \u043a\u0440\u0430\u0441\u0438\u0432\u0443\u044e \u0438 \u0443\u0434\u043e\u0431\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u044d\u0433\u043e\u0432 \u0444\u0430\u0439\u043b\u0430\u043c, \u0438 \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0442\u0430\u043a \u0436\u0438\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0447\u0430\u0441\u0442\u043e \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26733,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-35687","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kategorii-vmesto-direktorij-ili-semanticheskaya-fajlovaya-sistema-dlya-linux\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439, \u0438\u043b\u0438 \u0421\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f Linux | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kategorii-vmesto-direktorij-ili-semanticheskaya-fajlovaya-sistema-dlya-linux\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:05:46+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:05:46+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Categories instead of directories, or a Semantic File System for Linux | ProHoster","description":"Data classification is an interesting topic for research in itself.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kategorii-vmesto-direktorij-ili-semanticheskaya-fajlovaya-sistema-dlya-linux","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439, \u0438\u043b\u0438 \u0421\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f Linux | ProHoster","og:description":"\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kategorii-vmesto-direktorij-ili-semanticheskaya-fajlovaya-sistema-dlya-linux","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:05:46+00:00","article:modified_time":"2019-10-31T19:05:46+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35687","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 00:23:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:57:46","updated":"2026-01-22 00:23:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/35687","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=35687"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/35687\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/26733"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=35687"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=35687"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=35687"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}