структура каталогов и файловая система

10

В чем разница между структурой каталогов и файловой системой ?
Unix / Linux каталоги и файловая система выглядит следующим образом :

Следующие два каталога, очевидно, мы знаем каталоги.

  /home/abc/xyzdir1 --is a directory
  /home/abc/xyzdir2 -- is a directory

следующие три примера говорят о файловой системе.

/proc -- is a file system
/ -- is a file system
/bin -- is a file system

Как я могу определить, какая файловая система и каталог из приведенных выше фрагментов кода?

Premraj
источник
Файловая система содержит один или несколько каталогов. Каждый каталог является частью файловой системы (в том числе /proc, /и /binиз ваших примеров), поэтому я не понимаю, как вы хотите определить «разницу».
Ройма
@roaima, пожалуйста, найдите фрагмент кода для образца
Premraj
Ваш вопрос все еще неоднозначен. /proc, /И /binкаталоги. Они не "файловые системы". Возможно, вы хотите сказать, что хотите определить, какие каталоги также являются точкой монтирования (корнем) их файловой системы?
Ройма

Ответы:

8

Люди не используют файловую систему слишком осторожно. В своих примерах я хотел бы сказать , что /, /binи /procфайловые системы , так как весь раздел (как /dev/sdb1) монтируется на этих каталогах. Моя система Arch Linux не имеет /binфайловой системы, поэтому этот пример не идеален, но ...

% ls -lid /proc /home /boot /
2 drwxr-xr-x  17 root root 4096 Feb 24 12:12 //
2 drwxr-xr-x   4 root root 4096 May 16 14:29 /boot/
2 drwxr-xr-x   5 root root 4096 Mar 14 18:11 /home/
1 dr-xr-xr-x 116 root root    0 May 16 17:18 /proc/

Инод номер 2 традиционно является корневым инодом всей файловой системы на диске (что является другим использованием этой фразы). /, /bootИ /homeвсе они имеют инф.узлов номер 2, в то время /proc, которое представлено исключительно ядром и не имеет присутствия на диске, имеет индексный дескриптор 1. Эти номера индексных дескрипторов показывает , что в целом, на диске файловой системы или виртуальной файловой системы монтируется под этим именем.

Предложение « /home/abc/xyzdir1является каталогом» в основном означает, что ни одна файловая система на диске не смонтирована с этим именем. Если вы выполните ту же ls -lidкоманду в каталоге, вы получите что-то вроде этого:

 % ls -lid /home/bediger/src
3670039 drwxr-xr-x 29 bediger bediger 4096 May 17 19:57 /home/bediger/src/

Номер инода 3670039 - это то, из чего был выделен инод в файловой системе на диске, смонтированной (на моей машине) в /home.

Вы также можете найти файловые системы, вызвав mountкоманду. В нем перечислены все смонтированные файловые системы и где они смонтированы.

Брюс Эдигер
источник
Номер «магического инода» относится к серии файловых систем ext2. Это не относится к большинству (всем?) Другим, таким как xfs или btrfs.
psusi
Я бы сказал , что /, /binи /procфайловые системы , так как весь раздел ... установлен на этих каталогах. Это не так /proc, как следует из ответа позже.
Макс Нанаси
1
@MaxNanasy - учитывая, что обычно используются два значения «файловой системы» (1. Имена и расположение каталогов в древовидной структуре, и 2. Формат на диске и расположение файловых и каталожных структурированных данных, а также код для поддержки и использования), довольно сложно придумать термин, который понятен, не определен круговым способом и технически корректен. Я решил пойти с понятным и использовал «раздел» вместо других терминов. Я предлагаю вам предложить термин (ы), которые являются более правильными, я в растерянности.
Брюс Эдигер
4

На риск чрезвычайно упрощения,

  • Файловая система похожа на двигатель вашего автомобиля и другие внутренние системы,
  • Структура каталогов похожа на карту мест, куда вы едете.

Так как меня попросили на бис,

  • Файловые системы подобны механике (подробности реализации) распределения / распространения аудио / видео сигналов: аналоговое радиовещание, цифровое радиовещание, кабельное телевидение, Интернет, видеокассета, видеодиск и т. Д.
  • Структура каталогов аналогична содержанию телевизионных программ и их категоризации, например, комедии, драмы, новости, документальные фильмы, игровые шоу, спортивные состязания и т. Д.

Если вам нужен код, посмотрите первую половину этого ответа на Как определить, принадлежит ли файловая система Linux к работающей системе - часть, которая проверяет проверку root_dir. Он просто делает то, что сказал Брюс; проверка того, что это каталог, и проверка, является ли его номер индекса 1 или 2.

G-Man говорит: «Восстанови Монику»
источник
1
Хороший ELI5, но не могли бы вы добавить фрагмент кода, отвечающий на вопрос Как определить, какая из них является файловой системой и каталогом?
user1717828
4

На мой взгляд, файловая система, в смысле UNIX, является способом реализации дерева каталогов (структуры каталогов) или, точнее, способом реализации API файловой системы UNIX. Корневая файловая система поддерживается одной конкретной реализацией, и всякий раз, когда вы вводите каталог точки монтирования, вы вводите поддерево, которое поддерживается чем-то другим.

Интерфейс всегда один и тот же, но в одном случае у вас есть определенный раздел диска на заднем конце, в другом случае будет программа, которая даже не записывает данные на устройство хранения. procФайловая система будет поддержана программным обеспечением , который предоставляет Kernel внутренностей; tmpfsбудет подкреплено программным обеспечением , которое пишет в оперативную память, и другие файловых системы могут написать в сеть или в других местах.

В не-UNIXY смысле слова файловая система - это способ организации хранения данных. ext4, btrfs, fatИ ntfsфайловые системы в этом смысле, но и в UNIXy чувственные они реализуют API файловой системы. procне будет классифицироваться как файловая система в рамках этой более ограниченной парадигмы, поскольку она не организует хранение данных.

TL; DR:

  • структура каталогов / дерево = интерфейс
  • файловая система = серверная часть
PSkocik
источник
2

Хотя принятие каталогов однозначно, когда речь идет о файловых системах, файловая система может означать разные вещи в зависимости от того, о чем вы говорите.

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

Вы можете использовать dfкоманду, чтобы узнать, в какой файловой системе находится данный файл или каталог, и mountкоманду в большинстве реализаций Unix и Linux, чтобы выяснить, какие файловые системы присутствуют на вашем компьютере, их тип и точки монтирования. например:

$ df /proc
Filesystem     1K-blocks  Used Available Use% Mounted on
proc                   0     0         0    - /proc
$ mount | grep -w /proc
/proc is a file system of type proc

Заявление /binо файловой системе сомнительно, /binпочти всегда смонтировано /.

$ df -k /bin
Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sda5      206292664 180687360  15103212  93% /
$ mount | grep -w /
/dev/sda5 on / type ext4 (rw,errors=remount-ro)
jlliagre
источник
1

Сначала исправим ваше предположение о файловой системе и каталоге. Файловая система содержит один или несколько каталогов. Используя ваши примеры /proc, /и /binкаталоги. Они не являются «файловыми системами» сами по себе, но они могут быть корнем их соответствующих файловых систем.

Если вы хотите определить, какие каталоги также являются точкой монтирования (корнем) их файловой системы, вы можете использовать что-то вроде этого:

F="$PWD"    # The directory to be tested
if test -d "$F"
then
    echo "$F is a directory"
    test "X$(stat --format '%m' "$F")" = "X$PWD" && echo "$F is a mountpoint"
fi
roaima
источник
1

Файловая система - это методология логической организации и хранения больших объемов данных, так что системой легко управлять. Файловая система состоит из файлов, связей с другими файлами, а также атрибутов (тип файла, имя файла, размер файла, владелец файла, метка времени файла) каждого файла.

Каталоги : например, файловая система Unix в основном состоит из файлов и каталогов. Каталоги - это специальные файлы, которые могут содержать другие файлы. самый верхний каталог /(косая черта), с каталогами непосредственно под системными каталогами. введите описание изображения здесь

/ Корень файловой системы Linux

/bin Двоичные исполняемые файлы хранятся здесь

/boot Загрузка связанных файлов хранится здесь

/dev Файлы устройств хранятся здесь

/etc Общесистемные конфигурационные файлы хранятся здесь

/home Место для домашних каталогов постоянных пользователей

/lib64 Здесь хранятся библиотеки для двоичных исполняемых файлов.

/mnt Временная точка монтирования для DVD-Rom, флешка.

/optДополнительные программы устанавливаются здесь как Program Files в Windows

/proc Псевдофайловая система ядра

/root Домашний каталог суперпользователя root

/sbin Системные двоичные исполняемые файлы хранятся здесь

/tmp Временные файлы хранятся здесь

/usr Пользовательская файловая система

/var Файлы переменных хранятся здесь

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

SRC и больше

Следующие два каталога являются пользовательскими каталогами:

 /home/abc/xyzdir1 --is a directory
 /home/abc/xyzdir2 -- is a directory
Premraj
источник
Эта диаграмма очень устарела. FHS 3.0 был выпущен в июне 2015 года. Следует также отметить, что FHS применяется только к дистрибутивам Linux.
fpmurphy
1

Если вам просто нужна команда, которая говорит вам, является ли путь каталогом или нет, используйте точку монтирования (1) .

Для меня это печатает

$ mountpoint /
/ is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint
$ mountpoint some-file
some-file is not a mountpoint

Хорошо, что статус выхода снова показывает то же самое, поэтому вы можете использовать его в своих скриптах следующим образом:

if mountpoint "$foo" >/dev/null; then
  : do mountpoint stuff
elif [ -d "$foo" ]; then
  : do directory stuff
elif [ -e "$foo" ]; then
  : do file stuff 
else
  echo "$foo does not exist!" >/2
fi
Лукас
источник