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

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

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

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

Решение:

#proc8.1

l1=`wc -l $1 | cut -f1 -d" "` l2=`wc -l $2 | cut -f1 -d" "`

#Сравнение числа строк в заданных файлах if [ $l1 -ne $l2 ]

then

#Получение разности числа строк в первом и втором файлах if [ $l1 -gt $l2 ]

then

l3=`expr $l1 - $l2` flag=0

else

l3=`expr $l2 - $l1` flag=1

fi

#Вывод на экран попеременно строк первого и второго файлов

впрямом порядке

l4=1

while [ $l4 -le $l3 ] do

#Вывод на экран очередной строки из первого файла head -$l4 $1 >file

tail -1 file

#Пауза 10 с sleep 10

# Вывод на экран очередной строки из второго файла head -$l4 $2 >file

tail -1 file

#Пауза 10 с sleep 10

l4=`expr $l4 + 1`

done

# Вывод на экран оставшихся строк первого или второго файла if [ $flag -eq 0 ]

141

then

tail -`expr $l1 - $l4` $1 else

tail -`expr $l2 - $l4` $2

fi else

l4=1

while [ $l4 -le $l1 ] do

# Вывод на экран очередной строки из первого файла tail -$l4 $1 >file

head -1 file

#Пауза 10 с sleep 10

# Вывод на экран очередной строки из второго файла tail -$l4 $2 >file

head -1 file sleep 10

l4=`expr $l4 + 1` done

fi

# Конец процедуры Proc8.1

Пример выполнения процедуры proc8.1: $ cat > pp

111111

222222

333333 $ cat > tt

444444

555555

666666

$ proc8.1 pp tt

333333

666666

222222

555555

111111

444444

$

142

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

Решение:

#proc8.2

#Сохранение сведений о пользователях, работающих в системе

вмомент запуска процедуры на выполнение

who >file1

#Сохранение списка имен работающих пользователей cut –f1 -d=” “ file1 >file3

#Бесконечный цикл

while true do

#Пауза 15 с sleep 15

#Сохранение сведений о работающих пользователях через 15 с who >file2

#Сохранение списка имен работающих пользователей

cut –f1 -d=“ “ file2 >file4

#Поиск каждого нового пользователя в списке старых пользователей и вывод на экран сведений о каждом вновь вошедшем в систему пользователе

for newuser in file4 do

if grep $newuser file3 then continue

else

grep $newuser file2

fi done

#Обновление сведений о работающих пользователях

cp file4 file3 done

# Конец процедуры Proc8.2

Пример выполнения процедуры proc8.2:

$ proc8.2

 

user3 tty2

2009-09-24-03-17 23:05

$

 

143

11.ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОГО ПРОГРАММИРОВАНИЯ ПРОЦЕДУР

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

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

Для программирования процедур достаточно использовать только те средства ОС UNIX, которые рассматриваются в настоящем учебном пособии.

Вариант 1. Написать shell-процедуру, которая:

вводит передаваемое в качестве 1-го параметра количество символьных строк;

в каждой введенной строке ищет подстроку, передаваемую в качестве второго параметра;

заменяет каждую найденную подстроку на строку, передаваемую в качестве третьего параметра;

выводит на экран каждую введенную строку и соответствующую ей новую строку.

Вариант 2. Написать shell-процедуру, которая:

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

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

144

Вариант 3. Написать shell-процедуру, которая:

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

повторяет сообщения с периодичностью, задаваемой первым параметром (в секундах);

прекращает выдачу сообщений и заканчивает работу при вводе с клавиатуры слова quit.

Вариант 4. Написать shell-процедуру, которая:

вводит с клавиатуры терминала некоторое целое число;

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

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

Вариант 5. Написать shell-процедуру, которая:

среди пользователей, работающих в данный момент времени

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

выводит на экран найденные имена пользователей;

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

Вариант 6. Написать shell-процедуру, которая:

вводит символьную строку, содержащую имя некоторого каталога;

проверяет наличие каталога с таким именем в домашнем каталоге или в одном из подкаталогов домашнего каталога;

если такой каталог существует, то выводит на экран его содержимое, запрашивает необходимые права доступа для этого каталога и устанавливает заданные права доступа;

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

145

Вариант 7. Написать shell-процедуру, которая:

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

в найденных файлах ищет все повторяющиеся строки и удаляет все повторения строк;

выводит на экран содержимое всех найденных файлов.

Вариант 8. Написать shell-процедуру, которая:

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

удаляет все пустые каталоги;

выдает на экран сообщения о каждом удаленном файле и каталоге.

Вариант 9. Написать shell-процедуру, которая:

читает содержимое первого файла, передаваемого в качестве первого параметра;

читает содержимое второго файла, передаваемого в качестве второго параметра;

если число строк в первом и втором файлах одинаковое, то выводит на экран каждые 5 с попеременно строки из первого и второго файлов;

если число строк в первом и втором файлах разное, то выводит на экран каждые 5 с сначала строки первого файла, затем строки второго файла;

прекращает работу по окончании вывода всех строк первого

ивторого файлов.

Вариант 10. Написать shell-процедуру, которая:

читает содержимое файла, передаваемого в качестве первого параметра(вфайле вкаждой строкепредставленоодно целоечисло);

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

подсчитывает сумму всех содержащихся в файле чисел;

выводит на экран полученную сумму.

146

Вариант 11. Написать shell-процедуру, которая:

вводит символьную строку;

проверяет введенную строку на несовпадение со строкой, переданной в качестве первого параметра;

если строки не совпадают, то выдает на экран приглашение повторить ввод;

если строки совпадают, то сравнивает длину введенной строки с длиной второго параметра, и, в случае их равенства, выводит на экран введенную строку.

Вариант 12. Написать shell-процедуру, которая:

вводит с терминала некоторое целое положительное число;

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

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

12.СЕТЕВЫЕ СРЕДСТВА UNIX

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

UUCP — это сети с коммутацией каналов, когда сначала уста-

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

Современные собственные сетевые средства ориентированы на сети Ethernet — сети с коммутацией пакетов. Данные передаются пакетами с заголовком, включающим адрес компьютера, на который передаются данные. В сетях этого типа все компьютеры имеют активную связь через линии связи постоянно (коаксиальные кабели, витая пара). В отличие от UUCP сеть этого типа позволяет со-

147

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

Для управления передачей пакетов используется единый протокол — IP (Internet Protocol), а каждый компьютер сети имеет собственный IP-адрес. Эти адреса присваиваются администратором сети и хранятся в файле /etc/.hosts/ каждого компьютера сети. Сети Ethernet де-факто стали стандартом для UNIX.

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

-копировапние файлов с одного компьютера на другой;

-вход в другой компьютер для работы на нем;

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

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

Первымиизэтих сервисов были разработанысервисы telnet u ftp: telnet — сервис для входа в удаленный компьютер и использо-

вания всех его ресурсов;

ftp — (протокол передачи файлов) сервис для обмена файлами с удаленным компьютером.

По сути, сервисы — это некоторая надстройка над собственно UNIX или его расширение.

Большинство ОС UNIX предоставляют широкий набор сетевых служб, который постоянно расширяется и совершенствуется.

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

ем Internet (INTERconnected NETworcs — "связанные сети").

В основе управления сетями лежат одни и те же принципы. В обоих случаях используется протокол IP (протоколы TCP, FTP, Gopher и др.). Ценность Internet состоит в том, что они не зависят ни от типа компьютеров, ни от их конфигурации, ни от способа физического соединения и пр. Обеспечивает инвариантность протокол TCP/IP. Этот протокол, по сути, вытеснил все остальные протоколы и тоже стал стандартом.

Наиболее популярным приложением к Internet является одна из самых больших служб Internet — World Wide Web (WWW или Web).

148

12.1. СТЕК ПРОТОКОЛОВ TCP/IP

Все современные версии ОС UNIX поддерживают стек протоколов TCP/IP, который является стандартом как для взаимодействия компьютеров в локальной сети, так в Internet. В основу стека положен протокол IP. Сервисом этого протокола пользуются транспортные протоколы: TCP (Transmission Control Protocol) –

протокол надежной передачи данных, ориентированный на установление соединения, и UDP (User Datagram Protocol) – теоретически ненадежный протокол передачи данных без установления соединения. Прикладные протоколы, с которыми непосредственно работает сетевое приложение, используют либо протокол TCP, либо протокол UDP. В настоящее время существует множество прикладных протоколов, которые разработаны с учетом специфики конкретных сетевых приложений, использующих эти протоколы. Часто приложения называются так же, как и протокол: например, telnet-приложение использует в своей работе telnet-протокол, но www-приложение использует HTTP-протокол. Перечислим несколько протоколов прикладного уровня с их кратким описанием.

На базе протокола TCP:

Telnet (Terminal Networking) – протокол удаленного терминаль-

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

FTP (File Transfer Protocol) – протокол передачи файлов, позво-

ляющий передавать файлы по сети от одного компьютера к другому; SMTP (Simple Mail Transfer Protocol) – протокол передачи элек-

тронной почты, позволяющий компьютерам обмениваться электронными письмами;

HTTP (Hyper Text Transfer Protocol) – самый популярный прото-

кол Internet, его используют www-приложения, например, при загрузке www-страницы браузером.

На базе протокола UDP:

DNS (Domain Name System) – протокол, обеспечивающий преобразование символьных имен компьютеров в их IP-адреса;

TFTP (Trivial File Transfer Protocol) – простой протокол переда-

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

149

12.2. ПРОТОКОЛ IP

Рассмотрим теперь основные принципы сетевого взаимодействия при использовании протоколов стека TCP/IP. Базовым протоколом является протокол IP. На него возлагается функция маршрутизации пакетов. Именно этот протокол отвечает за то, чтобы информация, переданная с компьютера, находящегося в России, путем последовательных передач с компьютера на компьютер, в конце концов оказалась на компьютере в Австралии, для которого информация собственно и предназначалась. Сразу заметим, что протокол IP обеспечивает теоретически ненадежную передачу данных, так что может оказаться так, что информация будет потеряна. Но это не имеет значения, так как в стеке протоколов TCP/IP функции между протоколами строго разграничены, и за надежную доставку данных будет отвечать протокол TCP, который будет рассмотрен ниже.

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

или UDP).

Для идентификации компьютеров в IP-сетях используется IPадрес, причем для сети Internet IP-адрес должен быть уникален в пределах всей сети, чтобы для пакета, содержащего в своем заголовке IP-адрес получателя, был однозначно определен компьютерполучатель. IP-адрес представляет собой четырехбайтовое (32разрядное) число, все байты которого записаны в десятичном виде и разделены точкой, например: 194.67.67.33. В терминах протокола IP каждый компьютер, подключенный к сети, называется host-

150