Главная страница
Навигация по странице:

  • 1.9 Файл и его имена: ссылки 1.9.1 Жесткие ссылки – утилита ln

  • 1.9.2 Индексные дескрипторы

  • 1.9.3 Символьные ссылки

  • Cимвольная

  • Если выполнить команду cat имя_файла-ссылки , то на экран будет выведено содержимое файла, на который указывает ссылка.

  • 1.10 Удаление файлов и каталогов – утилиты rm и rmdir

  • 1.11 Права доступа в файловой системе 1.11.1 Идентификатор пользователя

  • 1.11.2 Идентификатор группы

  • 1.11.3 Ярлыки объектов файловой системы

  • 1.11.4 Иерархия прав доступа

  • 1.12.1 Использование групп

  • ЛАБОРАТОРНЫЕ РАБОТЫ ОС (Для допуска необходимо сделать 1 или 6 л. Практикум по дисциплине Операционные системы (ОС). Цели лабораторных занятий это формирование у будущих бакалавров направлений подготовки 09. 03. 01


    Скачать 2.71 Mb.
    НазваниеПрактикум по дисциплине Операционные системы (ОС). Цели лабораторных занятий это формирование у будущих бакалавров направлений подготовки 09. 03. 01
    Дата15.10.2022
    Размер2.71 Mb.
    Формат файлаpdf
    Имя файлаЛАБОРАТОРНЫЕ РАБОТЫ ОС (Для допуска необходимо сделать 1 или 6 л.pdf
    ТипПрактикум
    #735270
    страница12 из 21
    1   ...   8   9   10   11   12   13   14   15   ...   21

    одной файловой системы повышается вероятность запутаться в копиях или забыть о некоторых из них. Если задача состоит в том, чтобы обеспечить доступ к одному и тому же файлу из разных точек файловой
    системы, нужно использовать специально предназначенный для этого механизм файловой системы Linux - ссылки.
    1.9 Файл и его имена: ссылки
    1.9.1 Жесткие ссылки – утилита ln
    Каждый файл представляет собой область данных на жестком диске компьютера или на другом носителе информации, которую можно найти
    по имени. В файловой системе Linux содержимое файла связывается с его именем при помощи жестких ссылок. Создание файла с помощью любой программы означает, что будет создана жесткая ссылка - имя файла, и открыта новая область данных на диске. Причем количество ссылок на одну и ту же область данных (файл) не ограничено, то есть у файла может быть несколько имен.
    Пользователь Linux может добавить файлу еще одно имя (создать еще одну жесткую ссылку на файл) при помощи утилиты ln
    (от англ.
    "link" - "соединять, связывать"). Первый параметр - это имя файла, на который нужно создать ссылку, второй - имя новой ссылки. По умолчанию ссылка будет создана в текущем каталоге:
    Пример 2. Создание жестких ссылок
    [student@localhost

    ]$ ln text text-hardlink
    В примере 2 в домашнем каталоге пользователя student создана жесткая ссылка с именем "
    text-hardlink
    " на файл "
    text"
    . Если вывести подробный список файлов текущего каталога и его подкаталогов ("
    ls - lR
    "), то у файлов "
    text
    " и "
    text-hardlink
    " совпадут и размер, и время создания. Теперь "
    text-hardlink
    " и "
    text
    " - это два имени одного и того же файла.
    Доступ к одному и тому же файлу при помощи нескольких имен может понадобиться в следующих случаях:
    Одна и та же программа известна под несколькими именами.
    Доступ пользователей к некоторым каталогам в системе может быть ограничен из соображений безопасности. Однако если все же нужно организовать доступ пользователей к файлу, который находится в таком

    117
    каталоге, можно создать жесткую ссылку на этот файл в другом
    каталоге.
    Современные файловые системы даже на домашних персональных компьютерах могут насчитывать до нескольких десятков тысяч файлов и тысячи каталогов. Обычно у таких файловых систем сложная многоуровневая иерархическая организация - в результате пути ко многим файлам становятся очень длинными. Чтобы организовать более удобный доступ к файлу, который находится очень "глубоко" в иерархии каталогов, также можно использовать жесткую ссылку в более доступном каталоге.
    Полное имя некоторых программ может быть весьма длинным (например, i586-alt-linux-gcc-3.3
    ), к таким программам удобнее обращаться при помощи сокращенного имени (жесткой ссылки) - gcc-3.3
    1.9.2 Индексные дескрипторы
    Поскольку благодаря жестким ссылкам у файла может быть несколько имен, понятно, что вся существенная информация о файле в
    файловой системе привязана не к имени. В файловых системах Linux вся информация, необходимая для работы с файлом, хранится в индексном
    дескрипторе. Для каждого файла существует индексный дескриптор: не только для обычных файлов, но и для каталогов, файлов-дырок и т. д.
    Каждому файлу соответствует один индексный дескриптор.
    Индексный дескриптор - это описание файла, в котором содержится:
     тип файла (обычный файл, каталог, специальный файл и т. д.);
    права доступа к файлу;
     информация о том, кому принадлежит файл;
     отметки о времени создания, модификации, последнего доступа к файлу;
     размер файла;
     указатели на физические блоки на диске, принадлежащие этому файлу - в этих блоках хранится "содержимое" файла.
    Все индексные дескрипторы пронумерованы, поэтому номер
    индексного дескриптора - это уникальный идентификатор файла в
    файловой системе - в отличие от имени файла (жесткой ссылки на него), которых может быть несколько. Узнать номер индексного дескриптора любого файла можно при помощи утилиты ls с ключом
    –i
    Если вывести номера индексных дескрипторов файла "
    text
    " и жесткой
    ссылки на него "
    text-hardlink
    " – можно увидеть, что эти номера совпадают, то есть этим двум именам соответствует один индексный дескриптор, т. е. один и тот же файл.
    Все операции с файловой системой - создание, удаление и перемещение файлов - производятся на самом деле над индексными

    118
    дескрипторами, а имена нужны только для того, чтобы пользователь мог легко ориентироваться в файловой системе. Более того, имя (или имена) файла в его индексном дескрипторе не указаны. В файловой системе
    Ext2 имена файлов хранятся в каталогах: каждый каталог представляет собой список имен файлов и номеров их индексных дескрипторов.
    Жесткую ссылку (имя файла, хранящееся в каталоге) можно представлять как каталожную карточку, на которой указан номер индексного
    дескриптора - идентификатор файла.
    Жесткая ссылка (hard link) - запись вида имя файла+номер
    индексного дескриптора в каталоге. Жесткие ссылки в Linux - основной способ обратиться к файлу по имени.
    1.9.3 Символьные ссылки
    У жестких ссылок есть два существенных ограничения:
    Жесткая ссылка может указывать только на файл, но не на каталог, потому что в противном случае в файловой системе могут возникнуть циклы - бесконечные пути.
    Жесткая ссылка не может указывать на файл в другой файловой
    системе. Например, невозможно создать на жестком диске жесткую
    ссылку на файл, расположенный на дискете. Чтобы избежать этих ограничений, были разработаны символьные ссылки. Cимвольная
    ссылка - это просто файл, в котором содержится имя другого файла.
    Cимвольные ссылки, как и жесткие, предоставляют возможность обращаться к одному и тому же файлу по разным именам. Кроме того, символьные ссылки могут указывать и на каталог, чего не позволяют жесткие ссылки. Символьные ссылки называются так потому, что содержат символы - путь к файлу или каталогу.
    Cимвольная ссылка (symbolic link, файл-ссылка) - это файл особого типа ("
    l
    "), в котором содержится путь к другому файлу. Если на пути к файлу встречается cимвольная ссылка, система выполняет подстановку: исходный путь заменяется тем, что содержится в ссылке.
    Cимвольную ссылку можно создать при помощи команды ln с ключом "
    -s
    "
    (сокращение от "symbolic").
    Если выполнить команду
    cat имя_файла-ссылки
    , то на экран
    будет выведено содержимое файла, на который указывает ссылка.
    Символьная ссылка вполне может содержать имя несуществующего файла. В этом случае ссылка будет существовать, но не будет "работать": например, если попробовать вывести содержимое такой "битой" ссылки при помощи команды cat
    , будет выдано сообщение об ошибке. Узнать, куда указывает символьная ссылка, можно при помощи утилиты realpath

    119
    1.10 Удаление файлов и каталогов – утилиты rm и
    rmdir
    В ОС Linux для удаления файлов предназначена утилита rm
    (сокращение от англ. "remove" - "удалять"):
    Если удалить файл text в домашнем каталоге пользователя student,
    файл text-hardlink
    , который является жесткой ссылкой на удаленный файл text
    , сохранится, количество жестких ссылок на этот файл уменьшится с "
    2
    " до "
    1
    " - действительно, text-hardlink
    - теперь единственное имя этого файла. Однако если удалить и жесткую ссылку text-hardlink
    , у этого файла больше не останется ни одного имени, он станет недоступным пользователю и будет уничтожен.
    Утилита rm предназначена именно для удаления жестких ссылок, а не самих файлов. В Linux, чтобы полностью удалить файл, требуется последовательно удалить все жесткие ссылки на него. При этом все
    жесткие ссылки на файл (его имена) равноправны - среди них нет "главной", с исчезновением которой исчезнет файл. Пока есть хоть одна ссылка, файл продолжает существовать. Впрочем, у большинства файлов в
    Linux есть только одно имя (одна жесткая ссылка на файл), поэтому команда rm имя файла в большинстве случаев успешно удаляет файл.
    Как уже говорилось, символьные ссылки - это отдельные файлы, поэтому после удаления файла text
    , text-symlink
    , который ссылался на этот файл, продолжает существовать, однако теперь это - "битая ссылка", поэтому его также можно удалить командой rm
    Для удаления каталогов предназначена другая утилита - rmdir
    (от англ. "remove directory"). Впрочем, rmdir согласится удалить каталог только в том случае, если он пуст - в нем нет никаких файлов и подкаталогов. Удалить каталог вместе со всем его содержимым можно командой rm с ключом "
    -r
    " (recursive). Команда rm -r
    каталог
    - очень удобный способ потерять в одночасье все файлы: она рекурсивно обходит весь каталог, удаляя все, что попадется: файлы, подкаталоги, символьные
    ссылки... а ключ "
    -f
    " (force) делает ее работу еще неотвратимее, так как подавляет запросы вида "удалить защищенный от записи файл", так что rm работает безмолвно и безостановочно.
    ПОМНИТЕ: если вы удалили файл, значит, он уже не нужен, и не подлежит восстановлению!
    В Linux не предусмотрено процедуры восстановления удаленных файлов и каталогов. Поэтому стоит быть очень внимательным, отдавая команду rm и, тем более, rm -r
    : нет никакой гарантии, что случайно удаленные данные удастся восстановить.

    120
    1.11 Права доступа в файловой системе
    1.11.1 Идентификатор пользователя
    Говоря о правах доступа пользователя к файлам, заметим, что в действительности манипулирует файлами не сам пользователь, а запущенный им процесс (например, утилита rm или cat
    ). Поскольку и файл, и процесс создаются и управляются системой, ей нетрудно организовать какую угодно политику доступа одних к другим, основываясь на любых свойствах процессов как субъектов и файлов как объектов системы.
    В Linux, однако, используются не какие угодно свойства, а результат
    идентификации пользователя – его UID. Каждый процесс системы обязательно
    принадлежит какому-нибудь пользователю, и
    идентификатор пользователя (UID) – обязательное свойство любого
    процесса Linux. Когда программа login запускает стартовый командный интерпретатор, она приписывает ему UID, полученный в результате диалога. Обычный запуск программы (
    exec()
    ) или порождение нового
    процесса (
    fork()
    ) не изменяют UIDпроцесса, поэтому все процессы, запущенные пользователем во время терминальной сессии, будут иметь его идентификатор.
    Поскольку UID однозначно определяется входным именем, оно нередко используется вместо идентификатора – для наглядности.
    Например, вместо выражения "идентификатор
    пользователя, соответствующий входному имени student
    ", говорят "UID student
    " (в приведенном ниже примере этот идентификатор равен 500):
    Пример 3. Как узнать идентификаторы пользователя и членство в группах
    [student@localhost student]$ id uid=500 (student) gid=500(student) группы=500 (student)
    Утилита id выводит входное имя пользователя и соответствующий ему UID, а также группу по умолчанию и полный список групп, членом которых он является.
    1.11.2 Идентификатор группы
    Пользователь может быть членом нескольких групп, равно как и несколько пользователей могут быть членами одной и той же группы.
    Исторически сложилось так, что одна из группгруппа по умолчанию – является для пользователя основной - когда говорят о "GID пользователя", имеют в виду именно идентификатор группы по умолчанию. GID пользователя вписан в учетную запись и хранится в
    /etc/passwd
    , а информация о соответствии имен групп их идентификаторам, равно как и о том, в какие еще группы входит пользователь – в файле
    /etc/group
    . Из этого следует, что пользователь не может не быть членом как минимум

    121 одной группы.
    1.11.3 Ярлыки объектов файловой системы
    При создании объектов файловой системы – файлов, каталогов и т. п.
    – каждому приписывается ярлык. Ярлык включает в себя UID –
    идентификатор пользователя-хозяина файла, GID – идентификатор
    группы, которой принадлежит файл, тип объекта и набор так называемых
    атрибутов (код доступа), а также некоторую дополнительную информацию. Атрибуты (или код доступа) определяют, кто и что имеет право делать с файлом, они описаны ниже:
    Пример 4. Атрибуты каталогов, показанные командой ls -l итого 88 drwxr-xr-x
    2 root root
    4096 Апр
    4 2015 bin drwxr-xr-x
    4 root root
    4096 Апр
    4 2016 boot drwxr-xr-x
    10 root root
    3520 Апр
    5 14:26 dev drwxr-xr-х
    90 root root
    8192 Апр
    5 14:22 etc drwxr-xr-x
    3 root root
    4096 Апр
    4 21:22 home drwxr-xr-x
    11 root root
    4096 Апр
    4 2016 lib drwx------
    2 root root
    16384 Апр
    4 2016 lost+found drwxr-xr-x
    4 root root
    4096 Апр
    5 14:22 media drwxr-xr-x
    2 root root
    4096 Июл
    11 2015 misc drwxr-xr-x
    2 root root
    4096 Окт
    20 2016 mnt drwxr-xr-x
    2 root root 0 Апр
    5 14:21 net drwxr-xr-x
    2 root root
    4096 Окт
    20 2016 opt dr-xr-xr-x
    106 root root 0 Апр
    5 2015 proc drwxr-x---
    31 root root
    4096 Апр
    5 14:29 root drwxr-xr-x
    2 root root
    8192 Апр
    4 2016 sbin drwxr-xr-x
    2 root root
    4096 Окт
    20 2016 selinux drwxr-xr-x
    2 root root
    4096 Окт
    20 2015 srv drwxr-xr-x
    11 root root 0 Апр
    5 2016 sys drwxrwxrwt
    16 root root
    4096 Апр
    5 14:26 tmp drwxr-xr-x
    15 root root
    4096 Апр
    4 2015 usr drwxr-xr-x
    21 root root
    4096 Апр
    4 2015 var
    Ключ "
    -l
    " утилиты ls определяет длинный (long) формат выдачи
    (справа налево): имя файла, время последнего изменения файла, размер в байтах, группа, хозяин, количество жестких ссылок и строчка атрибутов.
    Первый символ в строчке атрибутов определяет тип файла. Тип "
    -
    " отвечает "обычному" файлу, а тип "
    d
    " – каталогу (directory).
    Несмотря на то, что создание жестких ссылок на каталог невозможно, значение поля "количество жестких ссылок" (второй столбец) для всех каталогов примера равно двум, а не одному. На самом деле этого и следовало ожидать, потому что любой каталог файловой

    122 системы Linux всегда имеет не менее двух имен: собственное (например, tmp
    ) и имя "
    " в самом этом каталоге (
    tmp/.
    ). Если же в каталоге создать подкаталог, количество жестких ссылок на этот каталог увеличится на 1 за счет имени "
    " в подкаталоге (например,
    tmp/subdir1/..
    ):
    1.11.4 Иерархия прав доступа
    Рассмотрим более подробно, чему соответствуют девять символов в строке атрибутов, выдаваемой ls
    . Эти девять символов имеют вид "
    rwxrwxrwx
    ", где некоторые "
    r
    ", "
    w
    " и "
    x
    " могут заменяться на "
    -
    ".
    Очевидно, буквы отражают принятые в Linux три вида доступа – чтение, запись и использование – однако в ярлыке они присутствуют в трех экземплярах!
    Дело в том, что любой пользователь (процесс) Linux по отношению к любому файлу может выступать в трех ролях: как хозяин (user), как член
    группы, которой принадлежит файл (group), и как посторонний (other), никаких отношений собственности на этот файл не имеющий. Строка
    атрибутов – это три тройки "
    rwx
    ", описывающие права доступа к файлу
    хозяина этого файла (первая тройка, "
    u
    "), группы, которой принадлежит файл (вторая тройка, "
    g
    ") и посторонних (третья тройка, "
    o
    "). Если в какой-либо тройке не хватает буквы, а вместо нее стоит "
    -
    ", значит, пользователю в соответствующей роли будет в соответствующем виде доступа отказано.
    При выяснении отношений между файлом и пользователем, запустившим процесс, роль определяется так:
    Если UID файла совпадает с UID процесса, пользователь – хозяин файла
    Если GID файла совпадает с GID любой группы, в которую входит пользователь, он – член группы, которой принадлежит файл.
    Если ни UID, ни GID файла не пересекаются с UID процесса и списком
    групп, в которые входит запустивший его пользователь, этот пользователь
    посторонний.
    Именно в роли хозяина пользователь (процесс) может изменять ярлык
    файла. Единственное, чего не может делать хозяин со своим файлом – менять ему хозяина.
    1.12 Использование прав доступа в Linux
    1.12.1 Использование групп
    В Linux определено несколько системных групп, задача которых – обеспечивать доступ членов этих групп к разнообразным ресурсам системы. Часто такие группы носят говорящие названия: "
    disk
    ", "
    audio
    ",
    "
    cdwriter
    " и т. п. Если обычным пользователям доступ к некоторому файлу, каталогу или специальному файлу Linux закрыт, он открыт членам группы, которой этот объект принадлежит.

    123
    Например, в Linux почти всегда используется виртуальная файловая
    система
    /proc
    – каталог, в котором в виде подкаталогов и файлов представлена информация из таблицы процессов. Имя подкаталога
    /proc совпадает с PID соответствующего процесса, а содержимое этого подкаталога отражает свойства процесса. Хозяином такого подкаталога будет хозяин процесса (с правами на чтение и использование), поэтому
    1   ...   8   9   10   11   12   13   14   15   ...   21


    написать администратору сайта