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

  • 1.6 Перемещение по дереву каталогов – команда cd

  • 1.7 Создание каталогов – утилита mkdir

  • 1.7.1 Создание нового пустого файла – команда touch

  • 1.8 Копирование и перемещение файлов

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

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

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

  • Cимвольная

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

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

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

  • ЛБ6 Файловые системы ОС Linux (2). Лабораторная работа 6 файловые системы ос linux


    Скачать 409.99 Kb.
    НазваниеЛабораторная работа 6 файловые системы ос linux
    Дата13.11.2022
    Размер409.99 Kb.
    Формат файлаpdf
    Имя файлаЛБ6 Файловые системы ОС Linux (2).pdf
    ТипЛабораторная работа
    #786676
    страница2 из 3
    1   2   3

    настройка окружения, "рабочего места") не пересекается с работой над какой-нибудь прикладной задачей.
    Родительский каталог (parent directory) - это каталог, в котором содержится данный. Для корневого каталога родительским является он сам.
    Ссылки на текущий и на родительский каталог обязательно присутствуют в каждом каталоге в Linux. Даже если каталогпуст, т. е. не содержит ни одного файла или подкаталога, команда "
    ls -a
    " выведет список из двух имен: "
    " и "
    ". За ссылками на текущий и родительский каталоги
    могут следовать несколько файлов и каталогов, имена которых начинаются с "
    ". В них содержатся настройки командной оболочки (файлы, начинающиеся с "
    .bash
    ") и других программ. В домашнем каталоге
    каждого пользователя Linux всегда присутствует несколько таких файлов.

    9
    Использование этих файлов позволяет пользователям независимо друг от друга настраивать поведение командной оболочки и других программ - организовывать свое "рабочее место" в системе.
    1.6 Перемещение по дереву каталогов – команда cd
    Пользователь может работать с файлами не только в своем
    домашнем каталоге, но и в других каталогах. В этом случае будет удобно
    сменить текущий каталог. Для смены текущего каталога командной оболочки используется команда cd
    (от англ. "change directory" - "сменить
    каталог"). Команда cd принимает один параметр: имя каталога, в который нужно переместиться - сделать текущим. В качестве имени каталога
    можно использовать полный или относительный путь. В приглашении
    командной строки часто указывается текущий каталог shell - чтобы пользователю легче было ориентироваться, в каком каталоге он "находится" в данный момент.
    Командная оболочка умеет достраивать имена файлов и каталогов: пользователю достаточно набрать несколько первых символов имени файла или каталога и нажать
    Tab
    . Если есть только один вариант завершения имени - оболочка закончит его сама, и пользователю не придется набирать оставшиеся символы. Достраивание - весьма существенное средство экономии усилий и повышения эффективности при работе с командной строкой. Современные командные оболочки умеют достраивать имена файлов и каталогов, а также имена команд.
    Достраивание наиболее развито в командном интерпретаторе zsh
    Оболочка PowerShell также умеет достраивать имена.
    Для перемещения в родительский каталог ("/home") удобно воспользоваться ссылкой "..". Необходимость вернуться в домашний каталог из произвольной точки файловой системы возникает довольно часто, поэтому командная оболочка поддерживает обозначение домашнего каталога при помощи символа "

    ". Поэтому чтобы перейти в домашний каталог из любого другого, достаточно выполнить команду "
    cd
    ". При исполнении команды символ "

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

    " можно ссылаться и на домашние каталоги
    других пользователей: "
    имя пользователя ". Команда cd
    , поданная без параметров, эквивалентна команде "
    cd
    " и делает текущим каталогом
    домашний каталог пользователя.
    1.7 Создание каталогов – утилита mkdir
    В домашнем каталоге, как и в любом другом, можно создавать сколько угодно подкаталогов, в них - свои подкаталоги и т. д. Иными

    1 0
    словами, пользователю принадлежит фрагмент (поддерево) файловой
    системы, корнем которого является его домашний каталог.
    Чтобы организовать такое поддерево, потребуется создать каталоги
    внутри домашнего. Для этого используется утилита mkdir
    . Она применяется с одним обязательным параметром: именем создаваемого
    каталога. По умолчанию каталог будет создан в текущем каталоге.
    1.7.1 Создание нового пустого файла – команда touch
    Для создания пустого файла с текущим временем создания служит команда touch имя_нового_файла. Для указания даты создания в формате
    ГГГГММДДhhmm используется ключ –t. Например touch –t 0904080000 tst файл создан 8 апреля 2015 г.
    1.8 Копирование и перемещение файлов
    Для перемещения файлов и каталогов предназначена утилита mv
    (от англ. "move" - "перемещать"). У mv два обязательных параметра: первый - перемещаемый файл или каталог, второй - файл или каталог назначения.
    Имена файлов и каталогов могут быть заданы в любом допустимом виде: при помощи полного или относительного пути. Кроме того, mv позволяет перемещать не только один файл или каталог, а сразу несколько. За подробностями о допустимых параметрах и ключах следует обратиться к руководству по mv
    :
    Перемещение файла внутри одной файловой системы в действительности равнозначно его переименованию: данные самого файла при этом остаются на тех же секторах диска, а изменяются
    каталоги, в которых произошло перемещение. Перемещение предполагает удаление ссылки на файл из того каталога, откуда он перемещен, и добавление ссылки на этот самый файл в тот каталог, куда он перемещен.
    В результате изменяется полное имя файла - полный путь, т. е. положение файла в файловой системе.
    Иногда требуется создать копию файла: для большей сохранности данных, для того, чтобы создать модифицированную версию файла и т. п.
    В Linux для этого предназначена утилита cp
    (от англ. "copy" -
    "копировать"). Утилита cp требует использования двух обязательных параметров: первый - копируемый файл или каталог, второй - файл или
    каталог назначения. Как обычно, в именах файлов и каталогов можно использовать полные и относительные пути. Существует несколько вариантов комбинации файлов и каталогов в параметрах cp
    - о них можно прочесть в руководстве. Нужно иметь в виду, что в Linux утилита cp нередко настроена таким образом, что при попытке скопировать файл поверх уже существующего файла никакого предупреждения не выводится. В этом случае файл будет просто перезаписан, а данные,

    1 1
    которые содержались в старой версии файла, безвозвратно потеряны.
    Поэтому при использовании cp следует всегда быть внимательным и проверять имена файлов, которые нужно скопировать.
    Созданная при помощи cp копия файла связана с оригиналом только в воспоминаниях пользователя, в файловой же системе исходный файл и его копия - две совершенно независимые и ничем не связанные единицы.
    Поэтому при наличии нескольких копий одного и того же файла в рамках
    одной файловой системы повышается вероятность запутаться в копиях или забыть о некоторых из них. Если задача состоит в том, чтобы обеспечить доступ к одному и тому же файлу из разных точек файловой
    системы, нужно использовать специально предназначенный для этого механизм файловой системы 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
    " - это два имени одного и того же файла.
    Доступ к одному и тому же файлу при помощи нескольких имен может понадобиться в следующих случаях:
    Одна и та же программа известна под несколькими именами.
    Доступ пользователей к некоторым каталогам в системе может быть ограничен из соображений безопасности. Однако если все же нужно организовать доступ пользователей к файлу, который находится в таком

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

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

    1 4
    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
    : нет никакой гарантии, что случайно удаленные данные удастся восстановить.

    15
    1.11 Права доступа в файловой системе
    1.11.1 Идентификатор пользователя
    Говоря о правах доступа пользователя к файлам, заметим, что в действительности манипулирует файлами не сам пользователь, а запущенный им процесс (например, утилита rm или cat
    ). Поскольку и файл, и процесс создаются и управляются системой, ей нетрудно организовать какую угодно политику доступа одних к другим, основываясь на любых свойствах процессов как субъектов и файлов как объектов системы.
    В Linux, однако, используются не какие угодно свойства, а результат
    идентификации пользователя – его UID. Каждый процесс системы обязательно
    принадлежит какому-нибудь пользователю, и
    идентификатор пользователя (UID) – обязательное свойство любого
    процесса Linux. Когда программа login запускает стартовый командный интерпретатор, она приписывает ему UID, полученный в результате диалога. Обычный запуск программы (
    exec()
    ) или порождение нового
    процесса (
    fork()
    ) не изменяют UIDпроцесса, поэтому все процессы, запущенные пользователем во время терминальной сессии, будут иметь его идентификатор.
    Поскольку UID однозначно определяется входным именем, оно нередко используется вместо идентификатора – для наглядности.
    Например, вместо выражения "идентификатор
    пользователя, соответствующий входному имени student
    ", говорят "UID student
    " (в приведенном ниже примере этот идентификатор равен
    1   2   3


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