Является ли slash ( /
) частью имени корневого каталога Linux? Или это просто символ?
Как насчет /etc
и так далее?
Обновить
Предположим, /dev/sda2
это блочное устройство корневого каталога Linux.
$ sudo debugfs / dev / sda2 debugfs 1.44.1 (24 марта 2018 года) debugfs: pwd [pwd] INODE: 2 PATH: / [root] INODE: 2 PATH: / debugfs: stat / Индекс: 2 Тип: каталог Режим: 0755 Флаги: 0x80000 Поколение: 0 Версия: 0x00000000: 00000077 Пользователь: 0 Группа: 0 Проект: 0 Размер: 4096 ACL файла: 0 Ссылки: 25 Количество блоков: 8 Фрагмент: Адрес: 0 Номер: 0 Размер: 0 ctime: 0x5b13c9f1: 3f017990 - вс 3 июня 15:28:57 2018 atime: 0x5b13ca0f: 3b3ee380 - вс 3 июня 15:29:27 2018 mtime: 0x5b13c9f1: 3f017990 - вс 3 июня 15:28:57 2018 crtime: 0x5aad1843: 00000000 - сб 17 марта 16:59:39 2018 Размер дополнительных полей индекса: 32 экстентов: (0): 9249
Таким образом, там есть каталог, индекс № 2, но у него нет имени.
linux
filesystems
filenames
fhs
mlibre
источник
источник
debugfs
результаты. Не могли бы вы уточнить, как это меняет вопрос?Ответы:
Стандарт POSIX.1-2008 говорит
Стандарт далее проводит различие между именами файлов и путями .
/
путь к корневому каталогу Имя каталога - «корневой каталог», но в файловой системе оно безымянно, у него нет имени файла. Если бы у него было имя файла, это имя было бы записью в каталоге над корневым каталогом, и такого каталога нет.Символ
/
никогда не может быть частью имени файла, поскольку он является разделителем пути.Для ясности:
/
это не имя корневого каталога, а путь к нему, его путь ./etc
это другое имя пути. Это имя абсолютного пути кetc
каталогу. Имя каталога по этому путиetc
(его имя файлаetc
)./usr/local/bin/curl
это путь кcurl
исполняемому файлу так же,/etc
как путь кetc
каталогу.источник
/..
указывает на/
и/
имеет запись в каталоге для себя - это старый добрый/.
; все эти 3 вещи указывают на один и тот же индекс - 2./
это определяется с точки зрения корневого каталога для каждого процесса, но я не знал, что inode inchroot
не обязательно 2. Очень интересный факт. Это также поднимает вопрос о том, что является/
каталогом для привилегированных процессов ядра. Означает ли это, что только процессы пользовательского пространства связаны/
с ними?косая черта - это разделитель ; имена каталогов не включают разделители, но полные пути включают разделители.
Таким образом, «корневой уровень»
/
не имеет названия . В большинстве Unix-подобных систем это рассматривается как особый случай, подобный.
и..
(хотя, конечно, нет разницы между ними на корневом уровне).Номенклатура может отличаться. POSIX.1-2017, например, перечисляет некоторые часто используемые определения :
3.2 Абсолютный путь
3.271 Путь
3.272 Компонент Pathname
3.170 Имя файла
Так что ... если вы ищете разъяснений , это может быть не вашей первой остановкой. Учебники, такие как эта страница UNIX Concepts , полезны, например, указывают, что «полный путь» является синонимом «абсолютного» пути ».
источник
/
не является допустимым именем файла или компонентом пути, и это не строка, содержащая такие компоненты, но это все же полностью допустимое имя пути для одного определенного каталога. Который должен существовать, хотя та часть, которая требует этого, не упоминает своего «имени». Почему-то я нахожу это немного забавным...
на/
связь/
.В Unix файлы (а каталоги - это просто файлы) не имеют «имен». Ссылки имеют имена, ссылки - это записи в каталоге, которые сопоставляют имена с файлами.
Вы можете сказать, что ссылки дают имена файлам, но обратите внимание: это означает, что файл может иметь более одного имени, поскольку он может иметь более одной ссылки.
Поскольку корневой каталог, в общем, является корневым каталогом, не существует каталога «более высокого уровня», внутри которого может быть ссылка на него, поэтому с ним не может быть связано имя. Теоретически было бы возможно добавить ссылку на корневой каталог в какой-то другой каталог, но большинство Unices запрещают добавлять ссылки на существующие каталоги, потому что это может привести к циклам в иерархии файловой системы (которая на самом деле является ориентированным графом) и обнаружению циклов в графике это дорого, но не обнаружение их может привести к бесконечной рекурсии при попытке разрешения имен в ядре.
Итак, в основном, корневой каталог не имеет имени, потому что над ним нет каталога, в котором мы могли бы записать имя.
Как указывалось в других ответах, мы должны различать имя и путь (имя). К корневому каталогу можно обращаться по пути (имени)
/
.источник
Использование слова «имя» немного гибко; он может ссылаться на «полное имя пути»; это может относиться к «записи каталога»; это может относиться к «имени файла», передаваемому различным функциям или подпрограммам.
Так, к примеру,
/etc/foo
и/var/tmp/../../etc/foo
и/tmp/../../../../../../foo
являются всеми путями со ссылкой на тот же файл; все они действительные имена , какfoo
в/etc
каталоге.Итак, давайте вернемся к основам.
Имя файла в unix состоит из компонентов, разделенных разделителем каталогов
/
. Практически единственным ограничением для компонентов является то, что они не могут содержать/
символы или NUL; все остальное разрешено.Таким образом, «полное имя путь»
/etc
является полной строкой:/etc
. Это означает, что он имеетetc
компонент в корневом каталоге.Точно так же
/x/y/z/foo
будет иметьfoo
компонент в/x/y/z
каталоге.Теперь корневой каталог уникален тем, что у него нет компонента в родительском каталоге; он только имеет полный путь к файлу в качестве его имени:
/
.источник