Danh mục thay vì thư mục hoặc hệ thống tệp ngữ nghĩa cho Linux

Bản thân phân loại dữ liệu là một chủ đề nghiên cứu thú vị. Tôi thích thu thập thông tin có vẻ cần thiết và tôi luôn cố gắng tạo hệ thống phân cấp thư mục hợp lý cho các tệp của mình và một ngày nọ, trong giấc mơ, tôi thấy một chương trình đẹp và tiện lợi để gán thẻ cho các tệp và tôi quyết định rằng tôi không thể sống được nữa. như thế này nữa.

Vấn đề về hệ thống tập tin phân cấp

Người dùng thường phải đối mặt với vấn đề chọn nơi lưu tệp mới tiếp theo và vấn đề tìm tệp của riêng họ (đôi khi tên tệp hoàn toàn không nhằm mục đích để một người ghi nhớ).

Một cách thoát khỏi tình huống này có thể là các hệ thống tệp ngữ nghĩa, thường là một phần bổ sung cho hệ thống tệp truyền thống. Các thư mục trong đó được thay thế bằng các thuộc tính ngữ nghĩa, còn được gọi là thẻ, danh mục và siêu dữ liệu. Tôi sẽ sử dụng thuật ngữ “danh mục” thường xuyên hơn, bởi vì... Trong ngữ cảnh của hệ thống tập tin, từ "tag" đôi khi hơi lạ, đặc biệt khi "thẻ phụ" và "bí danh thẻ" xuất hiện.

Việc chỉ định danh mục cho tệp sẽ loại bỏ phần lớn vấn đề lưu trữ và tìm kiếm tệp: nếu bạn nhớ (hoặc đoán) ít nhất một trong các danh mục được gán cho tệp thì tệp sẽ không bao giờ biến mất khỏi chế độ xem.

Trước đây chủ đề này đã hơn một lần được nêu ra trên Habré (thời gian, два, ba, bốn v.v.), ở đây tôi mô tả giải pháp của mình.

Con đường dẫn tới hiện thực hóa

Ngay sau giấc mơ được đề cập, tôi đã mô tả trong sổ tay của mình giao diện lệnh cung cấp các công việc cần thiết với các danh mục. Sau đó, tôi quyết định rằng trong một hoặc hai tuần nữa, tôi có thể viết một nguyên mẫu bằng Python hoặc Bash, sau đó tôi sẽ phải tạo một shell đồ họa trong Qt hoặc GTK. Thực tế, như mọi khi, hóa ra khắc nghiệt hơn nhiều và sự phát triển bị trì hoãn.

Ý tưởng ban đầu trước hết là tạo ra một chương trình có giao diện dòng lệnh ngắn gọn và thuận tiện để tạo, xóa các danh mục, gán danh mục cho tệp và xóa danh mục khỏi tệp. Tôi đã gọi chương trình viêm ruột.

Nỗ lực đầu tiên để tạo viêm ruột kết thúc không có kết quả gì, vì phần lớn thời gian bắt đầu được dành cho công việc và trường đại học. Nỗ lực thứ hai đã thành công: đối với luận văn thạc sĩ, tôi đã hoàn thành dự án theo kế hoạch và thậm chí còn tạo ra nguyên mẫu của lớp vỏ GTK. Nhưng phiên bản đó hóa ra không đáng tin cậy và bất tiện đến mức phải suy nghĩ lại rất nhiều.

Tôi thực sự đã sử dụng phiên bản thứ ba trong một thời gian rất dài, đã chuyển hàng nghìn tệp của mình sang các danh mục. Điều này cũng được hỗ trợ rất nhiều nhờ việc hoàn thành bash được triển khai. Nhưng một số vấn đề, chẳng hạn như thiếu danh mục tự động và khả năng lưu trữ các tệp cùng tên, vẫn còn tồn tại và chương trình đã bị hạn chế bởi sự phức tạp của chính nó. Đây là lý do khiến tôi nảy sinh nhu cầu giải quyết các vấn đề phát triển phần mềm phức tạp: viết yêu cầu chi tiết, phát triển hệ thống kiểm tra chức năng, nghiên cứu hướng dẫn đóng gói, v.v. Bây giờ tôi đã đạt được kế hoạch của mình, để tác phẩm khiêm tốn này có thể được giới thiệu tới cộng đồng tự do. Quản lý tệp cụ thể như quản lý thông qua khái niệm danh mục đặt ra các vấn đề và vấn đề không mong muốn và trong việc giải quyết chúng viêm ruột đã sinh ra thêm năm dự án nữa, một số dự án sẽ được đề cập trong bài viết. Cho đến bây giờ viêm ruột Tôi chưa mua shell đồ họa, nhưng sự tiện lợi của việc sử dụng các danh mục tệp từ dòng lệnh đối với tôi đã vượt trội hơn bất kỳ lợi thế nào của trình quản lý tệp đồ họa thông thường.

Ví dụ về sử dụng

Hãy bắt đầu đơn giản - tạo một danh mục:

vitis create Музыка

Hãy thêm một số thành phần vào nó làm ví dụ:

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

Bạn có thể xem nội dung của danh mục “Âm nhạc” bằng lệnh phụ “show”:

vitis show Музыка

Bạn có thể chơi nó bằng lệnh phụ "mở".

vitis open Музыка

Bởi vì Nếu chúng tôi chỉ có một tệp trong danh mục “Âm nhạc” thì chỉ có tệp đó sẽ khởi chạy. Với mục đích mở file bằng chương trình mặc định của mình, tôi đã tạo một tiện ích riêng vts-fs-mở (các công cụ tiêu chuẩn như xdg-open hoặc mimeopen không phù hợp với tôi vì một số lý do; nhưng, nếu có, trong cài đặt, bạn có thể chỉ định một tiện ích khác để mở tệp phổ quát). Tiện ích này hoạt động tốt trên các bản phân phối khác nhau với các môi trường làm việc khác nhau, vì vậy tôi khuyên bạn nên cài đặt nó cùng với vitis.

Bạn cũng có thể chỉ định trực tiếp chương trình để mở tệp:

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

Danh mục thay vì thư mục hoặc hệ thống tệp ngữ nghĩa cho Linux

Hãy tạo thêm danh mục và thêm tệp bằng cách sử dụng “gán”. Nếu tệp được gán cho các danh mục chưa tồn tại, bạn sẽ được nhắc tạo chúng. Có thể tránh yêu cầu không cần thiết bằng cách sử dụng cờ -yes.

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

Bây giờ chúng tôi muốn thêm danh mục “Toán học” vào tệp “Gói thống kê R: lý thuyết xác suất và thống kê toán học.pdf”. Chúng tôi biết rằng tệp này đã được phân loại là "R" và do đó chúng tôi có thể sử dụng đường dẫn danh mục từ hệ thống Vitis:

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

May mắn thay, việc hoàn thành bash khiến việc này trở nên dễ dàng.

Hãy xem điều gì đã xảy ra, sử dụng cờ --categories để xem danh sách các danh mục cho mỗi tệp:

vitis show R --categories

Danh mục thay vì thư mục hoặc hệ thống tệp ngữ nghĩa cho Linux

Lưu ý rằng các tệp cũng đã được tự động phân loại theo định dạng, loại (kết hợp các định dạng) và phần mở rộng tệp. Những danh mục này có thể bị vô hiệu hóa nếu muốn. Sau này tôi chắc chắn sẽ bản địa hóa tên của họ.

Hãy thêm nội dung khác vào “Toán học” cho đa dạng:

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

Và bây giờ mọi thứ trở nên thú vị. Thay vì phân loại, bạn có thể viết biểu thức với các phép toán hợp, giao và trừ, tức là sử dụng các phép toán trên tập hợp. Ví dụ: giao điểm của "Toán học" với "R" sẽ tạo ra một tệp.

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

Chúng ta hãy trừ các tham chiếu đến ngôn ngữ “R” khỏi “Toán học”:

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

Chúng ta có thể kết hợp âm nhạc và ngôn ngữ R một cách không mục đích:

vitis show Музыка u: R

Cờ -n cho phép bạn “rút” các tệp được yêu cầu khỏi kết quả yêu cầu theo số và/hoặc phạm vi, ví dụ: -n 3-7, hoặc một cái gì đó phức tạp hơn: -n 1,5,8-10,13. Nó thường hữu ích với lệnh con mở, cho phép bạn mở các tệp mong muốn từ danh sách.

Danh mục thay vì thư mục hoặc hệ thống tệp ngữ nghĩa cho Linux

Mặc dù chúng tôi đang dần loại bỏ việc sử dụng hệ thống phân cấp thư mục thông thường, nhưng việc có các danh mục lồng nhau thường rất hữu ích. Hãy tạo một danh mục con “Thống kê” trong danh mục “Toán học” và thêm danh mục này vào tệp thích hợp:

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

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

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

Danh mục thay vì thư mục hoặc hệ thống tệp ngữ nghĩa cho Linux

Chúng ta có thể thấy rằng tệp này hiện có danh mục “Toán học/Thống kê” thay vì “Toán học” (các liên kết bổ sung được theo dõi).

Việc giải quyết đường dẫn đầy đủ có thể bất tiện, hãy tạo một bí danh “toàn cầu”:

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

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

Danh mục thay vì thư mục hoặc hệ thống tệp ngữ nghĩa cho Linux

Không chỉ các tập tin thông thường

Liên kết Internet

Để thống nhất việc lưu trữ bất kỳ thông tin nào, ít nhất sẽ hữu ích nếu phân loại các liên kết đến tài nguyên Internet. Và điều này là có thể:

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

Một tệp có tiêu đề trang HTML và phần mở rộng .desktop sẽ được tạo ở một vị trí đặc biệt. Đây là định dạng phím tắt truyền thống trong GNU/Linux. Các phím tắt như vậy được tự động phân loại là NetworkBookmarks.

Đương nhiên, các phím tắt được tạo ra để sử dụng:

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

Việc thực thi lệnh sẽ khiến liên kết mới lưu được mở trong trình duyệt. Các phím tắt được phân loại đến các nguồn Internet có thể đóng vai trò thay thế cho dấu trang của trình duyệt.

Các đoạn tập tin

Việc có các danh mục cho từng phần tệp riêng lẻ cũng rất hữu ích. Một yêu cầu không tồi phải không? Nhưng việc triển khai hiện tại cho đến nay chỉ ảnh hưởng đến các tệp văn bản, tệp âm thanh và video thuần túy. Giả sử bạn cần đánh dấu một phần nhất định của buổi hòa nhạc hoặc một khoảnh khắc hài hước trong một bộ phim, thì khi sử dụng lệnh gán, bạn có thể sử dụng các cờ -fragname, -start, -finish. Hãy lưu trình bảo vệ màn hình khỏi "DuckTales":

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

vitis open Заставки

Trong thực tế, không có việc cắt tệp nào xảy ra; thay vào đó, một tệp con trỏ tới đoạn được tạo, mô tả loại tệp, đường dẫn đến tệp, phần đầu và phần cuối của đoạn. Việc tạo và mở con trỏ tới các đoạn được giao cho các tiện ích mà tôi đặc biệt tạo ra cho những mục đích này - đó là mediafragmenter và fragplayer. Cái đầu tiên tạo ra, cái thứ hai mở ra. Trong trường hợp ghi âm thanh và video, tệp phương tiện được khởi chạy từ một vị trí nhất định đến một vị trí nhất định bằng trình phát VLC, do đó nó cũng phải có trong hệ thống. Lúc đầu tôi muốn làm điều này dựa trên mplayer, nhưng không hiểu sao nó lại rất sai lầm trong việc định vị đúng thời điểm.
Trong ví dụ của chúng tôi, tệp “Duck Tales intro.fragpointer” được tạo (nó được đặt ở một vị trí đặc biệt) và sau đó một đoạn được phát từ đầu tệp (vì –start không được chỉ định khi tạo) cho đến 59 dấu thứ hai, sau đó VLC đóng lại.

Một ví dụ khác là khi chúng tôi quyết định phân loại một buổi biểu diễn tại buổi hòa nhạc của một nghệ sĩ nổi tiếng:

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

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

Khi mở ra, tệp sẽ được đưa vào vị trí mong muốn và sẽ đóng sau bốn phút rưỡi.

Cách thức hoạt động + các tính năng bổ sung

Lưu trữ danh mục

Khi bắt đầu nghĩ đến việc tổ chức một hệ thống tệp ngữ nghĩa, ba cách đã xuất hiện trong đầu: thông qua việc lưu trữ các liên kết tượng trưng, ​​​​thông qua cơ sở dữ liệu, thông qua mô tả trong XML. Phương pháp đầu tiên đã thắng, bởi vì... một mặt, nó dễ thực hiện và mặt khác, người dùng có cơ hội xem các danh mục trực tiếp từ hệ thống tệp (và điều này rất tiện lợi và quan trọng). Khi bắt đầu sử dụng viêm ruột Thư mục “Vitis” và tệp cấu hình “.config/vitis/vitis.conf” được tạo trong thư mục chính của người dùng. Các thư mục tương ứng với các danh mục được tạo trong ~/Vitis và các liên kết tượng trưng đến các tệp gốc được tạo trong các thư mục danh mục này. Bí danh danh mục cũng chỉ là liên kết đến chúng. Tất nhiên, sự hiện diện của thư mục “Vitis” trong thư mục chính có thể không phù hợp với một số người. Chúng ta có thể chuyển sang bất kỳ vị trí nào khác:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

Tại một thời điểm nhất định, rõ ràng là việc phân loại các tệp nằm rải rác ở những nơi khác nhau sẽ không có ý nghĩa gì vì vị trí của chúng có thể thay đổi. Vì vậy, để bắt đầu, tôi đã tạo một thư mục cho chính mình, nơi tôi ngu ngốc vứt bỏ mọi thứ và đưa ra tất cả các danh mục. Sau đó, tôi quyết định rằng sẽ rất tốt nếu chính thức hóa thời điểm này ở cấp độ chương trình. Đây là cách mà khái niệm “không gian tập tin” xuất hiện. Khi bắt đầu sử dụng viêm ruột Sẽ không có hại gì nếu thiết lập ngay một vị trí như vậy (tất cả các tệp chúng tôi cần sẽ được lưu trữ ở đó) và bật tính năng tự động lưu:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Nếu không có tính năng tự động lưu, khi sử dụng lệnh phụ "gán", cờ --save sẽ được yêu cầu nếu bạn muốn lưu tệp đã thêm vào không gian tệp.

Hơn nữa, bạn có thể thêm một số không gian tệp và thay đổi mức độ ưu tiên của chúng; điều này có thể hữu ích khi có nhiều tệp và chúng được lưu trữ trên các phương tiện khác nhau. Tôi sẽ không xem xét khả năng này ở đây; thông tin chi tiết có thể được tìm thấy trong phần trợ giúp của chương trình.

Di chuyển hệ thống tệp ngữ nghĩa

Dù sao đi nữa, về mặt lý thuyết, thư mục và không gian tệp Vitis đôi khi có thể di chuyển từ nơi này sang nơi khác. Để nó hoạt động, tôi đã tạo một tiện ích riêng biên tập liên kết, có thể chỉnh sửa hàng loạt liên kết, thay thế các phần của đường dẫn bằng các phần khác:

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

Trong trường hợp đầu tiên, sau khi chúng tôi chuyển từ /mnt/MyFavoriteDisk/Vitis/ sang thư mục chính, các liên kết tượng trưng liên quan đến bí danh sẽ được chỉnh sửa. Trong trường hợp thứ hai, sau khi thay đổi vị trí của không gian tệp, tất cả các liên kết trong Vitis sẽ được thay đổi thành liên kết mới theo yêu cầu thay thế một phần đường dẫn của chúng.

Danh mục tự động

Nếu bạn chạy lệnh vitis service get autocategorization, bạn có thể thấy rằng theo mặc định, các danh mục tự động được gán theo định dạng (Format and Type) và đuôi file (Extension).

Điều này rất hữu ích, chẳng hạn như khi bạn cần tìm thứ gì đó trong số các tệp PDF hoặc xem những gì bạn đã lưu trữ từ EPUB và FB2, bạn chỉ cần chạy yêu cầu

vitis show Format/MOBI u: Format/FB2

Tình cờ là các công cụ GNU/Linux tiêu chuẩn như tệp hoặc mimetype không phù hợp với tôi một cách chính xác vì chúng không phải lúc nào cũng xác định chính xác định dạng; tôi phải tự triển khai dựa trên chữ ký và phần mở rộng của tệp. Nhìn chung, chủ đề xác định định dạng file là một chủ đề thú vị để nghiên cứu và xứng đáng có một bài viết riêng. Hiện tại, tôi có thể nói rằng có lẽ tôi chưa cung cấp sự công nhận thực sự cho tất cả các định dạng trên thế giới, nhưng nhìn chung nó đã hoạt động tốt. Đúng, EPUB hiện xác định định dạng là ZIP (nói chung, điều này là hợp lý, nhưng trên thực tế, đây không được coi là hành vi bình thường). Hiện tại, hãy coi tính năng này là thử nghiệm và báo cáo mọi lỗi. Trong những tình huống lạ, bạn luôn có thể sử dụng các danh mục phần mở rộng tệp, ví dụ: Tiện ích mở rộng/epub.

Nếu bật danh mục tự động theo định dạng thì các danh mục tự động nhóm một số định dạng theo loại cũng được bật: “Lưu trữ”, “Hình ảnh”, “Video”, “Âm thanh” và “Tài liệu”. Tên được bản địa hóa cũng sẽ được đặt cho các danh mục con này.

Những gì không được nói

viêm ruột Nó hóa ra là một công cụ rất đa dạng và rất khó để bao quát mọi thứ cùng một lúc. Hãy để tôi đề cập ngắn gọn những gì bạn có thể làm:

  • các danh mục có thể bị xóa và xóa khỏi tập tin;
  • kết quả của các truy vấn biểu thức có thể được sao chép vào thư mục đã chỉ định;
  • các tập tin có thể được chạy dưới dạng chương trình;
  • Lệnh show có nhiều tùy chọn, ví dụ: sắp xếp theo tên/ngày sửa đổi hoặc quyền truy cập/kích thước/phần mở rộng, hiển thị thuộc tính tệp và đường dẫn đến bản gốc, cho phép hiển thị các tệp ẩn, v.v.;
  • Khi lưu liên kết đến các nguồn Internet, bạn cũng có thể lưu các bản sao cục bộ của trang HTML.

Chi tiết đầy đủ có thể được tìm thấy trong phần trợ giúp người dùng.

Triển vọng

Những người hoài nghi thường nói rằng “không ai sẽ tự mình đặt những thẻ này”. Sử dụng ví dụ của riêng mình, tôi có thể chứng minh điều ngược lại: Tôi đã phân loại hơn sáu nghìn tệp, tạo hơn một nghìn danh mục và bí danh, và điều đó thật đáng giá. Khi một đội vitis open План mở danh sách việc cần làm của bạn hoặc khi có một lệnh vitis open LaTeX Khi bạn mở cuốn sách của Stolyarov về hệ thống bố cục LaTeX, về mặt đạo đức, việc sử dụng hệ thống tệp “theo cách cũ” đã là điều khó khăn về mặt đạo đức.

Trên cơ sở này, một số ý tưởng nảy sinh. Ví dụ: bạn có thể tạo một đài tự động bật nhạc theo chủ đề theo thời tiết hiện tại, ngày lễ, ngày trong tuần, thời gian trong ngày hoặc năm. Gần hơn với chủ đề này là một trình phát nhạc biết về các danh mục và có thể phát nhạc theo biểu thức bằng các thao tác trên các danh mục như trên bộ. Sẽ rất hữu ích khi tạo một daemon sẽ giám sát thư mục "Tải xuống" và đề xuất phân loại các tệp mới. Và tất nhiên, chúng ta nên tạo một trình quản lý tệp ngữ nghĩa bằng đồ họa thông thường. Đã có lúc tôi thậm chí còn tạo ra một dịch vụ web cho doanh nghiệp để sử dụng chung các tệp, nhưng nó không phải là ưu tiên hàng đầu và trở nên không còn phù hợp, mặc dù nó đạt được hiệu suất cao. (Do những thay đổi lớn trong viêm ruột, nó không còn sử dụng được nữa.)

đây là một bản demo nhỏ

Danh mục thay vì thư mục hoặc hệ thống tệp ngữ nghĩa cho Linux

Kết luận

Viêm không phải là nỗ lực đầu tiên nhằm thay đổi hoàn toàn phong cách làm việc với dữ liệu, nhưng tôi cho rằng điều quan trọng là phải triển khai các ý tưởng của mình và công khai việc triển khai theo giấy phép GNU GPL. Để thuận tiện, một gói gỡ lỗi đã được tạo cho x86-64; gói này sẽ hoạt động trên tất cả các bản phân phối Debian hiện đại. Có một số khó khăn nhỏ trên ARM (trong khi tất cả các chương trình khác liên quan đến viêm ruột, hoạt động tốt), nhưng trong tương lai một gói hoạt động sẽ được biên dịch cho nền tảng này (armhf). Hiện tại tôi đã ngừng tạo các gói RPM do sự cố trên Fedora 30 và khó khăn trong việc phổ biến trên nhiều bản phân phối RPM, nhưng các gói sau này vẫn sẽ được tạo cho ít nhất một vài trong số đó. Trong khi đó bạn có thể sử dụng make && make install hoặc checkinstall.

Cảm ơn tất cả các bạn đã quan tâm! Tôi hy vọng bài viết này và dự án này có thể hữu ích.

Liên kết đến kho dự án

Nguồn: www.habr.com

Thêm một lời nhận xét