Назначение связей с файлами и способы их создания

Обновлено: 07.07.2024

Модуль 8. Управление данными

Тема 14. Система управления файлами

Cистема управления данными

Система управления данными играет центральную роль в ОС, поскольку она должна управлять и хранить информацию и программы, принадлежащие как пользователям, так и самой системе. Причем, с концептуальной точки зрения, целесообразно не различать хранимую информацию и периферийные устройства как источники или получатели информации во время выполнения программы, что тесно связывает систему управления данными (СУД) с системой управления вводом/выводом (СУВВ) в единое целое. Здесь имеется в виду обеспечение возможности взаимодействовать с устройствами ввода/вывода как с файлами.

Основными понятиями СУД являются файл, том и каталог. Причем существует логический и физический аспект этих понятий.

Логический файл - это организованная совокупность однородных элементов информации или однотипных записей для хранения информации в ИВС, которой присвоено имя.

Физический файл - это область внешней памяти, хранящей информацию, и дескриптор файла, используемый для доступа к файлу и хранящий данные о физическом размещении и характеристиках файла.

Файл состоит из записей или последовательности байт. Запись содержит информацию о свойствах одного объекта, значение которого определяется в виде полей (атрибутов). Одно или несколько полей записи, однозначно идентифицирующих запись файла, образуют ключ записи.

Сменяемое устройство внешней памяти, используемое для хранения информации, называется томом памяти. Чтобы получить доступ к информации, нужно установить том на соответствующее периферийное устройство, связать его с СУД, указать ОС метку - имя тома.

  • расширить объемы хранения информации в ВС;
  • производить обмен файлами между разными ЭВМ (на уровне носителей).

Примерами томов являются: МЛ - тома с последовательным доступом и МД, дискеты - тома с прямым доступом.

Сменный том в целях безопасности и удобства должен:

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

В соответствии с этим тома прямого доступа (ТПД) имеют:

  • специальную запись - метку тома (не обязательно иметь);
  • оглавление или каталог файлов тома, хранящий дескрипторы файлов, который сам является файлом;
  • собственно файлы тома.

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

Большая емкость ТПД, размещение на них файлов многих пользователей создали в СУД следующие трудности:

  • конфликты одноименных файлов разных пользователей;
  • замедление работы ОС из-за поиска требуемого файла в оглавлении;
  • доступность чужих файлов, то есть их незащищенность от других пользователей.

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

Итак, файл, том и каталоги - это логические объекты, обрабатываемые пользователем и программами ВС, и одновременно физические объекты, каждый из которых занимает некоторое пространство ТПД. В соответствии с этим СУД подразделяется на два уровня представления информации.

  1. Система управления файлами (СУФ), которая обеспечивает удобное логическое представление и средства работы с файлами.
  2. Система управления внешней памятью, которая обеспечивает эффективное размещение, физическое представление и надежное хранение данных на томах внешней памяти.

Файловая система - это часть операционной системы, назначение которой состоит в том, чтобы обеспечить пользователю удобный интерфейс при работе с данными, хранящимися на диске, и обеспечить совместное использование файлов несколькими пользователями и процессами.

В широком смысле понятие "файловая система" включает:

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

СУФ реализует выполнение следующих базовых функций.

    1. Организацию логической системы в виде томов памяти и каталогов файлов.
    2. Управление томами, в том числе:
    • инициализацию (форматирование);
    • подключение (перевод в оперативное состояние);
    • отключение (перевод в автономное состояние).
    • создание каталогов;
    • переключение между каталогами;
    • удаление каталогов.
    • создание файла (определение имени, выделение места во внешней памяти);
    • удаление файла (освобождение имени и занимаемого файлами пространства);
    • открытие файла (объявление ОС о намерении использовать файл с определенными функциями доступа и правами);
    • закрытие открытого файла (запрещение всякого доступа к файлу);
    • копирование и переименование файла.
      1. Связь файлов и потоков ввода/вывода, соединение и переадресацию потоков.
      2. Организацию логической структуры файлов и доступа к записям файлов в требуемом порядке.
      3. Модификацию записей файлов: читать, писать, изменять, вставлять, добавлять, удалять записи.
      4. Защиту файлов от несанкционированного доступа и управление правами доступа.

      Кроме того, может быть масса сервисных функций проверки и модификации различных характеристик файлов, каталогов, томов, зависящих от конкретной реализации СУФ.

      Файлы бывают разных типов: обычные файлы, специальные файлы, файлы-каталоги.

      Обычные файлы в свою очередь подразделяются на текстовые и двоичные. Текстовые файлы состоят из строк символов, представленных в ASCII-коде. Это могут быть документы, исходные тексты программ и т.п. Текстовые файлы можно прочитать на экране и распечатать на принтере. Двоичные файлы не используют ASCII-коды, они часто имеют сложную внутреннюю структуру, например, объектный код программы или архивный файл. Все операционные системы должны уметь распознавать хотя бы один тип файлов - их собственные исполняемые файлы.

      В разных файловых системах могут использоваться в качестве атрибутов разные характеристики, например:

      • информация о разрешенном доступе;
      • пароль для доступа к файлу;
      • владелец файла;
      • создатель файла;
      • признак "только для чтения";
      • признак "скрытый файл";
      • признак "системный файл";
      • признак "архивный файл";
      • признак "двоичный/символьный";
      • признак "временный" (удалить после завершения процесса);
      • признак блокировки;
      • длина записи;
      • указатель на ключевое поле в записи;
      • длина ключа;
      • время создания, последнего доступа и последнего изменения;
      • текущий размер файла;
      • максимальный размер файла.

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

      Для пользователей файл обозначается с помощью идентификаторов - внешних имен (могут быть и внутренние имена файлов). Пользователи дают файлам символьные имена, при этом учитываются ограничения ОС как на используемые символы, так и на длину имени. До недавнего времени эти границы были весьма узкими. Так, в популярной файловой системе FAT длина имен ограничивается известной схемой 8.3 (8 символов - собственно имя, 3 символа - расширение имени), а в ОС UNIX System V имя не может содержать более 14 символов. Однако пользователю гораздо удобнее работать с длинными именами, поскольку они позволяют дать файлу действительно мнемоническое название, по которому даже через достаточно большой промежуток времени можно будет вспомнить, что содержит этот файл. Поэтому современные файловые системы, как правило, поддерживают длинные символьные имена файлов. Например, Windows NT в своей новой файловой системе NTFS устанавливает, что имя файла может содержать до 255 символов, не считая завершающего нулевого символа.

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

      Длинные имена поддерживаются не только новыми файловыми системами, но и новыми версиями хорошо известных файловых систем. Например, в ОС Windows 95 используется файловая система VFAT, представляющая собой существенно измененный вариант FAT. Среди многих других усовершенствований одним из главных достоинств VFAT является поддержка длинных имен. Кроме проблемы генерации коротких эквивалентных имен, при реализации нового варианта FAT важной задачей была задача хранения длинных имен при условии, что принципиально метод хранения и структура данных на диске не должны были измениться.

      Для решения проблем поиска и размещения файлов в СУФ используются иерархические, многоуровневые каталоги файлов, двухуровневые имена файлов и средства фильтрации.

      Простой одноуровневый каталог представляет собой оглавление тома (используется в однопользовательских ОС - рис.11.1)

      Рис.11.1. Простой одноуровневый каталог.

      Иерархический, многоуровневый каталог (древовидный или сетевой) - это совокупность каталогов и дескрипторов файлов различной глубины (рис.11.2).

      Рис.11.2. Иерархический многоуровневый каталог

      Каталоги образуют дерево, если файлу разрешено входить только в один каталог, и сеть - если файл может входить сразу в несколько каталогов. В MS-DOS каталоги образуют древовидную структуру, а в UNIX'е - сетевую. Как и любой другой файл, каталог имеет символьное имя и однозначно идентифицируется составным именем, содержащим цепочку символьных имен всех каталогов, через которые проходит путь от корня до данного каталога.

      Каждый каталог группирует по определенным принципам файлы пользователей, которые могут быть защищены паролем. Для упрощения работы имеется понятие текущего каталога, определяющего список доступных файлов и подкаталогов и позволяющего обращаться к файлам по собственным именам.

      ОС обеспечивает определение нескольких текущих каталогов (путей доступа), которые в заданной последовательности просматривается при обращении к файлу по имени:

      PATH C:\; C:\nc; D:\ альтернативные маршруты.

      В процессе диалога ОС для группировки и удобства работы с файлами используются 2-х и 3-х компонентные идентификаторы:

      [ <префикс>:] <имя файла> [ .суффикс/расщирение] .

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

      Средства фильтрации позволяют определять операции над целым классом файлов, посредством указания вместо имени файла специальных символов (* или !). Например, имя *.exe представляет все файлы т екущего подкаталога, имеющие расширение exe.

      Важной характеристикой СУФ является обеспечение независимости программ от используемых ПУ и файлов. Для этого вводится понятие потока ввода/вывода как средства отсроченного установления связи программы с конкретными файлами и ПУ.

      Поток ввода/вывода - это объект, который обладает всеми характеристиками устройства ввода/вывода, но не является реально существующим. Программа работает не с файлами, а потоками ввода/вывода.

      В операционной системе MS-DOS, например, по умолчанию в качестве входного потока данных рассматривается клавиатура, а выходной поток направляется на дисплей. Для переопределения потоков ввода/вывода используются следующие символы:

      < - для определения входного потока;

      >- для определения выходного потока;

      >> - для модификации (добавления) ранее определенного выходного потока.

      Выполнение команды DIR>LPT приведет выводу содержимого текущего каталога на принтер.

      Транспортировка потоков позволяет сцепить несколько программ по стандартному входу-выходу. По сути дела образуется буфер, позволяющий двум процессам связываться по схеме “производитель – потребитель”. Таким образом, выходные данные одной программы являются входными для другой программы, обеспечивая естественное взаимодействие.

      Команда DIR|SORT выведет на дисплей отсортированный список файлов, полученный командой DIR.

      Операции создания связей. Команда ln , системные вызовы link() и symlink() . С операциями, позволяющими изменять логическую структуру файловой системы, такими как создание файла , мы уже сталкивались в этом разделе. Однако операции создания связи служат для проведения новых именованных ребер в уже существующей структуре без добавления новых узлов или для опосредованного проведения именованного ребра к уже существующему узлу через файл типа "связь" и неименованное ребро . Такие операции мы до сих пор не рассматривали, поэтому давайте остановимся на них подробнее.

      Допустим, что несколько программистов совместно ведут работу над одним и тем же проектом. Файлы, относящиеся к этому проекту, вполне естественно могут быть выделены в отдельную директорию так, чтобы не смешиваться с файлами других пользователей и другими файлами программистов, участвующих в проекте. Для удобства каждый из разработчиков, конечно, хотел бы, чтобы эти файлы находились в его собственной директории . Этого можно было бы добиться, копируя по мере изменения новые версии соответствующих файлов из директории одного исполнителя в директорию другого исполнителя. Однако тогда, во-первых, возникнет ненужное дублирование информации на диске. Во-вторых, появится необходимость решения тяжелой задачи: синхронизации обновления замены всех копий этих файлов новыми версиями.

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

      В операционной системе UNIX связь может быть создана двумя различными способами.

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

      Использование жестких связей приводит к возникновению двух проблем.

      Первая проблема связана с операцией удаления файла. Если мы хотим удалить файл из некоторой директории , то после удаления из ее содержимого записи, соответствующей этому файлу, мы не можем освободить логические блоки, занимаемые файлом, и его индексный узел , не убедившись, что у файла нет дополнительных имен (к его индексному узлу не ведут ссылки из других директорий ), иначе мы нарушим целостность файловой системы. Для решения этой проблемы файлы получают дополнительный атрибут – счетчик жестких связей (или именованных ребер), ведущих к ним, который, как и другие атрибуты, располагается в их индексных узлах . При создании файла этот счетчик получает значение 1 . При создании каждой новой жесткой связи , ведущей к файлу, он увеличивается на 1 . Когда мы удаляем файл из некоторой директории , то из ее содержимого удаляется запись об этом файле, и счетчик жестких связей уменьшается на 1 . Если его значение становится равным 0 , происходит освобождение логических блоков и индексного узла , выделенных этому файлу.

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




      Файловая система . На каждом носителе информации (гибком, жестком или лазерном диске) может храниться большое количество файлов. Порядок хранения файлов на диске определяется используемой файловой системой.

      Каждый диск разбивается на две области: обла сть хранения файлов и каталог. Каталог содержит имя файла и указание на начало его размещения на диске. Если провести аналогию диска с книгой, то область хранения файлов соответствует ее содержанию, а каталог - оглавлению. Причем книга состоит из страниц, а диск - из секторов.

      Для дисков с небольшим количеством файлов (до нескольких десятков) может использоваться одноуровневая файловая система , когда каталог (оглавление диска) представляет собой линейную последовательность имен файлов (табл. 1.2). Такой каталог можно сравнить с оглавлением детской книжки, которое содержит только названия отдельных рассказов.

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

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

      Например, в корневом каталоге могут находиться два вложенных каталога 1-го уровня (Каталог_1, Каталог_2) и один файл (Файл_1). В свою очередь, в каталоге 1-го уровня (Каталог_1) находятся два вложенных каталога второго уровня (Каталог_1.1 и Каталог_1.2) и один файл (Файл_1.1) - рис. 1.3.

      Файловая система - это система хранения файлов и организации каталогов.

      Рассмотрим иерархическую файловую систему на конкретном примере. Каждый диск имеет логическое имя (А:, В: - гибкие диски, С:, D:, Е: и так далее - жесткие и лазерные диски).

      Пусть в корневом каталоге диска С: имеются два каталога 1-го уровня (GAMES, TEXT), а в каталоге GAMES один каталог 2-го уровня (CHESS). При этом в каталоге TEXT имеется файл proba.txt, а в каталоге CHESS - файл chess.exe (рис. 1.4).

      Рис. 1.4. Пример иерархической файловой системы

      Путь к файлу . Как найти имеющиеся файлы (chess.exe, proba.txt) в данной иерархической файловой системе? Для этого необходимо указать путь к файлу. В путь к файлу входят записываемые через разделитель "\" логическое имя диска и последовательность имен вложенных друг в друга каталогов, в последнем из которых содержится нужный файл. Пути к вышеперечисленным файлам можно записать следующим образом:

      Путь к файлу вместе с именем файла называют иногда полным именем файла.

      Пример полного имени файла:

      Представление файловой системы с помощью графического интерфейса . Иерархическая файловая система MS-DOS, содержащая каталоги и файлы, представлена в операционной системе Windows с помощью графического интерфейса в форме иерархической системы папок и документов. Папка в Windows является аналогом каталога MS-DOS

      Однако иерархическая структура этих систем несколько различается. В иерархической файловой системе MS-DOS вершиной иерархии объектов является корневой каталог диска, который можно сравнить со стволом дерева, на котором растут ветки (подкаталоги), а на ветках располагаются листья (файлы).

      В Windows на вершине иерархии папок находится папка Рабочий стол. Следующий уровень представлен папками Мой компьютер, Корзина и Сетевое окружение (если компьютер подключен к локальной сети) - рис. 1.5.

      Рис. 1.5. Иерархическая структура папок

      Если мы хотим ознакомиться с ресурсами компьютера, необходимо открыть папку Мой компьютер.

      1. В окне Мой компьютер находятся значки имеющихся в компьютере дисков. Активизация (щелчок) значка любого диска выводит в левой части окна информацию о его емкости, занятой и свободной частях.

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

      Права указываются в одной из двух нотаций: числовой и символьной.

      Числовая нотация команды chmod

      Набор прав разбивается на 4 тройки:

      sst rwx rwx rwx

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

      --- rwx rwx rwx
      --- rwx r-x r-x
      --- rw- r-- ---
      ss- rwx r-x r-x
      --t rwx r-x r--

      Лидирующий ноль можно опускать.

      Символьная нотация команды chmod

      В отличие от числовой нотации символьная нотация указывает не права, а изменения прав. Нотация состоит из 3 элементов, указанных в следующей последовательности: чьи права изменять, каким образом, и какие именно права.

      Чьи права изменять Каким образом Какие именно права
      u (владельца) g (группы) o (всех остальных) a (всех трех категорий) + (добавить) - (убрать) r w x
      = (сделать такими же) u (как у владельца) g (как у группы) o (как у всех остальных)
      u g + - s (SUID или SGID)
      u + - t (Sticky bit)

      Добавить группе право на запись:

      chmod g+w file

      Убрать у прочих права на запись и исполнение:

      Chmod o-wx file

      Добавить владельцу и группе права на чтение и запись:

      chmod ug+rw file

      Установить права прочих такими же, как у группы

      chmod o=g file

      Установить права прочих и группы такими же, как у владельца

      chmod og=u file

      Несколько изменений можно перечислять через запятую. Например, добавить владельцу право на исполнение, а у группы и прочих убрать право на запись:

      chmod u+x,go-w file

      Поиск в файловой системе

      Поиск по содержимому файлов (grep)

      grep [-inv] подстрока файл [файл2 . ]

      производит поиск указанной подстроки в указанных файлах.

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

      -i - игнорировать отличия верхнего и нижнего регистра (на нерусифицированных системах работает только для латиницы),

      -n - вместе со строками выводить и их номера,

      -v - выводить строки, в которых не найдена указанная подстрока.

      Полное описание ключей команды grep см. в справочнике man.

      Поиск файлов (find)

      find каталог [выражение . ]

      проивзодит рекурсивный поиск в указанном каталоге и его подкаталогах. Для каждого файла вычисляются значения указанных в командной строке логических выражений, которые объединяются по "И". Если в итоге получается "ИСТИННО", то имя файла (точнее путь к нему, начиная от указанного в командной строке каталога, выводится в стандартный вывод).

      Отсутствие выражений - всегда "ИСТИННО" (то есть в это случае find рекурсивно выводит имена всех файлов каталога и его подкаталогов).

      Основные выражения find

      (Примечание: ниже везде, где есть числовой параметр N, перед ним можно ставить плюс или минус, при этом справедливо следующее правило: "+N" означает "больше, чем N", "-N" означает "меньше, чем N", просто число N означает "равно N".)

      -name шаблон_имени_файла

      истинно, если имя файла соответствует шаблону; в шаблоне можно использовать символ '*' и т.п. - при этом шаблон надо взять в одинарные кавычки.

      -perm ABCD

      истинно, если права доступа к файлу точно равны указанным (ABCD); права записываются в числовой нотации команды chmod.

      -perm -ABCD

      истинно, если указанные права доступа (ABCD) имеются у файла; права записываются в числовой нотации команды chmod.

      -type T

      истинно, если тип файла равен указанному типу T, где Т - один из символов: f (обычный файл), d (каталог), l (символическая связь), b или c (блочное или символьное устройство), p (конвейер).

      -user имя_пользователя

      истинно, если файл принадлежит указанному пользователю.

      -group имя_группы

      истинно, если файл принадлежит указанной группе.

      -size Nc

      истинно, если размер файла равен N байт (без символа 'c' размер интерпретируется в 512-байтных блоках).

      -mtime N

      истинно, если содержимое файла было модифицировано N суток назад (т.е. N*24 часов назад).

      -atime N

      истинно, если последний доступ к файлу имел место N суток назад (т.е. N*24 часов назад).

      -ctime N

      истинно, если атрибуты файла были модифицировано N суток назад (т.е. N*24 часов назад).

      -newer имя_файла

      истинно, если файл был модифицирован позже, чем указанный.

      истинно, если владелец файла не найден в списке пользователей (например, пользователь был удален, а его файлы остались).

      истинно, если группа-владелец файла не найдена в списке групп (например, группа была удалена, а файлы остались).

      операция "И" в явном виде.

      скобки для группировки выражений, если это необходимо (обратите внимание на наличие обратных слэшей).

      Порядок выполнения работы

      Установите виртуальную машину и ОС семейства UNIX. Выполните в командной строке перечисленные ниже действия. Протоколируйте процесс выполнения (с помощь скриншотов или записывая команды) и представьте их в отчете.

      1. Получите справку о команде printf с использованием разных ключей.

      2. Создайте 2мя способами 2 файла (с помощью touch и >). Не забудьте просмотреть содержимое каталога, где вы создали файлы.

      3. В домашнем каталоге создайте 2 подкаталога d1 и d2 с помощью отдельных команд для каждого каталога и одной команды для обоих каталогов.

      4. Создайте в домашнем каталоге текстовый файл test.txt и скопируйте его в заранее созданный каталог d1.

      5. Рекурсивно скопируйте каталог d1 в каталог d2. Просмотрите содержимое домашнего и d2 каталогов

      6. Создайте файл abc.txt и измените его имя на cba.txt. Далее переместите этот файл в каталог d2. Создайте также каталог d3 и переместите его в каталог d2.

      7. Создайте текстовый файл b.txt и символическую связь для него c.txt. Просмотрите содержимое рабочего каталога и обратите внимание на файл c.txt и его размер: 5 - это число символов в имени "b.txt".

      8. Создайте жесткую связь для файла b.txt – d.txt. Просмотрите содержимое рабочего каталога и обратите внимание на значение второй колонки для b.txt и d.txt и размер этих файлов, заметьте также время последней модификации. Файлы b.txt и d.txt абсолютно равноправны, т.к. это два разных имени одного и того же физического файла. С помощью команды touch измените время последней модификации файла d.txt и выведите данные об обоих файлах (обратите внимание на время последней модификации). Далее выведите номера индексных дескрипторов этих файлов и обратите внимание на их значения (см. команду ls)

      9. Удалите файлы b.txt, c.txt и d.txt. Рекурсивно удалите каталог d1 в каталоге d2 (с просьбой подтверждения удаления), а также каталог d3 из каталога d2 (также рекурсивно, но без запроса подтверждения). Удалите оставшееся содержимое каталога d2 и удалите ПУСТОЙ каталог.

      10. Создайте в текстовом редакторе файл test.txt и внесите в него произвольный текст. ПОЛНОСТЬЮ выведите содержимое этого файла, а затем повторите, но ПОСТРАНИЧНО.

      11. Выведите список каталогов верхнего уровня (/).

      13. В каталоге dev выведите полную информацию о устройствах. Определите, к какому классу относятся данные устройства: оперативная память (mem), жесткий диск, терминал и псевдотерминал. Просмотрите содержимое каталога null (весь вывод, направленный в файл /dev/null, уничтожается, а ввод из него имеет нулевую длину,обратите внимание, что это псевдоустройство того же класса, что и /dev/mem).

      14. Просмотрите содержимое каталогов /home, /sbin, /kernel. Определите их назначение.

      15. Выведите информацию о смонтированных файловых системах, а также данные о размерах файловых систем в килобайтах.

      16. Выведите информацию о суммарном размере файлов текущем каталоге и его подкаталогах (рекурсивно), а затем только о каталоге.

      17. Просмотрите список всех пользовательских учетных записей.

      18. Выведите данные обо всех группах в системе.

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

      20. Поэкспериментируйте с командой chmod на файлах своего каталога. Используйте сначала числовую, а потом символьную нотацию. Попробуйте все приведенные варианты. Результаты контролируйте командой ls -l.

      21. Произведите поиск в файле b.txt без ключей и используя различные ключи. Произведите поиск в нескольких файлах.

      22. Найдите в домашнем каталоге все файлы, начинающиеся на "a" или другой символ (find . -name 'a*')

      23. Найдите в домашнем каталоге все исполнимые владельцем файлы, начинающиеся на "a" (find . -name 'a*' -perm -0100)

      24. Найдите в домашнем каталоге все файлы, модифицированные более 2 дней назад (find . -mtime +2)

      1. Что такое виртуальная машина и каковы ее возможности?
      2. Что считается файлами в OC UNUX?
      3. Какие типы файлов существуют в OC UNUX?
      4. Объясните назначение связей с файлами и способы их создания.
      5. Какие методы создания и удаления файлов, каталогов Вы знаете?
      6. Какой командой можно получить список работающих пользователей и сохранить его в файле?
      7. Как производится освобождение блоков данных, занятых под файл?
      8. В чем заключаются функции монтирования и размонтирования файловой системы и какими командами они выполняются?
      9. Что определяет атрибуты файлов и каким образом их можно просмотреть и изменить?
      10. Каковы права доступа к файлу, при которых владелец может выполнять все операции, а прочие пользователи - только читать?
      11. В чем заключается поиск по шаблону?
      12. Какие типы поиска в файловой системе Вам известны?


      Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций.


      Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой.

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

      1. Ознакомиться с файловой структурой ОС LINUX. Изучить команды работы с файлами.

      2. Используя команды ОС LINUX, создать два текстовых файла.

      3. Полученные файлы объединить в один файл и его содержимое просмотреть на экране.

      4. Создать новую директорию и переместить в нее полученные файлы.

      5. Вывести полную информацию обо всех файлах и проанализировать уровни доступа.

      6. Добавить для всех трех файлов право выполнения членам группы и остальным пользователям.

      7. Просмотреть атрибуты файлов.

      8. Создать еще один каталог.

      9. Установить дополнительную связь объединенного файла с новым каталогом, но под другим именем.

      10. Создать символическую связь.

      11. Сделать текущим новый каталог и вывести на экран расширенный список информации о его файлах.

      12. Произвести поиск заданной последовательности символов в файлах текущей директории и получить перечень соответствующих файлов.

      13. Получить информацию об активных процессах и имена других пользователей.

      14. Сдать отчет о работе и удалить свои файлы и каталоги.

      15. Выйти из системы.

      Контрольные вопросы

      1. Что считается файлами в OC LINUX?

      2. Объясните назначение связей с файлами и способы их создания.

      3. Что определяет атрибуты файлов и каким образом их можно просмотреть и изменить?

      4. Какие методы создания и удаления файлов, каталогов Вы знаете?

      5. В чем заключается поиск по шаблону?

      6. Какой командой можно получить список работающих пользователей и сохранить его в файле?

      Глас Г., Эйблс К. Unix для программистов и пользователей. / Г. Глас, К. Эйблс – СПб.: БХВ-Петербург, 2004. – 848 с.: ил.

      Брюс М. Unix/Linux: Теория и практика программирования. / М.Брюс - Издательство "Кудиц-Образ", 2004. -576 с.

      ЛАБОРАТОРНАЯ РАБОТА 3.

      СОЗДАНИЕ И ВЫПОЛНЕНИЕ КОМАНДНЫХ ФАЙЛОВ В СРЕДЕ ОС LINUX

      Цель работы

      Целью работы является изучение методов создания и выполнения командных файлов на языке Shell - интерпретатора.

      Теоретическая часть

      В предыдущих лабораторных работах взаимодействие с командным интерпретатором Shell осуществлялось с помощью командной строки. Однако, Shell является также и языком программирования, который применяется для написания командных файлов (shell - файлов). Командные файлы также называются скриптами и сценариями. Shell - файл содержит одну или несколько выполняемых команд (процедур), а имя файла в этом случае используется как имя команды.

      Переменные командного интерпретатора. Для обозначения переменных Shell используется последовательность букв, цифр и символов подчеркивания; переменные не могут начинаться с цифры. Присваивание значений переменным проводится с использованием знака = , например, РS2 = '<' . Для обращения к значению переменной перед ее именем ставится знак $. Их можно разделить на следующие группы:

      - позиционные переменные вида $n, где n - целое число;

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

      Простые переменные. Shell присваивает значения переменным:

      Здесь переменной x присвоено значение z.

      Позиционные переменные.Переменные вида $n, где n - целое число, используются для идентификации позиций элементов в командной строке с помощью номеров, начиная с нуля. Например, в командной строке саt text_1 text_2. text_9 аргументы идентифицируются параметрами $1. $9. Для имени команды всегда используется S0. В данном случае $0 - это саt, $1 - text_1, $2 - text_2 и т.д. Для присваивания значений позиционным переменным используется команда set, например: set arg_1 arg_2. arg_9. Здесь $1 присваивается значение аргумента arg_1, $2 - arg_2 и т.д.

      Для доступа к аргументам используется команда echo, например:

      arg_1 arg_2 arg_9

      Для получения информации обо всех аргументах (включая последний) используют метасимвол *. Пример:

      echo $*

      arg_2 arg_3 . arg_10 arg_11 arg_12

      С помощью позиционных переменных Shell можно сохранить имя команды и ее аргументы. При выполнении команды интерпретатор Shell должен передать ей аргументы, порядок которых может регулироваться также с помощью позиционных переменных.

      - – текущие флаги интерпретатора (установка флагов может быть изменена командой set);

      ? – код возврата последней выполняемой команды;

      $ – числовой идентификатор текущего процесса PID;

      ! – PID последнего фонового процесса.

      Арифметические операции. Команда expr (express -- выражать) вычисляет выражение expression и записывает результат в стандартный вывод. Элементы выражения разделяются пробелами; символы, имеющие специальный смысл в командном языке, нужно экранировать. Строки, содержащие специальные символы, заключают в апострофы. Используя команду expr, можно выполнять сложение, вычитание, умножение, деление, взятие остатка, сопоставление символов и т. д.

      a=` expr 200 - $b`, где ` - обратная кавычка (левая верхняя клавиша).

      Умножение *, деление /, взятие остатка %:

      d=` expr $a + 125 "*" 10`

      c=` expr $d % 13`

      Здесь знак умножения заключается в двойные кавычки, чтобы интерпретатор не воспринимал его как метасимвол. Во второй строке переменной присваивается значение остатка от деления переменной d на 13.

      Сопоставление символов с указанием числа совпадающих символов:

      concur=` expr "abcdefgh" : "abcde"`

      echo $concur

      В результате получим число 5.

      Операция сопоставления обозначается двоеточием (:). Результат - переменная соncur.

      Подсчет числа символов в цепочках символов. Операция выполняется с использованием функции length в команде expr:

      chain="The program is written in Assembler"

      str=` expr length "$chain"`

      echo $str

      В результате получим число 35. Здесь результат подсчета обозначен переменной str.

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

      cd [dir] - назначение текущего каталога;

      exec [cmd [arg. ]] <имя файла> - выполнение команды, заданной аргументами cmd и arg, путем вызова соответствующего выполняемого файла;

      umask [ -o | -s] [nnn] - устанавливает маску создания файла (маску режимов доступа создаваемого файла, равную восьмеричному числу nnn: 3 восьмеричных цифры для пользователя, группы и других). Если аргумент nnn отсутствует, то команда сообщает текущее значение маски. При наличии флага -o маска выводится в восьмеричном виде, при наличии флага -s - в символьном представлении;

      set, unset - режим работы интерпретатора, присваивание значений параметрам;

      eval [ -arg] - вычисление и выполнение команды;

      sh <filename.sh> выполнение командного файла filename.sh;

      exit [n] - приводит к прекращению выполнения программы, возвращает код возврата, равный нулю, в вызывающую программу;

      trap [cmd] [cond] - перехват сигналов прерывания, где: cmd - выполняемая команда; cond=0 или EXIT - в этом случае команда cmd выполняется при завершении интерпретатора; cond=ERR - команда cmd выполняется при обнаружении ошибки; cond - символьное или числовое обозначение сигнала, в этом случае команда cmd выполняется при приходе этого сигнала;

      export [name [=word]. ] - включение в среду. Команда export объявляет, что переменные name будут включаться в среду всех вызываемых впоследствии команд;

      wait [n] - ожидание завершения процесса. Команда без аргументов ожидает завершения процессов, запущенных синхронно. Если указан числовой аргумент n, то wait ожидает фоновый процесс с номером n;

      read name - команда вводит строку со стандартного ввода и присваивает прочитанные слова переменным, заданным аргументами name.

      Пример. Пусть имеется shell-файл data, содержащий две команды:

      echo -n "Please write down your name:"

      Программа ожидает ввода с клавиатуры (в данном случае - фамилии пользователя). После ввода фамилии и нажатия клавиши Enter команда выполнится и на следующей строке появится знак - приглашение.

      Управление программами. Команды true и false служат для установления требуемого кода завершения пpоцесса: true - успешное завершение, код завершения 0; false - неуспешное завершение, код может иметь несколько значений, с помощью которых определяется причина неуспешного завершения.

      Коды завершения команд используются для принятия решения о дальнейших действиях в операторах цикла while и until и в условном операторе if. Многие команды LINUX вырабатывают код завершения только для поддержки этих операторов.

      Условный оператор if проверяет значение выражения. Если оно равно true, Shell выполняет следующий за if оператор, если false, то следующий оператор пропускается. Формат оператора if:

      Команда test (проверить) используется с условным оператором if и операторами циклов. Действия при этом зависят от кода возврата test. Test проводит анализ файлов, числовых значений, цепочек символов. Нулевой код выдается, если при проверке результат положителен, ненулевой код при отрицательном результате проверки.

      В случае анализа файлов синтаксис команды следующий: test [ -rwfds] file, где

      -r – файл существует и его можно прочитать (код завершения 0);

      -w – файл существует и в него можно записывать;

      -f – файл существует и не является каталогом;

      -d – файл существует и является каталогом;

      -s – размер файла отличен от нуля.

      При анализе числовых значений команда test проверяет, истинно ли данное отношение, например, равны ли А и В. Сравнение выполняется в формате:

      test A -ge B эквивалентно А >= В

      Отношения слева используются для числовых данных, справа – для символов. Кроме команды test имеются еще некоторые средства для проверки:

      ! - операция отрицания инвертирует значение выражения, например, выражение if test true эквивалентно выражению if test ! false;

      o - двуместная операция "ИЛИ" (or) дает значение true, если один из операндов имеет значение true;

      a - двуместная операция "И" (and) дает значение true, если оба операнда имеют значение true.

      Циклы. Оператор цикла с условием while true и while false. Команда while (пока) формирует циклы, которые выполняются до тех пор, пока команда while определяет значение следующего за ним выражения как true или false. Фоpмат оператора цикла с условием while true:

      while list1

      Здесь list1 и list2 - списки команд. While проверяет код возврата списка команд, стоящих после while, и если его значение равно 0, то выполняются команды, стоящие между do и done. Оператор цикла с условием while false имеет формат:

      until list1

      В отличие от предыдущего случая условием выполнения команд между do и done является ненулевое значение возврата. Программный цикл может быть размещен внутри другого цикла (вложенный цикл). Оператор break прерывает ближайший к нему цикл. Если в программу ввести оператор break с уровнем 2 (break 2), то это обеспечит выход за пределы двух циклов и завершение программы.

      Оператор continue передает управление ближайшему в цикле оператору while.

      Оператор цикла с перечислением for:

      for name in [wordlist]

      где name - переменная; wordlist - последовательность слов; list - список команд. Переменная name получает значение первого слова последовательности wordlist, после этого выполняется список команд, стоящий между do и done. Затем name получает значение второго слова wordlist и снова выполняется список list. Выполнение прекращается после того, как кончится список wordlist.

      Ветвление по многим направлениям case. Команда case обеспечивает ветвление по многим направлениям в зависимости от значений аргументов команды. Формат:

      case <string> in

      3десь list1, list2 . listn - список команд. Производится сравнение шаблона string с шаблонами s1, s2 . sk . sn. При совпадении выполняется список команд, стоящий между текущим шаблоном sk и соответствующими знаками ;;. Пример:

      echo -n 'Please, write down your age'

      case $age in

      test $age -le 20) echo 'you are so young' ;;

      test $age -le 40) echo 'you are still young' ;;

      test $age -le 70) echo 'you are too young' ;;

      *)echo 'Please, write down once more'

      В конце текста помещена звездочка * на случай неправильного ввода числа.

      Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

      Читайте также: