Является ли косая черта (/) частью имени корневого каталога Linux?

Работало у меня на CentOS 6. X

sudo rpm -e epel-release-7-5.noarch

wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

sudo rpm -ivh epel-release-6-8.noarch.rpm

sudo yum clean all

sudo rpmdb -v --rebuilddb

sudo yum -y install libselinux-python
46
28.08.2018, 19:40
4 ответа

Использование слова «имя» немного гибко; оно может относиться к «полностью определенному имени пути»; оно может относиться к «записи каталога»; оно может относиться к «имени файла», переданному различным функции или подпрограммы.

Так, например, / etc / foo и / var / tmp /../../ etc / foo и / tmp / ../../../../../ ../ foo - все способы обращения к одному и тому же файлу; все они действительны имен , как и foo в каталоге / etc .

Итак, вернемся к основам.

Имя файла в unix состоит из компонентов , разделенных разделителем каталогов / .Практически единственным ограничением для компонентов является то, что они не могут содержать символы / или NUL; все остальное разрешено.

Таким образом, «полное имя пути» / etc - это полная строка: / etc . Это означает, что в корневом каталоге есть компонент и т. Д. .

Аналогично / x / y / z / foo будет иметь компонент foo в каталоге / x / y / z .

Теперь корневой каталог уникален тем, что не имеет компонентов в родительском каталоге; он только имеет полный путь в качестве имени: / .

7
27.01.2020, 19:34

косая черта - это разделитель ; имена каталогов не включают разделители, но полные имена путей включают разделители.

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

Номенклатура может отличаться. POSIX.1-2017, например, перечислены некоторые часто используемые определения :

  • 3.2 Абсолютное имя пути

    Имя пути, начинающееся с одного или более двух <косая черта> символов; см. также Путь .

  • 3.271 Путь

    Строка, которая используется для идентификации файла. В контексте POSIX.1-2008 имя пути может быть ограничено байтами {PATH_MAX}, включая завершающий нулевой байт. Он имеет необязательное начало <косая черта> символов, за которым следует ноль или более имен файлов, разделенных символами <косая черта> . Имя пути может дополнительно содержать один или несколько завершающих символов <косая черта> . Несколько следующих друг за другом символов <косая черта> считаются такими же, как один <косая черта> , за исключением случая с двумя ведущими символами <косая черта> .

    Примечание: Если путь состоит только из байтов, соответствующих символам из переносимого набора символов имени файла (см. Переносимый набор символов имени файла ), <косая черта> символов и одного завершающего символ, имя пути будет использоваться как строка символов во всех поддерживаемых регионах; в противном случае имя пути может быть только строкой (а не строкой символов). Кроме того, поскольку однобайтовая кодировка символа <косая черта> должна быть одинаковой для всех языков и не встречаться в многобайтовом символе, ссылки на <косая черта> в имени пути четко определены, даже если имя пути не является строкой символов.Однако это свойство не обязательно сохраняется для остальных символов в переносимом наборе символов имени файла.

  • 3.272 Компонент имени пути

    См. Имя файла в Имя файла .

  • 3.170 Имя файла

    Последовательность байтов, состоящая от 1 до {NAME_MAX} байтов, используемая для имени файла. Байты, составляющие имя, не должны содержать символов или . В контексте имени пути каждое имя файла должно сопровождаться символом <косая черта> или ; в другом месте имя файла, за которым следует символ , образует строку (но не обязательно строку символов). Имена файлов точка и точка-точка имеют особое значение. Имя файла иногда называют «компонентом имени пути». См. Также Путь .

Итак ... если вы ищете разъяснений , возможно, это не ваша первая остановка. Учебники, такие как эта страница UNIX Concepts , полезны, например, указывая, что «полный путь» является синонимом «абсолютного» пути ».

37
27.01.2020, 19:34

Стандарт POSIX.1-2008 гласит:

Путь, состоящий из одного / , должен разрешаться в корневой каталог процесс. Нулевое имя пути не может быть успешно разрешено .

Стандарт также проводит различие между именами файлов и именами путей . / - это путь к корневому каталогу. Имя каталога - «корневой каталог», но в файловой системе он безымянный, у него нет имени файла. Если бы у него было имя файла, это имя было бы записью каталога в каталоге над корневым каталогом, а такого каталога нет.

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

Для ясности: / - это не имя корневого каталога, а путь к нему, его путь .

/ etc - это еще один путь. Это имя абсолютного пути к каталогу и т.д. . Имя каталога по этому пути - и т. Д. (его имя файла - и т. Д. ).

/ usr / local / bin / curl - это путь к исполняемому файлу curl , точно так же, как / etc - это путь к и т. Д. каталог.

66
27.01.2020, 19:34

В Unix у файлов (а каталоги - это просто файлы) нет "имен". Ссылки имеют имена, ссылки - это записи в каталоге, которые сопоставляют имена с файлами.

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

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

Итак, по существу, корневой каталог не имеет имени, потому что над ним нет каталога, в котором мы могли бы записать имя.

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

19
27.01.2020, 19:34

Теги

Похожие вопросы