UNIX: различия между версиями

Содержимое удалено Содержимое добавлено
м дескриптор -> индексный дескриптор
Строка 38:
Кроме того, каждый каталог содержит ссылку на себя (обозначается точкой (.)) и ссылку на тот каталог, в котором он находится (обозначается двумя точками (..))
 
Наконец, <u>совсем строго говоря</u>, каталог содержит ссылки не на файлы, а на ''индексные дескрипторы'' файлов. ДескрипторИндексный дескриптор, он же '''inode''' (произносится ай-н`од), содержит всю известную системе информацию о файлах, в частности время создания, время последнего изменения, длину, ссылку на сам файл, кто владеет этим файлам, права доступа (см. ниже), что это за файл (обычный файл, каталог и т.д.), а также - и это необходимо - количество ссылок на этот индексный дескриптор. При создании новой ссылки командой '''ln''', количество ссылок увеличивается на 1, при стирании - уменьшается на 1. Если количество ссылок становится равно 0, файл стирается "на самом деле": всё место на диске, которое занимает файл и индексный дескриптор, освобождается - то есть объявляется свободным.
 
Важно понимать, что ''индексный дескриптор не знает, откуда на него ссылаются''. Поэтому в UNIX, имея файл, невозможно определить, в каких ещё каталогах есть ссылки на него. (То есть можно, но лишь просмотрев все файлы, которые есть на диске.)
 
В системе Unix, как правило, нет мусорного ящика. Если файл удалён, его уже не восстановишь.
Строка 56:
* '''/home''' - каталог, содержащий пользовательские каталоги. У каждого пользователя есть свой личный каталог. Каталог пользователя vasya обычно называется '''/home/vasya'''. Иногда этот каталог называется не '''/home''', а '''/u''', а в старых версиях UNIX - '''/usr'''. В своём личном каталоге многие пользователи создают свои каталоги и деревья каталогов.
* '''/lib''' - библиотечные файлы
* '''/lost+found''' - файлы, которые из-за сбоя файловой системы стали «сиротами»: индексный дескриптор цел, но файла нет ни в одном каталоге. Получается, что система не знает имени файла и где он находился. Программы починки файловой системы помещает эти файлы сюда.
* '''/mnt''' - каталог для привязывания физических файловых систем к корневой, о чём подробнее ниже. Если в компьютере больше одного диска, все диски, кроме главного, являются подкаталогами в этом каталоге.
* '''/sbin''' - исполняемые системные файлы (System V). В других UNIX эти файлы находятся в '''/etc'''. В некоторых версиях System V они находятся не только в '''/sbin''', но и в '''/usr/sbin'''.
Строка 96:
=== Символические ссылки ===
 
Существует специальный тип файлов, называемый символическими ссылками. Обращение к символической ссылке обратится к файлу, но символические ссылки неравноправны с обычными. ДескрипторИндексный дескриптор не считает символические ссылки (и ничего о них не знает), поэтому можно стереть файл, на который есть символические ссылки. При этом останутся символические ссылки в никуда. То же самое произойдёт, если этот файл переименовать или переместить в другой каталог: символическая ссылка знает имя файла - и всё. Можно создавать и другие бессмысленные конструкции, например две символические ссылки, ссылающиеся друг на друга.
 
Длина символической ссылки равна длине имени файла. Команда ls в длинном формате пишет имя, на которое символическая ссылка ссылается.
Строка 148:
Права доступа к каталогам имеют нетривиальный смысл:
* право на чтение ('''r''') - право получить имена, и только имена, файлов.
* право на исполнение ('''x''') - право доступа к индексным дескрипторам, а также право делать каталог текущим (команда '''cd'''). Следовательно,
** для выдачи всей информации о файле в текущем каталоге (команда '''ls -l''', например) это право необходимо и достаточно
** для любых действий с файлом (чтение, запись, удаление, запуск, получение информации), это право необходимо. Если каталог закрыт для исполнения, его файлы недоступны никак. Можно получить их имена, и всё.
** для любых операций с файлами не в текущем каталоге нужно право на исполнение во всех промежуточных каталогах на пути к этому файлу, поскольку для того, чтобы идти по пути, нужно обращаться к индексным дескрипторам промежуточных каталогов. То есть, чтобы выполнить ls Foo/Bar/Baz, нужны права на исполнение для каталогов Foo и Foo/Bar и на чтение для каталога Baz.
* право на запись('''w''') - право создавать и стирать файлы в каталоге. Права доступа к файлу для его стирания не нужны! Таким образом, право на запись в каталог - очень серьёзное право.