287649
.pdfТретий режим доступа к сервисам UNIX основан на ftpпротоколе. В данном режиме можно получать доступ к данным MVS и UNIX.
2.ПРАКТИЧЕСКАЯ ЧАСТЬ
2.1.Запуск оболочки Shell системных сервисов UNIX
Запустите эмулятор терминала 3270 и подключитесь к TSO (Time Sharing Option), используя логин TSO ID, выданный преподавателем. Введите пароль и запустите интерфейс системных сервисов OS/390 UNIX Shell. Если процедура подключения не вызвала интерфейс ISPF, вы должны увидеть на экране командную строку TSO READY. Если же процедура подключения вызвала интерфейс ISPF, то вы увидите на экране следующий текст:
ISPF Rrimary |
Option Menu |
|
0 |
Settings |
Terminal and user parameters |
1 |
View |
Display source data or listings |
2 |
Edit |
Create or change source data |
3 |
Utilities |
Perform utility functions |
4 |
Foreground |
Interactive language processing |
5 |
Batch |
Submit job for language processing |
6 |
Command |
Enter TSO or Workstation commands |
7 |
Dialog Test |
Perform dialog testing |
9 |
IBM Products |
IBM program development products |
10 |
SCLM |
SW Configuration Library Manager |
11 |
Workplace |
ISPF Object/Action Workplace |
12 |
z/OS System |
z/OS system programmer applications |
13 |
z/OS User |
z/OS user applications |
Enter X to Terminate using log/list defaults
Если вы видите на экране строку TSO READY, введите команду omvs, чтобы вызвать оболочку системных сервисов UNIX — USS Shell. Находясь в главном меню ISPF, можно либо выйти из ISPF в TSO и затем ввести команду omvs, либо выбрать раздел 6 меню ISPF, и в нем ввести команду omvs. Содержимое окна приветствия оболочки Shell должно быть следующим:
IBM
Licensed Material - Property of IBM
5647-A01 (C) Copyright IBM Corp. 1993, 1997
11
(C) Copyright Mortice Kern Systems, Inc., 1985, 1996.
(C) Copyright Software Development Group, University of Waterloo, 1989. All Rights Reserved.
U.S. Government users - RESTRICTED RIGHTS - Use, Duplication, or Disclosure restricted by GSA-ADP schedule contract with IBM Corp. IBM is a registered trademark of the IBM Corp.
$
===>
INPUT
ESC=ў 1=Help 2=SubCmd 3=HlpRetrn 4=Top 5=Bottom 6=TSO 7=BackScr 8=Scroll 9=NextSess 10=Refresh 11=FwdRetr 12=Retrieve
Определите текущий рабочий каталог с помощью команды pwd. Посмотрите, как называется рабочий каталог и зафиксируйте это в отчете. Найдите корневой каталог.
Замечание. Команды Shell чувствительны к регистру. Выведите все файлы текущего рабочего каталога с помощью
команды ls -a. Определите, сколько элементов было выведено в результате использования предыдущей команды.
Замечание. Если не был выведен ни один элемент, то это потому, что вы не указали опцию -a в качестве параметра команды ls.
Перейдите в родительский каталог домашнего каталога с помощью команды cd/u. Посмотрите, является ли он домашним каталогом. Еще раз введите команду pwd для вывода имени текущего рабочего каталога. Запишите в отчет ответы на следующие вопросы: «Как теперь называется текущий рабочий каталог? Является ли этот каталог домашним каталогом? Изменился ли домашний каталог?»
Выведите все файлы каталога вместе с их атрибутами командой ls -al. Ответы на следующие вопросы должны быть в отчете: «К какому типу относится большинство файлов данного каталога? Как выглядит строка разрешений, присвоенная домашнему каталогу? Как эти разрешения будут выглядеть в восьмеричном представлении? Показан ли на экране номер inode для этих файлов?»
Замечание. Если результаты команды ls -al не помещаются на экран, и экран автоматически прокручивается, используйте клавиши F7 и F8 для прокрутки экрана вручную.
Введите команду ls -ali для вывода номера inode вместе с другой информацией из предыдущего вопроса. Посмотрите, какой
12
inode-номер у вашего домашнего каталога. Для перехода в ваш домашний каталог из корневого каталога /u используйте команды: cd /u/UserName или cd UserName или cd $home или cd.
Замечание. В перечисленных командах UserName — это ваш идентификатор TSO user id в нижнем регистре.
Вернитесь в ваш домашний каталог, используя одну из перечисленных выше команд.
2.2.Работа с файлами и каталогами
2.2.1.Создание и копирование файлов и каталогов
Создайте новый каталог с именем subdir1 из вашего домашнего каталога. Для этого используйте команду mkdir subdir1. Из вашего домашнего каталога создайте еще один каталог под названием subdir2. Перейдите в каталог subdir1 с помощью команды cd subdir1. Создайте в нем файл hobbies с помощью команды touch hobbies и внесите в него следующие данные:
Alex |
Smirnov |
modelling |
student |
Monday |
11.30-12.30 25 |
Jack |
Newman |
sports |
student |
Wednesday |
12.30-13.30 25 |
Mike |
Stollmen |
gaming |
student |
Wednesday |
11.30-12.30 25 |
Jane |
Right |
sports |
doctor |
Thursday |
9.30-10.30 30 |
Helga |
Bloom |
gaming |
student |
Friday |
11.30-12.30 25 |
Для этого воспользуйтесь встроенным редактором oedit, набрав команду oedit hobbies. По окончании редактирования нажмите клавишу F3, чтобы сохранить и закрыть файл. Вернитесь в домашний каталог с помощью команды cd $home.
Просмотрите содержимое файла hobbies. Для этого используйте команду cat subdir1/hobbies. Скопируйте файл hobbies из каталога /u/UserName/subdir1/ в ваш домашний каталог, используя команду cp /u/ UserName/subdir1/hobbies /u/ UserName/. Не изменяйте ваш текущий рабочий каталог.
Перечислите атрибуты вашего нового файла вместе с номером inode. Для этого используйте команду ls -li hobbies.
Посмотрите, какие разрешения установлены для созданного нового файла hobbies. Они должны быть следующими: -rw-rw-rw-.
Выведите содержимое файла hobbies на экран с помощью команды cat hobbies.
13
Создайте файл comics.lst в каталоге subdir2 с помощью редактора oedit, используя команды cd subdir2, oedit. comics.lst, touch comics.lst.
Содержимое файла должно быть следующим:
X-man |
: 123000 |
: weekly |
: Novermber |
Spiderman |
: 12000 |
: monthly |
: October |
Hi-fi color |
: 3000 |
: weekly |
: October |
Ultimates |
: 14000 |
: weekly |
: March |
The Iliad |
: 1020 |
: monthly |
: June |
Скопируйте файл comics.lst из каталога /u/UserName/subdir2 в каталог subdir1. Для этого используйте команду cp /u/UserName /subdir2/comics.lst /u/UserName/subdir1.
Переименуйте ваш подкаталог, присвоив ему новое имя вlinks по команде mv subdir2 links.
Выведите содержимое файла comics.lst с помощью команды cd subdir1 cat comics.lst. Для того чтобы содержимое файла последовательно выводилось на экран, используется команда more comics.lst.
Создайте файл под названием myfile в вашем домашнем каталоге с помощью команды touch, затем выведите атрибуты этого файла. Обратите внимание, что размер этого файла (0) bytes. Введите команду touch для файла hobbies в вашем домашнем каталоге. Команда touch обновляет метку последней даты изменений (timestamp) существующего файла либо создает новый пустой файл.
Посмотрите на время последнего обновления файла myfiles. Для этого используйте команду ls -l > myfiles, которая выведет все файлы из вашего домашнего каталога и перенаправит вывод в файл myfiles.
Добавьте текущие время и дату к содержимому файла с помощью команды date >> myfiles.
Выведите содержимое файла, используя команду cat myfiles.
2.2.2. Жесткие и символические ссылки
Создайте жесткую ссылку с именем hlink в новом каталоге links с помощью команды ln subdir1/comics.lst links/hlink. Эта ссылка должна указывать на файл comics.lst из каталога subdir1.
Выведите номера inode и остальные атрибуты файлов comics.lst и hlink с помощью команды ls -li subdir1/comics.lst links/hlink. Номе-
14
ра inode должны быть одинаковыми так же, как и остальные атрибуты (дата, размер и т. д.). На эти файлы указывают две жесткие ссылки. Посмотрите, сколько сейчас существует файлов, содержащих данные из comics.lst.
Создайте символическую ссылку с именем slink в каталоге links, используя команду ln -s /u/ UserName /subdirl/comics.lst /u/ UserName /links/slink. Эта ссылка должна указывать на comics.lst из каталога subdir1.
Выведите номера inode и другие атрибуты файлов comics.lst и slink с помощью команды ls -li subdir1/comics.lst links/slink. Номера inode так же, как и остальные атрибуты файлов (дата, размер и т. д.), не совпадают.
На файл comics.lst указывают две жесткие ссылки и одна символическая. При этом существует только один файл с данными comics.lst.
Замечание. Жесткая ссылка — это объект каталога, имеющий тот же номер inode, что и исходный файл, являющийся указателем на файл. Символическая ссылка — это файл, содержащий указатель на каталог исходного файла, а не на сам файл.
Создайте новый подкаталог в домашнем каталоге и назовите его newdir, переместите в него файл myfiles, используя команды mkdir newdir и mv myfiles newdir.
Выведите все файлы, подкаталоги и их содержимое, начинающиеся из вашего домашнего каталога, с помощью команды ls -aR.
Скопируйте файл comics.lst в каталог newdir, используя команду cp subdir1/comics.lst newdir.
2.2.3. Удаление файлов, каталогов и ссылок
Рассмотрим состояние символических и жестких ссылок при удалении файла comics.lst. Символическая ссылка останется, но будет указывать на несуществующий файл. Она будет отображаться в списке файлов, содержащихся в каталоге (листинге), но открыть ее будет невозможно. С жесткой ссылкой ничего не произойдет. Останется одна ссылка. С данными на физическом уровне также ничего не случится. Данные сохраняются до тех пор, пока существует хотя бы одна жесткая ссылка на них. Удалите файл comics.lst и проверьте это, используя команду rm subdir1/comics.lst.
15
Если вы скопируете файл comics.lst обратно в каталог subdir1 из каталога /u/ UserName /newdir, символическая ссылка будет переназначена.
С жесткой ссылкой ничего не произойдет. Новая копия файла comics.lst будет иметь другой номер inode, т. е. это будет другой файл.
Если вы скопируете файл comics.lst в ваш домашний каталог, то с символической ссылкой ничего не произойдет. Символическая ссылка будет указывать на каталог subdir1, а не на домашний каталог. Скопируйте файл comics.lst обратно в каталог subdir1 с помощью команды cp /u/ UserName /links/comics.lst /u/ UserName /subdir1.
Попробуйте удалить каталог newdir, применив команду rmdir newdir. Если каталог не пуст, то его можно удалить, не удаляя все его файлы, воспользовавшись командой -r newdir.
2.2.4. Сортировка файлов
Перейдите в домашний каталог. Отсортируйте содержимое файла hobbies из вашего каталога subdir1, не используя опций команды sort subdir1/hobbies. Записи в файле будут отсортированы в алфавитном порядке, по первому символу каждой строки. При этом файл hobbies не изменяется.
Отсортированные данные выводятся только на экран. Отсортируйте файл hobbies, используя второе поле каждой записи с помощью команды sort -k2 subdir1/hobbies.
Снова отсортируйте файл hobbies, используя второе поле каждой записи, но на этот раз укажите в параметрах команды «игнорировать первый символ пробела в любом поле». Для этого примените команды sort -b-ksubdir/hobbies или sort -b +1 subdir1/hobbies.
Посмотрите, корректна ли сортировка на этот раз. Отсортируйте файл hobbies в соответствии с числами в последнем поле каждой записи, используя команды sort -n -k7 subdir1/hobbies или sort -n +6 subdir1/hobbies.
Отсортируйте файл comics.lst из каталога subdir1, а также второе поле файла, используя символ «:» в качестве разделителя полей. Вы-
16
полните это с помощью команд sort -t: -k2 subdir1/comics.lst или sort - t: +1 subdir1/comics.lst.
После выполнения этих команд файл comics.lst будет отсортирован по второму полю, но не в числовом порядке, а в соответствии с кодом ASCII.
Отсортируйте файл comics.lst снова, но в числовом порядке с помощью команды sort -t: -n -k2 subdir1/comics.lst.
2.3. Изучение основных команд оболочки Shell
Командный интерпретатор Shell (в переводе с английского языка shell — оболочка) на диске лежит в каталоге /bin/sh. Когда пользователь вводит команду, командный интерпретатор Shell разбирает командную строку, чтобы выделить команду и ее параметры, и запускает программу, имя которой совпадает с именем команды. Эти программы называются утилитами. Часть команд оболочка Shell выполняет самостоятельно, не вызывая утилит. Чтобы узнать, является ли команда встроенной или она вызывает утилиту, можно ввести команду type <имя команды>. Например, если вы выведете информацию о команде date, используя команду type date, на экране появится следующее сообщение: «Date is cached /bin/date». Это означает, что команда date по сути является утилитой и ее значение кэшируется в каталоге /bin/date для повышения производительности.
Введите команду shell. По этой команде система выводит номер, имя, gid-номер и имя группы. Введите команду date. Используйте TSOкоманду obrowse для просмотра файла hobbies или любого другого текстового файла из вашего домашнего каталога.
Введите команду tty. Данная команда выводит имя файлатерминала из каталога /dev, который предоставляет соединение терминала студента с мейнфреймом. Введите команду logname. Команда logname выводит logon-имя пользователя.
Введите команду env и объясните значение выходных данных. Команда выводит установленные переменные среды и их значения. Исходя из значений переменных среды, будет выводиться на экран определенное число строк текста. Количество выводимых строк определяется переменной lines, обычно оно равно 20. Переменная для
17
хранения домашнего каталога называется home. Посмотрите информацию о других известных вам командах.
Замечание. Для получения справки по синтаксису, параметрам
ифункциям команд shell используйте команду type <имя команды>. Для перемещения по страницам текста используйте клавишу r. Некоторые описания достаточно длинные. Для выхода из окна справки нажмите клавишу F3 — и вы вернетесь в режим командной строки.
Узнайте размер свободного пространства в смонтированной файловой системе, используя команду df. Посмотрите, чему равен размер свободного пространства в вашей файловой системе. Это значение меняется. Результат выводится в блоках (единицах).
Выведите содержимое каталога root с подробной информацией о его компонентах, используя команду ls -l /. Вы можете отличить каталог от файла, поскольку для каталога первый символ в выводимой строке — это «d». Пятое выводимое поле означает размер компонента в байтах.
Выведите содержимое вашего домашнего каталога вместе с номерами inode с помощью команды ls -li /u/ UserName.
Номер inode присваивается системой UNIX для управления файлами.
Выведите содержимое вашего домашнего каталога, перенаправив вывод в файл listout, с помощью следующих команд: cd $home
иls -li > listout. Воспользуйтесь командой cat для просмотра файла listout.
Создайте новый каталог с именем A в каталоге newdir с помощью команды mkdir newdir/Dir1A. Введите команду ls -al newdir/DirlA для просмотра битов разрешения нового каталога.
Биты разрешения для каталога DirlA равны xr-x. Измените биты разрешений для данного каталога так, чтобы владелец каталога имел право чтения, право записи и право выполнения, а члены группы и все остальные пользователи получили только право чтения. Для этого используйте команды: chmod 744 newdir/DirlA или chmod go-x newdir/DirlA.
Отсортируйте содержимое ранее созданного файла listout по значению поля «размер». Перенаправьте вывод результатов в файл sorted. Поместите файл sorted в каталог Dir1A с помощью команды: sort -k5 listout > newdir/DirlA/sorted.
18
Объедините команду вывода содержимого каталога и команду сортировки и создайте последовательность команд (конвейер), позволяющую просмотреть содержимое каталога в отсортированном по размеру порядке: ls -l | sort -k5. Вы не сможете сделать это непосредственно в одной команде.
Для поиска текста в файле hobbies используйте команду grep sports hobbies для вывода только тех записей файла hobbies, которые имеют отношение к записям «sports».
Выведите содержимое каталога /etc, используя команду ls -l /etc. Обратите внимание на поле «дата». Компоненты каталога отличаются по году или месяцу.
Объедините следующие задачи: вывод содержимого каталога /u, выбор записи с месяцем «Feb», сортировка выходных данных по размеру в одну командную строку. Для этого используйте последовательность команд (конвейер): ls -l /u | grep "Feb" | sort -k5.
Выведите содержимое вашего домашнего каталога и перенаправьте вывод в файл curlist, запустив команду ls -l > curlist & в фоновом режиме. В результате будут получены идентификатор задачи (job id) и идентификатор фонового процесса PID.
Повторите команду вывода записей с месяцем «Feb», запустив ее в фоновом режиме и перенаправив вывод в файл curlist: ls -l /u | grep "Feb" | sort -k5 > curlist &.
Можно проверить, что была выведена одна ID-задача (job id) и три ID-процесса. При этом идентификатор группы GID равен ID первого процесса.
Команда history (история команд) выводит последние введенные 16 команд. Выберите одну команду из истории команд и перезапустите ее, напечатав r перед номером, соответствующим выбранной команде, например: r 173.
Выведите содержимое файла sh_history с помощью команды cat .sh_history.
Файл .sh_history содержит список ранее введенных команд. Обратите внимание на разницу между списком команд, полученным с помощью команды history и содержимым файла .sh history. Команда history выводит последние 16 команд вместе с номерами, присвоенными этим командам. Файл .sh_history содержит гораздо больше команд, но не содержит их номера.
19
2.4. Настройка оболочки Shell
Введите команду echo $LOGNAME $PWD для вывода значений переменных LOGNAME и PWD (не забывайте про регистр).
Переменная LOGNAME равна значению имени пользователя (logon name), а переменная PWD — текущему рабочему каталогу. Вы можете настроить оболочку Shell таким образом, чтобы она выводила login и текущий рабочий каталог.
Чтобы имя рабочего каталога корректно отображалось при вводе команды cd, значение, присваиваемое переменной, необходимо заключить в одинарные кавычки: PS1 = '$LOGNAME:$PWD: >'.
Используя команду oedit .profile, добавьте команду из предыдущего пункта к файлу .profile из вашего домашнего каталога. После завершения редактирования файла нажмите клавишу F3, чтобы его закрыть.
2.5. Написание Shell-скриптов
Создайте новый каталог scripts в вашем домашнем каталоге c помощью команды mkdir scripts. Создайте новый файл myscript в каталоге.
Напишите скрипт «Вычисление возраста пользователя», который запрашивает у пользователя его имя и год рождения; вычисляет возраст пользователя и выводит предложение, содержащее этот возраст. Сохраните файл под именем age. Используйте текущий год как константу при расчетах.
Скрипт будет иметь вид: echo Please enter your name: read name echo Please enter the year of your birth: read year let age=2009-year echo Hello, $name. You are $age years old.
Для запуска нового скрипта используйте команду scripts/myscript. На экран будет выведено следующее сообщение: «Cannot execute, permission denied». Если вы увидели это сообщение об ошибке, исправьте биты разрешения и перезапустите скрипт с помощью команд: chmod +x scripts/myscript и scripts/myscript.
Используя последовательность команд (скрипт), объедините задачи вашего варианта (вариант получите у преподавателя). Отладьте работу Shell-скрипта, текст скрипта включите в отчет по лабораторной работе.
20
