Однородность файлов Linux

Как это происходит, если вы находитесь в папке с различными файлами — изображениями, бинарными исполняемыми файлами, скриптами, даже каталогами, zip-файлами, почти обо всем – как это происходит, когда вы нажимаете ls -l , вы получаете результат что похоже (для формы) для всех файлов?

Это похоже на то, что файлы сами по себе помещаются в суперфайлы, которые являются однородными и содержат метаданные, вроде структуры блока управления процессами.

И как получится, что файлы, которые вы ожидаете, не будут иметь никакого отношения к Unix или Linux, не представляют проблемы? Есть ли как препроцессор файловой системы для работы с файлами из мира Windows? Или файлы, которые кросс-платформенные, что это не нужно? (Это было бы что-то!)

Есть ли способ увидеть этот скрытый (?) Слой? (Даже HTML (не говоря уже о Lisp и т. Д.) Трудно понять, просто прочитав об этом, но когда вы это видите, вы сразу поймете.)

2 Solutions collect form web for “Однородность файлов Linux”

Вы получили почти точно правильные ответы. Вам просто нужны детали.

По большей части (исключение специальных файлов) каждый файл обрабатывается точно так же, и каталоги (например, «папки») могут быть фактически реализованы в виде файлов. Файлы на самом деле всего лишь серия блоков диска. «Метаданные», которые вы пишете, называются «inodes» (см. Раздел « Что такое Superblock, Inode, Dentry, File и What is inode на этом сайте»). Каталоги (или «папки») – это просто способ сопоставления имени файла с inode. Метаданные, кроме имени (тип файла, разрешения, владельцы и т. Д.), Живут в inode. Эти метаданные находятся в двоичной форме, в основном для компактности и скорости доступа: синтаксический анализ XML или даже любого другого текстового формата займет слишком много времени.

Вы можете увидеть текстовое представление метаданных файла с помощью команды stat /bin/cat : stat /bin/cat вас заинтересовать. stat – это команда GNU, поэтому она не будет общедоступной, но большинство дистрибутивов Linux должны иметь ее.

Что касается «чужих» файлов, то концепция файла / inode / directory происходит от времени, когда изменчивость операционных систм была намного больше, чем сегодня. Разработчики Unix и его исходной файловой системы имели большой опыт работы с тем, что сегодня будет считаться очень странными операционными системами и файловыми системами. Концепция file / inode / directory почти наверняка воплощает в себе все их переживания, и поэтому мягкие вариации в «том, что является файлом», который обеспечивают сегодня более однородные ОС, на самом деле не проблема. Для получения этого от 20 лет назад см. «Файловая система» принадлежит в ядре . Немного более свежий пример см. В разделе Hideoous Name . Это сообщение в блоге Russ Cox, также прочитайте статью Роб Пайка в блогах, а также. Вы получите от него просветление.

Все файлы представляют собой последовательность байтов под капотом. Неважно, что в них. Системе нужно только знать, сколько байтов есть в файле, и организовать место для хранения этих байтов. Независимо от содержимого файла, это куча байтов.

Для каждого файла система также хранит некоторые метаданные . Метаданные не зависят от содержимого файла; на самом деле вы можете сказать, что контент является одним из этих элементов метаданных (но его обычно рассматривают отдельно, потому что контент имеет переменный размер и потенциально может быть очень большим). Какие метаданные хранятся, зависит от типа файловой системы . Файловые системы Unix обычно предоставляют то, что вы видите в ls : разрешениях, времени модификации и т. Д. Имя файла также является частью метаданных со слегка особым статусом: оно уникально, т. Е. Не может быть двух файлов с одинаковым именем (в том же каталоге).

Файлы организованы в каталогах . Каталог может содержать обычные файлы, подкаталоги и некоторые специальные типы файлов, такие как символические ссылки . Существует каталог, называемый корневым каталогом, который все каталоги являются подкаталогами n раз удалены.

Путь к файлу указывает, как найти его, начиная с корневого каталога. Каждому каталогу, который нужно пройти, задается поочередно, переходя от корня вниз, с косой чертой / символами после каждого имени каталога. Например, /usr/bin/env означает запуск в корневом каталоге / , перейдите в поддиректорию usr , перейдите в подкаталог bin и найдите элемент env в этом подкаталоге.

Когда вы указываете содержимое каталога, ядро (включая драйверы файловой системы) выполняет задание чтения байтов, представляющих каталог на диске, и преобразует их в список имен файлов, метаданных и содержимого. Программа ls вызывает функцию opendir для открытия каталога, а затем делает повторные вызовы readdir для чтения каждой записи в каталоге по очереди, то есть для получения списка имен файлов в этом каталоге (включая подкаталоги и другие специальные файлы). В ls -l программе ls требуется больше информации о файле, чем просто имя, поэтому он также вызывает stat для извлечения метаданных каждого файла.

Некоторые операционные системы позволяют просматривать представление на диске на диске с любой программой просмотра текста, такой как cat . Однако Linux не позволяет вам. Вы можете использовать программу debugfs для изучения файловой системы (используйте ее только в режиме только для чтения!).

  • Что-то вроде VMware «Changed Block Tracking» (CBT) в Linux
  • Замените корень во время выполнения
  • Как получить новые форматы файловой системы для использования в mkfs?
  • Мониторинг, когда чтение / запись по метаданным или mmaped-файлы попадают на диск
  • Почему fstrim, похоже, не обрезает блоки данных на btrfs (+ ecrypts)?
  • FUSE Наложение файловой системы на «слишком длинные имена файлов»
  • Какой раздел монтируется там где?
  • Как Unix «fsck» отличается от Windows «chkdsk»?
  • Удалить родительскую папку, сохраняющую все содержимое
  • Безопасно ли монтировать такую ​​же файловую систему ext4 в разных точках подключения?
  • Почему в специальных файлах устройств есть inodes?
  • Не удалось удалить каталог
  • Linux и Unix - лучшая ОС в мире.