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

Забродин УНИХ основы командного интерфейса 2010

.pdf
Скачиваний:
159
Добавлен:
16.08.2013
Размер:
1.33 Mб
Скачать

4.Создайте два новых параллельных подкаталога.

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

6.Просмотрите содержимое файлов с частично совпадающими именами с использованием механизма генерации имен файлов.

7.С использованием механизма генерации имен файлов слейте содержимое всех файлов в один и поместите его в HOME-каталог. Проанализируйте содержание файла.

8.Создайте ссылку с другим именем в одном из подкаталогов на один из файлов другого подкаталога. Проанализируйте и сравните все атрибуты связанных файлов. Объясните отличия.

9.Создайте еще одну ссылку с другим именем. Проанализируйте и сравните все атрибуты связанных файлов. Объясните отличия.

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

11.Измените содержимое одного из связанных файлов. Проанализируйте содержимое других связанных с ним файлов (или файла). Объясните результат.

12.Уничтожьте один из связанных файлов. Проанализируйте и сравните все атрибуты связанных с ним файлов. Объясните изменения.

13.Упорядочите по алфавиту строки суммарного файла HOME-каталога.

14.Обновите временные характеристики одного из существующих файлов. Проанализируйте результат.

15.Обновите временные характеристики несуществующего файла. Проанализируйте результат работы команды.

16.Проанализируйте с использованием команды history содержание лабораторной работы, продумайте ответы на нижеприведенные контрольные вопросы.

81

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

1.Назовите известные Вам способы создания пустых файлов. Как создать текстовый файл?

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

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

4.Какими способами можно объединить несколько текстовых файлов в один?

5.В чем разница работы команд cp и mv?

6.Сколько ссылок можно создать на единственный файл из разных каталогов?

7.Как создать несколько ссылок с совпадающими именами на несколько файлов в другом каталоге?

8.Какое соответствие атрибутов имеют связанные между собой файлы?

9.На какой атрибут и как влияет удаление одного из связанных файлов?

10.Как отражается на содержимом связанных файлов изменение содержания одного из них и почему?

11.Какими возможностями обладает команда sort?

Работа 4. УПРАВЛЕНИЕ ПРАВАМИ ДОСТУПА К ФАЙЛАМ И КАТАЛОГАМ

Посвящена изучению принципов защиты файлов и каталогов ОС UNIX от несанкционированного доступа. В UNIX эти средства являются встроенными и наиболее развиты по сравнению с другими операционными системами. Изучаются вопросы влияния задаваемых прав доступа к файлу на выполнение различных команд по обработке этих файлов.

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

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

82

МЕТОДИКА ВЫПОЛНЕНИЯ

1.Создайте в Вашем HOME-каталоге один текстовый файл, например с именем f1. Выведите на экран полный листинг каталога.

2.Проанализируйте и умейте объяснить, какие права доступа к f1 имеет владелец файла, его группа и остальные пользователи.

3.Проанализируйте права доступа к Вашему головному каталогу. Есть ли ограничения на работу с файлами в этом каталоге?

4.Выведите на экран содержимое файла f1. Объясните, почему операция выполнилась успешно.

5.Запретите права на чтение f1 владельцу и группе. Попытайтесь вывести на экран текст файла. Объясните, почему операция не выполняется.

6.Удалите права на запись в файл. Попытайтесь добавить к файлу текст и удалить его. Объясните результат.

7.Удалите право на модификацию каталога. Повторите операцию удаления. Объясните результат.

8.Создайте подкаталог. Разместите в нем текстовый файл. Проанализируйте права доступа к подкаталогу и объясните возможности по использованию подкаталога.

9.Удалите право владельца на «выполнение» подкаталога.

10.Попытайтесь сделать подкаталог текущим. Объясните результат.

11.Просмотрите содержимое подкаталога. Объясните результат.

12.Попытайтесь вывести длинный листинг подкаталога только для одного из файлов (поиск файла по подкаталогу). Объясните результат.

13.Попытайтесь вывести на экран содержимое файла. Объясните результат.

14.Верните право для подкаталога на «выполнение», удалите право на «чтение» и сохраните право на «модификацию».

15.Выполните пп. 10, 11, 12, 13. Проанализируйте и объясните результаты.

16.Проанализируйте с использованием команды history содержание лабораторной работы, продумайте ответы на нижеприведенные контрольные вопросы.

83

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

1.Как кодируются в атрибутах файла и каталога права доступа?

2.Кто может пользоваться и изменять права доступа к файлам?

3.Какие команды для изменения символьных кодов прав доступа Вы знаете? Перечислите и расскажите о назначении каждой из команд.

4.В чем разница в применении команд chmod и umask?

5.Какие команды обработки файлов разрешают (или запрещают) права на чтение, модификацию и исполнение?

6.Какие команды обработки каталогов разрешают (или запрещают) эти же права?

7.Что означает право на выполнение применительно к каталогу?

8.Какими правами надо обладать, чтобы удалить файл или каталог?

9.Какие команды для защиты файлов Вы знаете?

Работа 5. УПРАВЛЕНИЕ ПРОЦЕССАМИ

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

Изучаются команды:

ps — запрос информации о процессах текущего терминала; & — запуск фонового процесса;

fg, bg — переводит процесс в активный или фоновый режим; jobs — запрос листинга списка заданий;

nohup — защита фоновых процессов от прерывания выполнения при выходе из сеанса работы с системой;

nice — понижение приоритета процесса; kill — прекращение выполнения процесса.

МЕТОДИКА ВЫПОЛНЕНИЯ

1.Вывести на экран листинг характеристик (в длинном и коротком форматах) процессов, инициализированных с Вашего терминала. Проанализировать и объяснить содержание каждого поля сообщения.

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

84

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

3.Выполнить п. 1. Объяснить изменения в листинге харатеристик процессов. Объясните содержание PID и PPID.

4.Понизьте значение приоритета процедуры. На что и как повлияет эта операция при управлением вычислительным процессом системы? Как отразятся её результаты в описателях процессов?

5.Проанализируйте листинг процессов. Какой процесс является родительским для процедуры?

6.Выйдите из системы и войдите заново. Проанализируйте листинг процессов. Объясните изменения в системе.

7.Запустите процедуру в фоновом режиме, но предусмотрите её защиту от прерывания при выходе из системы.

8.Выполните п. 6. Объясните изменения PPID-процедуры.

9.Завершите выполнение процесса процедуры.

10.Запустите процедуру в оперативном режиме с перенаправлением вывода в соответствующий файл.

11.Переведите задание с процедурой в фоновый режим и проанализируйте сообщение на экране.

12.Переведите задание с процедурой в оперативный режим и проанализируйте сообщение на экране.

13.Завершите выполнение процедуры и проанализируйте сообщение на экране.

14.Проанализируйте с использованием команды history содержание лабораторной работы, продумайте ответы на нижеприведенные контрольные вопросы.

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

1.Объясните понятия процесса и ресурса. Какое их значение в организации вычислительного процесса в ОС UNIX?

2.Какая информация содержится в описателях процессов? Как просмотреть их содержание в процессе работы с системой?

3.Какими способами можно организовать выполнение программ в фоновом режиме?

4.Какие особенности выполнения программ в фоновом режиме? Как избежать вывода фоновых сообщений на экран и прерыва-

85

ния выполнения фоновых программ при прекращении сеанса работы с системой?

5.Как пользователь может повлиять на распределение ресурсов между активными процессами?

6.Как можно прервать выполнение активных процессов? Какая информация для этого необходима и откуда она извлекается?

7. ВВЕДЕНИЕ В SHELLПРОГРАММИРОВАНИЕ.

ПЕРЕМЕННЫЕ SHELL

7.1. ПОНЯТИЕ ПРОЦЕДУР

Язык shell по своим возможностям приближается к высокоуровневым алгоритмическим языкам программирования. Операторы языка shell позволяют создавать собственные программы. В программах могут использоваться любые команды командного языка, в том числе и рассмотренные в данном пособии.

Такие программы, а также командные файлы, содержащие их, называют shell-процедурами или shell-файлами. От обычных программ они отличаются способом их обработки. Процедура не требует компиляции, построения объектного файла и последующей компоновки, так как shell, обрабатывающий их, является транслятором интерпретирующего, а не компилирующего типа. Процедура — аналог командного файла в MS-DOS, но с более широкими возможностями. Здесь же отметим, что рассмотренные ниже операторы могут быть использованы как в теле процедуры, так и выполнены независимо как обычные команды операционной системы в диалоговом режиме.

Текст процедуры набирается как обычный текстовый файл. Для этих целей при создании большой процедуры целесообразно использовать редактор vi. Для создания простейших процедур можно использовать команду cat или один из следующих способов создания пустых файлов с последующим заполнением командами ОС или операторами языка shell.

86

Проверенный и отлаженный shell-файл может быть вызван на исполнение, например, следующим способом:

$ chmod u=rx shfil $ shfil

$

Для выполнения процедуры необходимы права r,x; обычно право r задается администратором, так как файлы должны быть читаемы, тогда опция может иметь вид u+x.

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

Можно использовать также и следующий способ:

$ sh -c "shfil"

или

$ sh shfil

# Здесь файл shfil предполагается читаемым для shell, т.е. иметь право r.

В этих случаях по команде sh вызывается вторичный интерпретатор shell, и в качестве аргумента ему передается командная строка, содержащая имя файла процедуры shfil, находящегося в текущем каталоге. Однако этот способ накладывает ограничения на исполнение некоторых команд ОС управления процессами (например, nice – см. ниже).

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

$ имя_процедуры $1 $2 ...$9

$

Каждому из девяти первых аргументов командной строки в тексте процедуры соответствует один из позиционных параметров, имеющий соответствующий номер занимаемой им позиции в коде команды $1, $2, ..., $9. Параметр $0 соответствует имени самой процедуры, т.е. первому полю командной строки. К каждому из 10 первых аргументов можно обратиться из процедуры, указав номер его позиции.

87

Некоторые вспомогательные операторы:

echo — вывод сообщений из текста процедуры на экран.

$ echo “начало строки > продолжение строки” или

$ echo “строка текста”

$

# — для обозначения строки комментария в процедуре.

(Строка не будет обрабатываться shell.)

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

$banner 'hello ira' HELLO IRA

$

Простейший пример. Здесь оператор echo выполняется также в командном режиме. На экран выводится третий параметр, передаваемый процедуре при ее запуске:

$shfil p1 pp2 petr $echo $3

petr

$

Значения параметрам, передаваемым процедуре, можно присваивать и в процессе работы процедуры с помощью оператора

set — присвоить значения позиционным параметрам.

Пример:

$set a1 ab2 abc $echo $1 $2 a1 ab2

$

В этом примере параметры указываются в явном виде. Количество позиционных параметров может быть увеличено до необходимого значения путем “сдвига” их в командной строке влево на одну позицию с помощью команды shift без аргументов:

shift — сдвинутьпозиционные параметры влево на одну позицию.

88

После выполнения shift прежнее значение параметра $1 теряется, значение $1 приобретает значение $2, значение $2 — значение $3 и т.д.

Продолжение предыдущего примера:

$shift $echo $1 $2 ab2 abc

$

В UNIX при написании командных строк и в shell-процедурах особое значение имеет правильное использование кавычек (апострофов):

'...' — для блокирования полного набора специальных символов, которые могут быть интерпретированы как управляющие;

"..." — для блокирования некоторых символов, которые могут использоваться в именах переменных или для указания того, что обрабатывается не сам аргумент, а его значение (подстановка значения), в частности не блокируют $, `…`,\ ;

`...` — (обратные кавычки или знак ударения) для указания того, что они обрамляют команду, и здесь будет обрабатываться результат работы этой команды (подстановка результатов работы указанной команды).

Пример 1: $ date

Apr 3 14:27:07 2007 $ set `date`

$ echo $3 14:30:25

$

Пример 2: $echo `ls` fil.1

fil.2

...

$echo '`ls`' `ls`

$

89

Здесь одинарные кавычки блокируют действие обратных кавычек, т.е. они распечатываются как обычные символы.

Пример 3.

$ls -al|grep “Mar 30”

#выводится информация о всех файлах текущего каталога, модифицированных

# 30 марта всех годов.

Эта же командная строка без кавычек приобретает совершенно другой смысл:

$ls -al|grep Mar 30

#здесь Mar –шаблон, а 30 – имя файла.

Для ввода строки текста со стандартного устройства ввода используется оператор:

read имя1 [имя2 имя3 .] — чтение строки слов со стандартного устройства ввода.

Команда вводит строку, состоящую из нескольких полей (слов), со стандартного ввода, заводит переменную для каждого поля и присваивает первой переменной имя1, второй переменной — имя2, и т.д. Если имен больше, чем полей в строке, то оставшиеся переменные будут инициализированы пустым значением. Если полей больше, чем имен переменных, то последней переменной будет присвоена подстрока введенной строки, содержащая все оставшиеся поля, включая разделители между ними. В частности, если имя указано только одно, то соответствующей ему переменной присваивается значение всей строки целиком. Образованные таким образом переменные далее могут обрабатываться процедурой или отдельными командами ОС.

Пример (предполагает наличие программы-русификатора):

#Текст процедуры:

echo "Введите значения текущих: гг мм чч вв" read 1v 2v 3v

echo "год 1v" echo "месяц 2v" echo "сегодня 3v"

# здесь кавычки используются для блокирования пробелов

#Результат выполнения процедуры:

Введите значения текущих: гг мм ччвв

2009 Maрт 21 9:30 <Enter> год 2009

месяц Maрт сегодня 21 9:30

90