Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

PytPajB0Au

.pdf
Скачиваний:
1
Добавлен:
15.04.2023
Размер:
1.54 Mб
Скачать

Как правило, но не всегда, первое слово (т.е. последовательность символов до пробела, табуляции или конца строки) shell воспринимает, как команду. Поэтому в командной строке:

cat cat

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

Shell имеет специальные средства группировки команд:

«;» и «перевод строки» определяют последовательное выполнение команд;

& асинхронное (фоновое) выполнение предшествующей команды;

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

|| выполнение последующей команды при ненормальном за-

вершении предыдущей, иначе игнорировать.

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

Для группировки команд также могут использоваться фигурные "{}" и круглые "()" скобки.

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

k1 && k2; k3,

где k1, k2 и k3 - некоторые команды. В этом случае "k2" будет выполнена только при успешном завершении "k1"; после любого из исходов обработки "k2" (т.е. "k2" либо будет выполнена, либо пропущена) будет выполнена "k3".

Если введена командная строка: k1 && {k2; k3},

то обе команды ("k2" и "k3") будут выполнены только при успешном завершении "k1".

Для командной стоки:

{k1; k2} &

в фоновом режиме будет выполняться последовательность команд

"k1" и "k2".

Стандартный поток ввода (вход) - "stdin" в ОС UNIX осуществляется с клавиатуры терминала, а стандартный поток вывода (выход) - "stdout" направлен на экран терминала. Существует еще и стандартный поток ошибок (файл диагностических сообщений) - "stderr".

Команда, которая может работать со стандартным входом и выходом, называется ФИЛЬТРОМ.

10

Пользователь имеет удобные средства перенаправления ввода и вывода на другие файлы (устройства). Символы ">" и ">>" обозначают перенаправление вывода.

Например, при вводе командной строки вида: ls >f1

команда "ls" сформирует список файлов текущего каталога и поместит его в файл "f1" (вместо выдачи на экран). Если файл "f1" до этого не существовал, то он будет создан. Если файл "f1" существовал, то его содержимое будет затерто новым.

Для командной строки вида: pwd >>f1

команда "pwd" сформирует полное имя текущего каталога и поместит его в конец файла "f1", т.е. ">>" добавляет в файл, если он непустой (если файл не существовал до этого, то он будет создан).

Символы "<" и "<<" обозначают перенаправление ввода. Например, такая командная строка:

wc -l <f1

подсчитает и выдаст на экран число строк в файле "f1". Можно сочетать перенаправления. Например, строки: wc -l <f3 >f4

и

wc -l >f4 <f3

выполняются одинаково: подсчитывается число строк файла "f3" и результат помещается в файл "f4".

Средство, объединяющее стандартный выход одной команды со стандартным входом другой, называется КОНВЕЙЕРОМ и обозначается вертикальной чертой "|".

При выполнении строки: ls | wc -l

список файлов текущего каталога будет направлен на вход команды "wc", которая на экран выведет число строк полученной информации.

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

cat f1 | grep -h result | sort | cat -b > f2

Данный конвейер из файла "f1" (команда "cat") выберет все строки, содержащие слово "result" (команда "grep"), отсортирует (команда "sort") полученные строки, а затем пронумерует (команда "cat -b") и выведет результат в файл "f2".

Поскольку устройства в ОС UNIX представлены специальными файлами, их можно использовать для перенаправления. Специальные файлы находятся в каталоге "/dev".

Например:

"lp" - печать;

11

"console" - консоль;

"ttyi" - i-ый терминал;

"null" - фиктивный (пустой) файл (устройство);

"stdin" — поток ввода и т.д.

Тогда, например, команда ls > /dev/lp

выведет содержимое текущего каталога на печать, а команда f1 < /dev/null

обнулит файл "f1".

При генерации имен используют метасимволы:

произвольная (возможно пустая) последовательность символов;

? один произвольный символ;

[...] любой из символов, указанных в скобках перечислением

и/или с указанием диапазона; Примеры генерации имен с применением метасимволов:

cat f* выдаст все файлы каталога, начинающиеся с "f";

cat *f* выдаст все файлы, содержащие "f";

cat program.? выдаст файлы данного каталога с однобуквенными расширениями, например "program.c" и "program.o", но не выдаст "program.com";

cat [a-d]* выдаст файлы, которые начинаются с "a", "b", "c", "d". К такому же результату приведет и выполнение команд

"cat [abcd]*" и "cat [bdac]*".

Вопросы для самопроверки:

1.Что можно считать формальным признаком того, что задается полное имя файла?

2.Различаются ли в именах файлов большие и маленькие буквы в UNIX-подобных операционных системах?

3.Какие действия выполняет командная строка вида: «pwd >>f1» ?

4.С помощью какой командной строки можно подсчитать и выдать на экран число строк в файле "f1" ?

5.Что называется конвейером и обозначается вертикальной чертой "|" ?

Литература

1.Кондратьев В.К. Введение в операционные системы [Электронный ресурс]: учебное пособие. М.: Московский государственный университет экономики, статистики и информатики, 2007. 231 с. URL: http://biblioclub.ru/index.php?page=book&id=90922 (дата обращения:

20.12.2017).

12

2.Назаров С.В., Широков А.И. Современные операционные системы [Электронный ресурс]: учебное пособие. Интернет-Университет Ин-

формационных Технологий, 2011. 280 с. URL: http://biblioclub.ru/ index.php?page=book&id=233197 (дата обращения: 20.12.2017).

3.Робачевский А.М., Немюгин С.А., Стесик О.Л. Операционная система UNIX. Санкт-Петербург: БХВ-Петербург, 2014. 635 с.

13

2.ТИПЫ ФАЙЛОВ В UNIX

ВUNIX существуют 6 типов файлов, различающихся по функциональному назначению и действиям операционной системы при выполнении тех или иных операций над файлами:

Обычный файл (regular file)

Каталог (directory)

Специальный файл устройства (special device file)

Ссылка (link)

FIFO или именованный канал (named pipe)

Сокет (socket)

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

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

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

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

Указатели представляют собой просто номера входов (строк) в специальной системной таблице, содержащей индексные дескрипторы файла (i-node). Обычному пользователю UNIX не обязательно знать об их существовании, однако знакомство с внутренним устройством каталога окажется полезным для того, чтобы разобраться, что такое связь и какие типы связей существуют в UNIX.

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

14

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

По существу каталог представляет собой таблицу, каждая запись которой соответствует некоторому файлу. Первое поле каждой записи содержит указатель на метаданные (номер i-node), а второе определяет имя файла. Пример некоторого каталога представлен в таблице 1.

 

Таблица 1. Внутренняя структура каталога

i-node

Имя файла

 

 

12

.

 

 

178

..

 

 

54

first_file

 

 

65

second_file

 

 

77

dir2

 

 

В любом каталоге содержатся два стандартных имени - "." и "..". Имени "." сопоставляется i-node, соответствующий самому этому каталогу, а имени ".." - i-node, соответствующий родительскому каталогу данного каталога.

Родительским (parent) каталогом называется каталог, в котором содержится имя данного каталога. Файлы с именами "first_file" и "second_file" - это разные файлы с номерами i-node 54 и 65 соответственно. Последний элемент каталога описывает некоторый другой каталог с име-

нем "dir2".

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

1.символьные, или байт-ориентированные, файлы (character files), обеспечивающие небуферизированный (посимвольный) обмен данными;

2.блочные, или блок-ориентированные, файлы (block files), обеспечивающие буферизированный обмен данными, когда пакеты данных, передаваемых на устройство или считываемых с него, состоят из набора символов.

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

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

15

метаданным. Сами метаданные файла, находящиеся в системной таблице, не содержат его имени. Это значит, что возможна такая ситуация, когда в разных каталогах для разных имен файлов имеются ссылки на одни и те же метаданные (одну строку в системной таблице).

В этом случае доступ к одному и тому же файлу можно получить с помощью разных имен, иначе говоря, один файл может иметь несколько имен. Говорят, что несколько различных имен жестко связаны с одним и тем же набором данных на диске. Эта связь так и называется жесткой связью. Рассмотрим пример жесткой связи. Пусть в системе существует 2 каталога со следующей структурой, представленной в таблице 2.

 

 

Таблица 2. Структура каталогов со ссылками

i-node

Имя файла

 

i-node

Имя файла

 

 

 

 

 

12

.

 

3300

.

 

 

 

 

 

178

..

 

17

..

 

 

 

 

 

54

first_file

 

250

dir3

 

 

 

 

 

65

second_file

<—

65

second_again

 

 

 

 

 

77

dir2

 

 

 

 

 

 

 

 

Сточки зрения пользователя в файловой системе появляются 2 файла с именами second_file и second_again, однако их атрибуты (такие, как права доступа, владелец и т.д.) будут одинаковыми. Внесение изменений в один из файлов приведет к появлению тех же самых изменений и в другом файле.

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

Другая разновидность связей - это символические связи (или ссылки). Символическая ссылка указывает на какой-либо другой файл. В файле данного типа содержится только абсолютное имя целевого файла, поэтому размер файла-ссылки небольшой. Символическая связь обеспечивает косвенную адресацию файла. Файлу и символической ссылке на него соответствуют различные индексные дескрипторы. Если удаляется файл, на который указывает ссылка, сама ссылка остается.

FIFO (от First In First Out - первый вошел - первый вышел) или именованный канал используется для организации обмена данными между процессами.

16

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

Вопросы для самопроверки:

1.Какие типы файлов существуют в UNIX-подобных операционных системах?

2.В чем состоит их основное отличие?

3.Какие типы связей файлов существуют в UNIX-подобных операционных системах?

4.В чем принципиальное отличие различных типов связей файлов с точки зрения организации файловой системы?

5.Как устроен каталог в в UNIX-подобных операционных системах?

6.Какой каталог называется родительским?

7.Что такое i-node, и каково его назначение?

8.Как задается i-node?

Литература

1.Кондратьев В.К. Введение в операционные системы [Электронный ресурс]: учебное пособие. М.: Московский государственный университет экономики, статистики и информатики, 2007. 231 с. URL: http://biblioclub.ru/index.php?page=book&id=90922 (дата обращения:

20.12.2017).

2.Кондратьев В.К., Головина О.С. Операционные системы и оболочки [Электронный ресурс]: учебно-практическое пособие. М.: Московский государственный университет экономики, статистики и инфор-

матики, 2007. 172 с. URL: http://biblioclub.ru/index.php?page=book&id

=90663 (дата обращения: 20.12.2017).

3.Назаров С.В., Широков А.И. Современные операционные системы [Электронный ресурс]: учебное пособие. Интернет-Университет Ин-

формационных Технологий, 2011. 280 с. URL: http://biblioclub.ru/ index.php?page=book&id=233197 (дата обращения: 20.12.2017).

4.Робачевский А.М., Немюгин С.А., Стесик О.Л. Операционная система UNIX. Санкт-Петербург: БХВ-Петербург, 2014. 635 с.

5.Олифер В.Г., Олифер В.А. Сетевые операционные системы: учеб. пособие для вузов. 2-е изд. СПб.: Питер, 2009. 669 с.

6.Официальный сайт FreeBSD [Электронный ресурс]. URL: https://www.freebsd.org/ (дата обращения: 20.12.2017).

17

3. СЦЕНАРИЙ. ОСНОВНЫЕ КОМАНДЫ РАБОТЫ С ФАЙЛОВОЙ СИСТЕМОЙ В SHELL

В данном разделе будет описана процедура практической работы с командным языком shell. Практические рекомендации, которые даются здесь и далее могут немного отличаться для вашей вычислительной системы, однако, общая последовательность и логика действий остаются примерно одинаковыми для большинства популярных UNIX-подобных систем. Чтобы узнать версию вашей системы UNIX обратитесь к системному администратору.

Для начала запустите shell (правой кнопкой мыши на рабочем столе, «Открыть терминал...»).

Выполняйте команды в следующем порядке:

1.date – просмотр текущей даты;

2.pwd – вывод абсолютного имени текущего каталога;

3.ls – просмотр содержимого текущего каталога;

4.ls -a – просмотр содержимого текущего каталога (выводятся и системные файлы);

5.ls -l – просмотр содержимого текущего каталога в длинном формате. Результат выполнения команды может иметь подобный вид:

-rw-r--r-- 1 tar_stud wheel 6 Dec 1 10:05 qwe drwxr--r-- 1 tar_stud wheel 5 Apr 15 2008 s2

,где колонки означают следующее:

права доступа (drwxr—r--) -- первый символ отвечает за тип файла («-» - обычный файл, «d» - каталог, и т.п.)

количество ссылок на файл (1)

имя владельца файла (tar_stud)

имя группы-владельца файла (wheel)

размер в байтах

дата последнего изменения файла (если прошло меньше года, то вместо года выводится время).

имя файла

Атрибутов у файлов гораздо больше. Вывести их можно с помощью других ключей команды «ls» (см. справку по команде «ls» - команда «man ls», перемещение по справке построчно - клавиши «вверх» и «вниз», клавиша «пробел» - переход к следующей странице, клавиша «q» - досрочный выход из справки).

Например, чтобы добавить к выводу информацию о номере i-node файла, введите команду «ls -li».

Для закрепления навыков работы с командами shell выполните и проанализируйте результаты выполнения следующего списка команд:

1. ls -al – вывод в полном формате всех файлов текущего каталога

18

2.ls -lt – вывод в полном формате содержимого текущего катало-

га, отсортированного не по алфавиту (режим по умолчанию), а

по времени последнего изменения

3.ls -ltr – то же, что и в предыдущем пункте, но в обратном по-

рядке

4.cd – переход в корневой каталог

5.pwd

6.ls -l

7.ls -lR – рекурсивный вывод в полном формате (в данном случае всего содержимого диска, так как мы находимся в корневом каталоге)

8.ls -l /home – вывод содержимого каталога /home

9.cd – переход в домашний каталог

10.pwd

11.mkdir test – создание каталога test

12.cd test – переход в каталог test

13.pwd

14.ls -al

15.echo Hello >f -- вывод строки Hello в файл f (так как файл не существовал, то он создатся)

16.ls -l

17.cat f – вывод содержимого файла f на экран

18.cp f f2 – копируем файл f в файл f2

19.ls -l (сколько ссылок у файлов?)

20.cat f2

21.ln f zh_f – создание жесткой ссылки zh_f на файл f

22.ls -l (посмотрите как изменилась колонка “Количество ссы-

лок”)

23.cat zh_f

19

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]