Забродин УНИХ основы командного интерфейса 2010
.pdfесли число строк в файлах одинаковое, то выводит на экран попеременно через каждые 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