Процесс начальной загрузки ПК является довольно сложным делом.
Во-первых, BIOS проходит несколько уровней самопроверок, чтобы удостовериться, что его базовое оборудование и память в рабочем состоянии, и дает пользователю шанс получить доступ к его экрану установки (и возможно другие опции, такие как последовательность начальной загрузки, но они не стандартизированы.
Во-вторых, это проверяет свою настроенную последовательность начальной загрузки на первое устройство, чтобы попытаться загрузиться от. Это может быть жестким диском, загрузочным диском USB, сетевым интерфейсом, CD/DVD-приводом, и так далее. Если этому не удается загрузиться от первой опции в списке, это пробует второе, и затем третье.
В случае дисковода это ищет информацию в первых 512 байтах диска - так называемый "загрузочный сектор", который содержит информацию как, туда, где искать загрузчик, который устраивается на работу оттуда.
В случае unix/linux загрузчик имеет задание загрузки ядра (и дополнительно начальный электронный диск), и сообщение его, где искать его корневую файловую систему прежде отступающий и позволяющий ядру сделать его вещь.
Ядро затем проходит свои самопроверки и диагностику, в то время как оно регистрирует любые аппаратные средства, что оно имеет драйверы для, затем пытается смонтировать указанную корневую файловую систему и выполниться /sbin/init
Init затем проверяет свою конфигурацию, программы запуска запусков, настраивает сети и сервисы, порождает TTYs и в основном получает готовую к употреблению систему.
Даже это - высоко упрощенное описание процесса; я рекомендую сделать некоторое рытье через Google для большего количества всестороннего исследования процесса начальной загрузки ПК.
Люди не слишком осторожно используют файловую систему . В ваших примерах я бы сказал, что /
, / 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/
Inode номер 2 традиционно является "корневым" inode всего на диске файловая система (это другое словоупотребление). /
, / boot
и / home
имеют номер inode 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/
Inode номер 3670039 - это тот самый индекс, который был выделен в файловой системе на диске, смонтированной (на моем компьютере) в / home
.
Вы также можете найти файловые системы, вызвав команду mount
. В ней перечислены все подключенные файловые системы и места, где они смонтированы.
На риске сильно упрощает,
Так как меня попросили бис,
Если вы хотите, чтобы код, см. Первую половину этого ответа на
Как определить, принадлежит ли файловая система Linux к запущенной системе -
Часть, которая проверяет проверку проверки root_dir
.
Это просто делает то, что сказал Брюс; проверка того, что это каталог
и проверить, является ли его номер INODE 1 или 2.
Сначала исправьте свое предположение о файловой системе и каталоге. Файловая система содержит один или несколько каталогов. Используя ваши примеры, /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
Хотя принятие каталогов однозначно, когда речь идет о файловых системах, файловая система может означать разные вещи в зависимости от того, о чем вы говорите.
В ваших примерах все перечисленные пути являются каталогами, но только некоторые из них также являются точками монтирования файловых систем.
Вы можете использовать команду 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)
В моем понимании файловая система в смысле UNIX - это способ реализации дерева каталогов (структура каталогов), или, точнее, способ реализации API файловой системы UNIX. Корень файловая система поддерживается одной конкретной реализацией, и всякий раз, когда вы входите в каталог точки монтирования, вы вводите поддерево, поддерживаемое чем-то другим.
Интерфейс всегда один и тот же, но в одном случае у вас есть определенный раздел диска на внутренней стороне, в другом случае будет программа, которая даже не записывает на устройство хранения. Файловая система proc
будет поддерживаться программным обеспечением, которое раскрывает внутреннее устройство ядра; tmpfs
будет скопирован программным обеспечением, которое записывает в RAM, а другие файловые системы могут записывать в сеть или где-то еще.
В смысле слова, отличном от UNIXy, файловая система - это способ организации хранения данных. ext4
, btrfs
, fat
и ntfs
являются файловыми системами в этом смысле, но также и в смысле UNIXy - они реализуют файловую систему API. proc
не будет классифицироваться как файловая система в рамках этой, более ограниченной парадигмы, поскольку она не организует хранение данных.
TL; DR:
Файловая система - это методология логической организации и хранения больших объемов данных, упрощающая управление системой. файловая система состоит из файлов, связей с другими файлами, а также атрибутов (тип файла, имя файла, размер файла, владелец файла, временная метка файла) каждого файла.
Каталоги : например, файловая система Unix по существу состоит из файлов и каталогов. Каталоги - это специальные файлы, которые могут содержать другие файлы. самый верхний каталог - /
(косая черта), а каталоги, расположенные непосредственно под ним, являются системными каталогами.
/
Корень файловой системы Linux
/ bin
Здесь хранятся двоичные исполняемые файлы
/ boot
Файлы, связанные с загрузкой, хранятся здесь
/ dev
Здесь хранятся файлы устройств
/ etc
Здесь хранятся общесистемные файлы конфигурации
/ home
Расположение домашних каталогов обычных пользователей
/ lib64
Библиотеки для двоичных файлов исполняемые файлы хранятся здесь
/ mnt
Временная точка монтирования для DVD-Rom, USB-накопителя.
/ opt
Дополнительные программы устанавливаются здесь как Program Files в windows
/ proc
Псевдофайловая система ядра
/ root
Домашний каталог суперпользователя root
/ sbin
Здесь хранятся системные двоичные исполняемые файлы
/ tmp
Здесь хранятся временные файлы
/ usr
Пользовательская файловая система
/ var
Здесь хранятся файлы переменных
/ srv
- это служебная папка, содержащая специфичные для сайта данные, которые обслуживаются этой системой.
Следующие два каталога являются каталогами, определяемыми пользователем:
/home/abc/xyzdir1 --is a directory
/home/abc/xyzdir2 -- is a directory
Если вам просто нужна команда, которая говорит вам, является ли путь каталогом или нет, используйте точку монтирования (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