Модуль 1-2. Введение в UNIX. Вход в систему и простейшие действия. Что такое операционная система? Магнитные диски Пользователи Оперативная память Операционная система Центральный процессор Программы Сеть Потребители Принтеры Ресурсы Основные компоненты UNIX Отличительные особенности UNIX • Иерархическая файловая система • Мультизадачный режим работы • Обслуживание многих пользователей Типичный сеанс работы в системе • Вход в систему для идентификации пользователя и получения доступа к системе • Выполнение команд, производящих необходимые действия • Выход из системы для завершения сеанса работы Вход и выход из системы login: user1 <Return> Password: Welcome to HP-UX Erase is backspace Kill is CTRL-U $ date Fri Jul 1 11:03:42 EDT 1994 $ другие команды $ exit или <Ctrl>+<d> <Return> login: Вход в систему Входные сообщения Выполнение требуемых действий Выход из системы Интерпретатор Shell Интерпретируемый язык программирования Выполнение команд Средства настройки среды Подстановка команд Shell Конвейеры Перенаправление ввода/вывода Генерация имен файлов Назначение переменных Подстановка переменных Формат командной строки Синтаксис: $ команда [-опции] [аргументы] <Return> Примеры $ date <Return> Аргументы отсутствуют Fri Jul 1 11:10;45 EDT 1995 Один аргумент $ echo hello! <Return> hello! Неверный синтаксис $ echohello! <Return> sh: echohello!: not found Одна опция $ ls -F <Return> dira/ dirb/ f1 f2 prog1* prog2* Вторичное приглашение к вводу $ echo ‘Hello, <Return> > world!’ <Return> Hello, world! Ввод открывающегося апострофа $ ( <Return> > <Ctrl>+<c> Ввод открывающей скобки $ stty -a Определяет управляющую Закрывающий апостроф последовательность для прерывания команд Справочник Справочник HP-UX содержит: Раздел Описание Раздел 1 Команды пользователя Раздел 1m Команды обслуживания системы Раздел 2 Системные вызовы Раздел 3 Функции и библиотеки модулей Раздел 4 Форматы файлов Раздел 5 Смешанные темы Раздел 7 Файлы устройств (специальные файлы) Раздел 8 Глоссарий Содержание страниц справочника NAME SYNOPSYS DESCRIPTION EXTERNAL INFLUENCE NETWORKING FEATURES RETURN CODE DIAGNOSTICS ERRORS EXAMPLES WARNINGS DEPENDENCIES AUTHOR FILES SEE ALSO BUGS STANDART CONFORMANCE Оперативный справочник Синтаксис: man [-k|X] ключевое_слово|команда где X-номер одного из разделов справочника Примеры: $ man date $ man -k copy $ man passwd $ man 4 passwd Выводится описание команды «date» Выводятся статьи с ключевым словом «copy» Выводится статья «passwd» - раздел 1 Выводится статья «passwd» - раздел 4 <Space> - вывести следующую страницу <Return> - вывести следующую строку <q> - выйти из команды man Множественность статей в справочнике whereis команда $ whereis passwd passwd: /sbin/passwd /usr/bin/passwd /usr/share/man/man1.Z/passwd.1 /usr/share/man/man4.Z/passwd.4 $ whereis nothere nothere: Команда id Синтаксис: id Выводит идентификатора пользователя и его группы для данного сеанса связи Примеры: $ id uid=303 (user3) gid =300 (class) /etc/passwd /etc/group файл с пользовательскими идентификаторами файл с идентификаторами групп Команда who Синтаксис: who [am i] whoami Примеры: $ who root user1 user2 Сообщает информацию о пользователях, работающих в системе tty1p5 tty1p4 tty0p3 Jul 01 08:01 Jul 01 09:59 Jul 01 10:01 tty0p3 Jul 01 10:01 $ who am i user2 $ whoami user2 Команда date Синтаксис: Выводит дату и время date Примеры: $ date Fri Jul 01 11:15:55 EDT 1994 Примечание: Системную дату и время может изменить только администратор системы Команда passwd Синтаксис: passwd Назначает входной пароль Примеры: $ passwd Changing password for user3 Old password: New password: Re-enter new password: Ограничения при задании пароля: • минимум шесть символов • по крайней мере две буквы • по крайней мере один не буквенный символ Команда echo Синтаксис: echo [arg] Отображает свои аргументы на экран терминала Примеры: $ echo how are you how are you $ echo 123 abc 123 abc Команда banner Синтаксис: banner [arg] Выводит на экран аргументы заглавными буквами Примеры: $ banner hеllo Команда write Синтаксис: write username [tty] Посылает сообщение пользователю username, если он работает в системе Пример: user1 $ write user2 Are you going to the meeting? Message from user2 (tty04) I will be there It is fine <Ctrl>+<d> user2 Message from user1 (tty05) Are you going to the meeting? $ write user1 I will be there <Ctrl>+<d> Message from user1 (tty05) It is fine Команда mesg Синтаксис: mesg [y|n] Примеры: $ mesg is y $ mesg n $ mesg is n $ mesg y $ mesg is y Разрешает или запрещает «писать» на терминал Команда mail Синтаксис: mail mail username [username] Чтение приходящей почты Отправление почты пользователю username Примеры: $ mail From user4 Fri Jul 1 8:12 EDT 1994 Are you available for lanch today? ?d $ mail user4 Hi there! I will meet you at 12:00 for lanch. <Ctrl>+<d> $ Чтение приходящей почты Содержание почтового сообщения Приглашение и команда удаления сообщения Отправление почты пользователю user4 Содержание почтового сообщения Завершение сообщения Утилита mail Команды ? q x d s [file] <Return> + !cmd Помощь Выход из утилиты Выход без изменения содержимого почтового ящика Уничтожение предыдущего сообщения Сохранение сообщения в файле (по умолчанию файл с именем mbox Вывод на экран следующего сообщения Вывод на экран следующего сообщения Вывод на экран предыдущего сообщения Выполнение команды системы UNIX, не выходя из утилиты mail Команда mailx • Позволяет отвечать на почту • Дает возможность манипулировать сообщениями, используя их порядковые номера • Добавляет заголовок к почтовому сообщению Команда news Синтаксис: news [-a] [-n] [headline] Выводит на экран терминала новости системы Примеры: $ news Выводит последние новости $ news -a Выводит все новости $ news - n Выводит заголовки новостей Модуль 3. Файловая система Иерархия файловой системы / sbin usr dev group bin contrib lib etc passwd local opt var .profile sbin ls man sh tar tmp home vmunix user1 user2 user3 mail news tmp vue share vue man cp stand vi - каталог - файл Маршрутные имена файлов Абсолютные маршрутные имена файлов / tmp home usr user1 user2 user3 f1 •полностью определяет местоположение •всегда начинаются от корня •всегда начинаются знаком / •не зависят от текущего положения пользователя •уникальны по отношению ко всей иерархической структуре memo f1 /home/user3/f1 /home/user3/memo/f1 Относительные маршрутные имена файлов •начинаются от текущего положения пользователя •никогда не начинаются знаком / •уникальны только по отношению к текущему положению •обычно короче, чем абсолютное маршрутное имя user3/f1 user3/memo/f1 f1 Особые каталоги / tmp user1 home user2 Входной каталог •создается при добавлении пользователя •обычно является подкаталогом /home usr Точка (.) user3 f1 memo f1 •представляет текущий каталог Если текущий каталог /home/user3, то . - текущий каталог . /f1 - /home/user3/f1 . /memo/f1 - /home/user3/memo/f1 Две точки (..) •представляет родительский каталог •для корневого каталога (/) .. ссылается на себя Если текущий каталог /home/user3, то .. - /home ../.. - / .. /user2 - /home/user2 Основные команды файловой системы pwd ls cd find mkdir rmdir Выводит имя текущего каталога Выводит список файлов и каталогов, находящихся в текущем каталоге Изменяет текущий каталог пользователя Осуществляет поиск файлов Создает каталог Удаляет каталог Команда pwd Синтаксис: pwd Выводит имя рабочего каталога Примеры: / tmp home usr user1 user2 user3 f1 $ pwd /home/user3 memo f1 Команда ls Синтаксис: ls [-adlFR] [маршрутное имя(имена)] -выводит содержимое каталога • • • если команда вводится без аргументов, выводятся имена файлов и каталогов, находящихся в текущем каталоге в качестве аргументов можно указывать и относительные и абсолютные маршрутные имена файлов допускается задание ряда опций: -a - выводит имена всех файлов, в том числе “невидимых”(начинаются с точки(.)) -d - вычисляет характеристики каталога вместо представления его содержимого -l - представляет полный перечень атрибутов каждого файла (тип, права доступа, количество ссылок, владелец, группа, размер в байтах, дата последней модификации, имя) -F - добавляет знак / к имени каждого каталога и * к имени каждого исполняемого файла -R - рекурсивно перечисляет файлы в данном каталоге и во всех его подкаталогах Сокращения команд в HP-UX Команда системы UNIX ls -F ls - l ls - R Эквивалент в HP-UX lsf ll lsr Команда cd Синтаксис: cd [имя каталога] • • Изменяет текущий каталог имя каталога - абсолютное или относительное маршрутное имя каталога, в который надо перейти если команда вызвана без аргументов, пользователь окажется в HOMEкаталоге Команда find Синтаксис: find список_имен выражение • Осуществляет упорядоченный поиск в файловой системе список_имен - список имен каталогов, в которых осуществляется поиск • выражение - задает критерий поиска и действия • ключевым словам в выражении предшествует знак - Примеры $ find . -newer f1 Найти в текущем каталоге файлы, более новые чем f1 Команды mkdir и rmdir Синтаксис: mkdir [-p] имя(имена)_каталога • [-p] - создаются промежуточные каталоги, если они до этого не существовали rmdir [-i] имя(имена)_каталога • • • • Создание каталога Удаление каталога удаляемые каталоги должны быть пустыми нельзя удалить каталог между текущим и корневым [-i] - удаление с подтверждением rm -r имя_каталога удаление непустого каталога Файловая система - краткое резюме Файл Каталог Дерево Маршрутное имя HOME pwd cd ls find mkdir rmdir Контейнер для данных Контейнер для файлов и других каталогов Иерархическая структура UNIX системы Идентифицирует положение файла или каталога в иерархии Маршрутное имя входного каталога пользователя Выводит на экран текущий каталог Изменяет текущий каталог Выводит содержимое каталога Отыскивает файлы, специфицируемые опциями Создает каталоги Удаляет каталоги Модуль 4. Управление файлами Что такое файл? Файл - хранилище данных или канал связи с устройством • Каждый файл имеет имя и может содержать данные, которые размещаются на диске. • Имеется несколько различных типов файлов: - Обычные файлы · текст, данные, графические данные · исполняемые программы - Каталоги - Файлы устройств Что можно делать с файлами? ls cat more lp cp mv ln rm Просмотр характеристик файла Просмотр содержимого файла Поэкранный просмотр содержимого файла Печать файла Копирование файла Изменение имени файла Перемещение файла в другой каталог Создание ссылки на файл (файла псевдонима) Удаление файла Характеристики файлов $ ls -l -rw- r--r-- 1 user3 class 37 Jul 24 11:06 f1 -rwxr-xr-x 1 user3 class 52 Jul 24 11:08 f2 drwxr-xr-x 2 user3 class 1024 Jul 24 12:03 memo тип ссылки группа дата имя файла файла владелец модификации файла режим доступа размер файла к файлу Типы файлов d l n c b p Обычный файл Каталог Символическая ссылка Сетевой специальный файл Байт-ориентированный специальный файл (терминалы, принтеры) Блок-ориетированный специальный файл (диски) Именованный канал (канал внутри межпроцессорного взаимодействия) Команда cat Синтаксис: cat [файл] Объединяет и выводит содержимое файла Примеры $ cat f1 $ cat f1 f2 $ cat abs <Ctrl>+<d> abc $ cat f1 f2 > f3 Вывод на экран содержимого файла f1 Вывод на экран содержимого файлов f1 и f2 Ввод с клавиатуры Перенаправление вывода файлов f1 и f2 в f3 Команда more Синтаксис: more [файл] ... Осуществляет поэкранный вывод содержимого файла Примеры $ more f1 … … … --f1 (20%)-<Q> или <q> <Return> <Space> Выход из команды more Вывод очередной строки Вывод очередного экрана с информацией Команда tail Синтаксис: tail [-n] [имя_файла] ... Примеры $ tail -1 note soon as it is available Вывод последних n строк файла(ов) Система спулинга строчных принтеров • Система спулинга строчных принтеров (lp spooler) - утилита, координирующая работу принтера. • Функции системы спулинга – Организация очереди файлов к принтерам. – Определение состояния принтеров и запросов к ним. – Прерывание любого задания для принтера. Пользователь 1 Пользователь 2 … Пользователь n Вывод Система спулинга строчных принтеров (lp spooler) Принтер Команда lp • • • Организует очередь файлов, подлежащих выводу на печать. Назначает уникальный числовой идентификатор (ID) запросу в очереди. Обладает рядом опций для настройки маршрутизации и режима печати. Синтаксис: lp [-dпринтер] [-опции] имя_файла... Примеры $ lp file1 request id is dp-112 (1 file) $ lp -n2 file1 file2 request id is dp-113 (2 file) $ lp -dlaser -t”confidential”-n2 file1 file2 request id is laser-114 (1 file) Опции команды lp lp [-dпринтер] [-nчисло] [-oопция] [-tзаголовок] [-w][имя_файла...] -dпринтер Имя принтера, при отсутствии поставит документ в очередь к принтеру, назначенному в системе принтером по умолчанию -nчисло -tзаголовок -oопция Число копий, по умолчанию 1 -w Выдача сообщения на терминал пользователя после распечатки Печать заголовка на титульном листе Указание опций, специфических для принтера ( тип шрифта, шаг печати, толщина линий, структурированность данных и т.д.) Команда lpstat Синтаксис: lpstat [-t] • Команда lpstat сообщает о запросах, поставленных в очередь на печать • Команда lpstat -t сообщает состояние планировщика заданий, имя пнинтера по умолчанию, состояние принтера и список всех запросов, стоящих в очереди на печать. Команда lpstat Примеры: $ lpstat rw-55 john 4025 Jul 6 14:26:33 1994 $ $ lpstat -t scheduler is running system default destination: rw device for rw: /dev/lp2235 rw accepting requests since Jul 1 10:56:20 1994 printer rw now printing rw-55. enabled since Jul 4 14:32:52 1994 rw-55 john 4025 Jul 6 14:26:33 1994 on rw rw-56 root 966 Jul 6 14:27:58 1994 $ Команда cancel Синтаксис: cancel идентификатор [идентификатор...] cancel принтер [принтер...] Примеры: • Отмена задания, поставленного в очередь командой lp $ cancel dp-115 • Отмена текущего задания на указанном принтере $ cancel laser Команда cp Синтаксис: cp [-i] файл вых_файл cp [-i] файл [файл...] вых_каталог cp -r [-i] каталог [каталог...] вых_каталог • • • • • • • • Копирование файла Копирование файлов в каталог Копирование каталогов Требуется указать как минимум два аргумента - источник и преемник Для любого из аргументов допустимо использование относительных и/или абсолютных маршрутных имен. Если файл-преемник не существует, он будет создан. Если преемник - каталог, файл будет скопирован в него с сохранением имени. Опция -i приводит к выдаче предупреждения о том, что файл-преемник уже существует и может быть изменен При копировании нескольких файлов преемником должен быть каталог. Файл не может быть скопирован сам в себя. Опция -r должна быть использована при копировании каталогов. Команда mv Синтаксис: mv [-i] файл новый_файл mv [-i] файл [файл...] вых_каталог mv [-i] каталог [каталог...] вых_каталог • • • • • • • Переименование файла Перемещение файлов в каталог Переименование или перемещение каталогов Требуется указать как минимум два аргумента - источник и преемник Для любого из аргументов допустимо использование относительных и/или абсолютных маршрутных имен. Если файл-преемник уже существует, его содержимое будет заменено содержимым файла-источника. Если преемник - каталог, файл будет скопирован в него с сохранением имени. Опция -i приводит к выдаче предупреждения о том, что файл или каталогпреемник уже существует и может быть изменен При перемещении нескольких файлов преемником должен быть каталог. Если в качестве источника указан каталог, он переименовывается и получает имя преемника. Команда ln Синтаксис: ln файл новый_файл ln файл[файл...] вых_каталог Создание ссылки на файл Создание ссылок на файлы в каталоге Примеры / $ ls -l f1 -rw-rw-r-- 1 user3 class 37 Jul 24 11:06 fl $ ln fl /home/user2/fl.link $ ls -l fl -rw-rw-r-- 2 user3 class 37 Jul 24 11:06 fl $ ls -1 /home/user2 -rw-rw-r-- 2 user3 class 37 Jul 24 11:06 fl.link Пользователь находиться здесь home user2 user3 f1.link f1 Это файл, к которому можно обращаться по нескольким именам Команда rm Синтаксис: rm [-if] имя_файла [имя_файла]... rm -r[if] каталог [имя_файла ...] • • -f -r • -i Удаление файлов Удаление каталогов Безусловное удаление поименованных в команде файлов Рекурсивно удаляется содержимое каталогов, указанных в командной строке Режим интерактивного удаления Примеры $ ls -F f1 f2 fruit/memo $ rm f1 $ ls -F f2 fruit/memo $ rm -i f2 f2? y $ rm fruit rm: fruit directory $ rm -r fruit Список команд управления файлами и каталогами ls -l cat more tail cp mv ln rm lp lpstat cancel Выводит характеристики файла Объединяет и выводит на экран содержимое нескольких файлов Форматирует и выводит на экран содержимое файлов Выводит на экран окончание файла Копирует файлы и каталоги Перемещает или переименовывает файлы и каталоги Создает ссылки на файл Удаляет файлы или каталоги Посылает запросы на вывод информации на принтеры Выводит состояние системы спулинга Отменяет исполнение запросов, стоящих в очереди к принтеру Модуль 5. Доступ к файлам Permission ls (ll, ls -l) chmod umask chown chgrp su newgrp Права на чтение, запись, выполнение файла Определение прав доступа, установленных для файла Изменение прав доступа к файлу Изменение прав доступа, назначаемых по умолчанию Изменение владельцев файла Изменение группы файла Изменение идентификатора пользователя Изменение идентификатора группы пользователя Кто имеет доступ к файлу? • Тройственная структура, определяющая доступ к файлу или каталогу user group other Владелец файла Группа пользователей, которая может иметь доступ к файлу Все другие категории пользователей • Команда ls -l выводит на экран идентификаторы пользователя владельца файла и группы, которая имеет доступ к файлу $ ls -l -rw- r--r-- 1 user3 class 37 Jul 24 11:06 f1 -rwxr-xr-x 1 user3 class 52 Jul 24 11:08 f2 drwxr-xr-x 2 user3 class 1024 Jul 24 12:03 memo Владелец Группа Типы доступа Для каждого файла или каталога возможны три типа доступа: -Read (чтение) Может быть просмотрено содержимое файлов или каталогов -Write (запись) Содержимое файлов или каталогов может быть изменено -Execute (выполнение) Файл может использоваться как команда. Каталог может стать текущим рабочим каталогом Права доступа к файлам Права доступа к файлам выводятся на экран командой ls -l $ ls -l - rw- r-- r-- 1 user3 class 37 Jul 24 11:06 f1 - rwx r-x r-x 1 user3 class 52 Jul 24 11:08 f2 d rwx r-x r-x 2 user3 class 1024 Jul 24 12:03 memo Права владельца Права группы Группа файла Владелец файла Права остальных пользователей Команда chmod Синтаксис: chmod режим_доступа файл ... режим_доступа кто оператор право Изменение прав доступа к файлу(ам) [кто[оператор]право][...] владелец (user), группа (group), остальные (other) или все (all) + (добавить), - (отнять), = (присвоить) чтение (read), запись (write), выполнение (execute) Команда chmod Примеры Исходные права: режим rw-r--r-$ chmod u+x,g+x,o+x file Новые права: режим rwxr-xr-x $ chmod +x file владелец rw- группа r-- остальные r-- владелец rwx группа r-x остальные r-x chmod = имя_файла Удаление всех прав доступа к файлу $ chmod о= file Новые права: режим владелец группа остальные rwxr-xr-x rwx r-x --- Команда chmod Примеры /dev/tty0p1 - файл устройства, отвечающий за связь терминала пользователя с компьютером $ ls -l /dev/tty0p1 crw--w--w- 1 bin bin 58 ox000003 Feb 15 11:34 /dev/tty0p1 $ mesg n $ ls -l /dev/tty0p1 crw------- 1 bin bin 58 ox000003 Feb 15 11:34 /dev/tty0p1 Команда chmod. Задание прав доступа в числовом формате 1. Каждое право доступа обозначается следующими числами: read=4 write=2 execute=1 2. Числа складываются для каждой категории пользователей (владельца, группы, остальных) и объединяются в трехразрядное число. Примеры 1. user group rwr-4+2+0 4+0+0 6 4 chmod 640 имя_файла 2. chmod 000 имя_файла others --0+0+0 0 Отмена всех прав доступа к файлу Команда umask Синтаксис: umask [-S] [режим_доступа] ... Пользовательская маска создания файла Примеры права доступа по умолчанию: установка новых прав доступа по умолчанию $ umask g=r, o= $ umask -S rw-rw-rwrw-r--r-- Вывод текущей маски создания файла в символьном представлении Команда touch Синтаксис: touch [-amc] [-t время] имя_файла... Обновляет время последнего доступа и/или модификациии файла Опции: -a [время] Установить время последнего доступа к файлу равным время -m [время] Установить время последней модификации файла равным время -c Если файл не существует, не создавать его -t время Использовать время вместо текущего время [[cc]yy]mmddhhmm[.ss] Команда touch Примеры: $ ll -rw-r--r-- 1 karenk users 25936 Aug 24 -rw-r--r-- 1 karenk users 10245 Aug 24 $ touch newfile $ ll -rw-r--r-- 1 karenk users 25936 May 24 -rw-r--r-- 1 karenk users 0 Aug 25 -rw-r--r-- 1 karenk users 10245 Aug 24 $ touch secondfile $ ll -rw-r--r-- 1 karenk users 25936 May 24 -rw-r--r-- 1 karenk users 0 Aug 25 -rw-r--r-- 1 karenk users 10245 Aug 25 $ 09:53 firstfile 09:53 secondfile 09:53 firstfile 10:02 newfile 09:53 secondfile 09:53 firstfile 10:02 newfile 10:05 secondfile Команда touch Примеры: $ touch test_filel $ ls -1 test_filel -rw-rw-rw- 1 user3 class 0 Jul 24 11:08 test_filel $ umask a-rwx,u=rw,g=r $ umask -S u=rw,g=r,o= $ touch test_file2 $ ls -1 test_file2 -rw-r----- 1 user3 class 0 Jul 24 11:10 test_file2 Команда chown Синтаксис: chown владелец [:группа] имя_файла Изменение владельца файла и, дополнительно, группы Пример: $ id uid=303 (user3), gid=300 (class) $ cp fl /home/user2/fl $ ls -1 /home/user2/fl -rw-r----- 1 user3 class 3967 Jan 24 13:13 fl $ chown user2 /home/user2/fl $ ls -1 /home/user2/fl -rw-r----- 1 user2 class 3967 Jan 24 13:13 fl •Только владелец файла (или суперпользователь) может изменить владельца файла. Команда chgrp Синтаксис: chgrp новая_группа имя_файла • Изменяет права доступа группы к файлу Только владелец файла (или суперпользователь) может изменить группу файла. Пример: $ id uid=303 (user3), gid=300 (class) $ ls -1 f3 -rw-r--—— 1 user3 class 3967 Jan 24 13:13 f3 $ chgrp class2 f3 $ ls -l f3 -rw-r----- 1 user3 class2 3967 Jan 24 13:13 f3 $ chown user2 f3 $ ls -l f3 -rw-r----- 1 user2 class2 3967 Jan 24 13:13 f3 Команда su Синтаксис: su [имя_пользователя]... Изменение ранее назначенного идентификатора пользователя Примеры $ ls -1 /usr/local/bin/class_setup -rwxr-x--- 1 class_admin teacher 3967 Jan $ id uid=303 (user3), gid=300 (class) $ su class_admin Password: $ id uid=400 (class_admin), gid=300 (class) $ /usr/local/bin/class_setup $ <Ctrl>+<d><Return> log out of su session $ 24 13:13 f3 Команда newgrp Синтаксис: newgrp [имя_группы]... Примеры Изменяет идентификатор группы $ ls -1 /usr/ local/bin/class_setup -rwxr-x--- 1 class_admin teacher 3967 Jan 24 13:13 $ id uid=303 (user3), gid=300 (class) $ newgrp teacher $ id uid=303 (user3), gid=33 (teacher) $ /usr/local/bin/class_setup $ newgrp return to login group status $ newgrp other Sorry $ f3 Списки управления доступом ACL Синтаксис: lsacl имя_файла chacl [-d] ACL имя_ файла Примеры: Выводит ACL для файла Изменяет ACL для файла $ lsacl funfile (user3.%,rw-)(%.class,r--)(%.%,r--) funfile $ chacl "user2.class=rw,%.%-r" funfile $ lsacl funfile (user2.class,rw-)(user3.%,rw-)(%.class,r--)(%.%,---) funfile $ chacl -d "user2.class" funfile $ ll funfile -rw-r--r-- 1 user3 class 3081 May 28 16:12 funfile $ lsacl funfile (user3.%,rw-)(%.class,r--)(%.%,---) funfile Списки управления доступом ACL Уровни управления доступом Существуют четыре базовых уровня, которые могут определять доступ к файлу: (u.g,rwx) Указанный пользователь, указанная группа (u.%,rwx) Указанный пользователь, любая группа (% . g, rwx) Любой пользователь, указанная группа (%. %, rwx) Любой пользователь, любая группа Списки управления доступом ACL Пример $ lsacl funfile (user3.%,rw-) (%.class, r--) (%.%,r--) funfile В приведенном ниже примере для user2 из группы class будет создан ACL, обеспечивающий право на чтение и запись и исключающий право на чтение для всех пользователей и групп (%.%): $ chacl "user2.class,rw-,%.%,-r" funfile $ lsacl funfile (user2.class,rw-)(user3.%,rw-)(%.class,r--) (%.%,---) funfile To же самое могло быть реализовано с помощью следующей команды: $ chacl "(user2.class,rw) (%.%-r)" funfile В данном примере для user2 из группы class ACL будет удален: $ chacl -d "user2.class" funfile $ lsacl funfile (user3.%,rw-)(%.class,r--) (%.%,---) funfile Доступ к файлам - резюме Permission ls (ll, ls -l) chmod umask chown chgrp su newgrp Права на чтение, запись, выполнение файла Определение прав доступа, установленных для файла Изменение прав доступа к файлу Изменение прав доступа, назначаемых по умолчанию Изменение владельцев файла Изменение группы файла Изменение идентификатора пользователя Изменение идентификатора группы пользователя •Все каталоги, входящие в полное маршрутное имя файла, должны иметь право на выполнение. •С целью защиты файла, удаляйте право на запись в этот файл и каталог, в котором он находится. •Только владелец пользователя (или суперпользователь) может изменить для него права доступа, владельца или группу. Модуль 6 Введение в редактор vi Что представляет собой редактор vi? • • • • • – – – – – – William Joy, Калифорнийский университет vi - это экранный текстовый редактор поставляется в большинстве версий системы UNIX управляется командами включает следующие классы команд: общеорганизующие управления курсором вставки текста удаления текста вставки ранее удаленного текста изменения текста vi: Начало сеанса работы Синтаксис: vi [имя_файла] Примеры Начало сеанса редактирования файла $ vi file1 file1 file1 file1 vi file1 Диск Keyboard Все изменения при редактировании выполняются над копией файла, размещенной в оперативной памяти vi: Режимы работы редактора •Командный режим - нажатия клавиш интерпретируются как команды –исходным является режим, когда начинается сеанс vi редактирования –нажатие клавиши <Esc> переводит вас в командный режим –vi команды не отражаются на экране –ex команды префиксируются двоеточием(:) и отображаются на экране •Режим ввода - информация, соответствующая нажатым клавишам вводится в файл ESC : / ? Режим последней строки Командный режим Return i I a A o O Режим ввода vi: Сеанс редактирования содержимое файла строки в конце файла Это пример содержимого файла test, который будет рассматриваться далее ~ ~ ~ Пометки строк, ~ которые не существуют ~ в файле ~ : ex команды сообщения о режиме работы курсор vi:Завершение сеанса редактирования <Esc> ZZ <Return> <Esc>:wq! <Return> <Esc>:q! <Return> Сохранение файла на диске (на экране не отображается) Сохранение файла на диске и выход из редактора Выход без сохранения Команды управления курсором (1) h или <BackSpace> j k l или <Space> #w #b Перемещение курсора на одну позицию влево #e $ ^ или 0 Перемещение к концу (end) следующего слова Перемещение вниз на одну строку Перемещение вверх на одну строку Перемещение курсора на одну позицию вправо Перемещение вперед на слово (word) за словом Перемещение назад на слово (backword) за словом Перемещение в конец текущей строки Перемещение в начало текущей строки Команды управления курсором (2) G #G :# <Ctrl>+<g> <Return> <Ctrl>+<b> <Ctrl>+<f> <Ctrl>+<u> <Ctrl>+<d> L M H <Ctrl>+<l> Переход (Go) в конец файла Переход (Go) на строку с номером # Переход на строку с номером # Вывод номера текущей строки Переход к первому непустому символу на следующей строке Вывод предыдущего (back) содержимого экрана Вывод следующего (forward) содержимого экрана Возврат вверх (up) на половину экрана Переход вниз (down) на половину экрана Переход к последней (last) строке экрана Переход к средней (middle) строке экрана Переход к первой строке экрана (на первую строку, первый символ) Перерисовка экрана Режим ввода Для переключения в режим ввода используются следующие команды: a Добавление (append) текста после курсора i Добавление (insert) текста перед курсором O Открытие (Open) пустой строки над текущей строкой o Открытие (open) пустой строки под текущей строкой A Добавление (Append) текста в конец строки I Вставка (Insert) текста с начала строки В режиме ввода: <Return> Появление новой пустой строки (можно разрезать строки) <BackSpase> Возвращение влево для исправления введенного <Esc> Окончание режима ввода. Возвращение в командный режим Удаление текста: команды x,dw,dd,dG #x #dw #dd dG d$ d^ Удаление (X out) символа над курсором Удаление (Delete) текущего слова (Word) Удаление текущей строки Удаление всех строк от текущей до последней строки файла Удаление конца строки (от текущей позиции) Удаление начала строки (до текущей позиции) Можно задать число, показывающее сколько раз должна быть повторена команда. Например: 3dd - удалить 3 строки Команды отмены произведенных изменений u U Отмена (undo) последнего изменения Отмена (Undo) всех изменений в текущей строке Перемещение текста: команды p и P. dобъект p P Удаление объекта и сохранение его в буфере Вставка (paste) содержимого буфера в текст после курсора Вставка (Paste) содержимого буфера в текст перед курсором Копирование текста: команды yw, yy Копирование (yank) текущего слова в буфер Копирование текущей строки Копирование строк от текущей до конца файла Копирование части строки от курсора до конца строки y^ Копирование части строки от курсора до начала строки Список команд копирования и вставки yобъект Копирование (yank) объекта в буфер p Вставка (paste) содержимого буфера в текст после курсора P Вставка (Paste) содержимого буфера в текст перед курсором #yw #yy yG y$ Изменение текста: команды r, R, cw, . rсимвол R #сw #cc cG c$ c^ . Заменяет (replace) символ, помеченный курсором на символ Заменяет (Replace) все символы строки, пока не нажата клавиша <Esc> Изменение текущего слова Изменение всей текущей строки Изменение всех строк файла от текущей до последней Изменение части строки от курсора до конца строки Изменение части строки от курсора до начала строки Повтор последнего действия по изменению текста, включая удаление Поиск текста: команды /, n, N /текст ?текст n N Поиск строки, содержащей заданный текст, начиная от текущей строки до конца файла с переходом на начало файла Поиск строки, содержащей заданный текст, начиная от текущей строки до начала файла с переходом на конец файла Поиск следующего вхождения в файл заданной строки текста Поиск предыдущего вхождения в файл заданной строки текста Поиск текста по шаблону [o0]ld_text ^текст текст$ . символ* .* Поиск old_text или 01d_text. Поиск строки начинающейся с текста Поиск строки заканчивающейся на текст Поиск по любому одиночному символу. Поиск по символу, который может не встретиться ни разу или любое число раз. Поиск по любому символу, который может не встретиться ни разу или любое число раз. Список регулярных выражений (шаблонов для поиска) [a-z A-Z 0-9] Определяет класс символов, из которого формируется образец для сопоставления. Знак "тире" (—) означает допустимый диапазон символов. Квадратные скобки [] определяют только один символ. ^текст Текст от начала строки. текст$ Текст от конца строки. . Соответствует любому одному символу. символ* Определяет ноль или любое число повторений символа Примеры составления шаблонов / [Tt]he Поиск очередной строки со словом "The" или "the" / [o0] [nN] [eE] Поиск строки со словом "one", написанным любым из указанных типом символов вне зависимости от позиции в слове (т. е. oNe, One, oNE и т.п. одно и то же) /bo*t Поиск строки, содержащей символ ”b", за которым может быть ноль или любое количество символов "о", за которым, в свою очередь, следует символ "t". Т.е. подходящими окажутся такие слова: "bt", "bottom", "boot", "booot" и т. д. /^ [abc] . * Поиск очередной строки, начинающейся символом "а", " b" или "с". Т. е. это надо понимать так, что подойдет любая строка, начинающаяся с символа "а", "Ь" или "с", вне зависимости от того есть или нет за любым из них какой-либо символ (символы) /finally.$ Поиск очередной строки, оканчивающейся на слово "finally", за которым следует любой символ. Т. е. подойдет любая из строк, оканчивающаяся следующим образом: «finally.», «finnallyA», «finallyZ» Глобальный поиск и замена - команды ex :m,ns/шаблон/новый_текст/[g] Примеры :1, $s/one/two/ В каждой строке, с первой по последнюю ($), заменить только первое вхождение слова “one” на слово “two” :.,10s/[oO] [nN] [eE]/two/g Во всех строках, начиная с текущей по 10-ю, заменить каждое вхождение “one”, причем не важно строчными и.или прописными символами оно представлено, на слово “two” Глобальный поиск и замена - команды ex :m,ns/шаблон/новый_текст /[g] m ,n Определяют строки файла, которые обрабатываются командой s Означает выполнение команды замены (substitute) шаблон Указывает образец текста для выполнения поиска новый_текст g Указывает текст, на который заменяется текст, найденный по образцу Задает выполнение команды глобально (globally) в строке Команды ex :w запись текущего содержимого буфера на диск :m,nw файл запись строк с m-ой по n-ую из текущего буфера в файл :w файл запись текущего буфера в файл :e файл загрузка файла в буфер редактирования, замещающего старое содержимое буфера :e ! отмена всех изменений в буфере перезагрузкой в него файла с диска :r файл добавление содержимого файла после текущего положения курсора :! chm выполнение команды chm :set all вывод всех опций сеанса редактирования :set nu включение опции нумерования строк :set nonu выключение опции нумерования строк Команды ex :set опция включение опции режима редактирования :set noопция выключение опции режима редактирования :set all вывод всех опций сеанса редактирования : map отображение на экране клавиш, используемых в командном режиме :map! отображение на экране клавиш, используемых в режиме ввода Пример :set showmod включение вывода сообщения о режиме работы :set noshowmod выключение вывода сообщения о режиме работы Модуль 7. Shell: основы Что такое Shell? Интерпретируемый язык программирования Подстановка команд Конвейеры Выполнение команд Средства настройки среды Ядро Аппаратура Shell Назначение переменных ОС Shell Перенаправление ввода/вывода Генерация имен файлов Подстановка переменных Пользователи Сравнение характеристик shell'ов Характеристики Описание POSIX Bourne Когn С Предыстория (буфер) команд Позволяет сохранять команды в буфере и затем модифицировать Да Нет Да Да Да Нет Да Нет Да Нет Да Да Да Нет Да Да Да Да Да Нет Да Нет Да Да их и использовать вновь Редактирование Способность изменять текущую командных строк или ранее выполнявшиеся командные строки с помощью текстового редактора Автоматическое Способность автоматически завершение имен файлов заканчивать вводимые с клавиатуры имена файлов в командных строках Команда alias Возможность изменять имена команд, осуществлять автоматическое включение опций команд или использовать короткие псевдонимы для длинных командных строк Ограниченные shell'ы Средство защиты, обеспечивающее создание управляемой среды пользователя с ограниченными возможностями Управление Средства для трассировки и заданиями доступа к процессам, выполняемым в фоновом режиме Возможности POSIX shell'a • Интерфейс пользователя с расширенными возможностями -Установка псевдонимов команд - Автоматическое завершение имен файлов - Механизм буферирования команд - Повторный вызов и редактирование командных строк - Управление заданиями - Расширенные возможности команды cd - Расширеннные возможности программирования Установка и отмена псевдонимов команд Синтаксис: alias [имя[=строка]] unalias имя Примеры: установка псевдонима отмена псевдонима $ alias dir=ls $ alias mroe=more $ alias mstat=/home/tricia/projects/micron/status $ alias laser="lp -dlaser" $ laser fileX request id is laser-234 (1 file) $ alias выводит установленные псевдонимы команд …. $ alias mroe выводит псевдоним команды mroe mroe=more Автоматическое завершение имен файлов $ more fra <Esc><Esc> $ more frankenstein <Return> …….. $ more abc <Esc> <Esc> $ more abcdef <Esc> = 1)abcdefXlmnop 2)abcdefYlmnop $ more abcdef Введите <а> для добавления, затем X или Y, после чего нажмите <Esc> <Esc>. Соответствующее имя файла будет автоматически завершено shell'ом Автоматическое завершение имен файлов(2) $ cd tr <Esc> <Esc> do <Esc> <Esc> r <Esc> <Esc> $ cd tree/dog.breads/retriiver Буферирование команд •Shell сохраняет команды, которые вводит пользователь в файле предыстории •Команда history выводит на экран последние 16 введенных команд • Ранее введенные команды можно вызвать повторно, отредактировать и запустить вновь Синтаксис: history [-n|a z] Вывод на экран предыстории команд Пример: $ history -2 Выдача списка из последних двух команд 15 cd 16 more .profile $ history 3 5 Вывод списка команд с номерами от 3 до 5 3 date 4 pwd 5 ls Буферирование команд(2) Опции: -n вывод n последних команд az вывод команд с номерами от a до z Переменные HISTSIZE HISTFILE количество доступных пользователю ранее вводимых команд (по умолчанию 128) определяет имя текстового файла, создаваемого лоя хранения вводимых команд (по умолчанию .sh_history) Повторный ввод команд • Для повторного ввода предшествующей команды с номером с следует ввести команду г с Пример: $ history 3 5 Вывод на экран списка команд с номерами от 3 до 5 3 date 4 pwd 5 ls $r4 Запуск команды с номером 4 pwd /home/kelley Повторный ввод команд(2) • Вместо номера команды можно ввести первый символ имени команды, в результате будет выполнена последняя команда, хранящаяся в буфере предыстории, начинающаяся с этого символа Пример: $ history 1 date 2 cat file1 3 ll $rd Mon Jul 4 10:05:45 1999 Повторный вызов команд • Используется механизм буферирования команд • Должны быть установлены EDITOR-переменные среды: $ EDITOR=/usr/bin/vi $ export EDITOR - В ответ на приглашение $, нажмите <Esc> и используйте обычные команды редактора vi для просмотра ранее введенных команд: · k - просмотр буфера команд назад · j - просмотр буфера команд вперед · nG - выдача на экран командной строки с номером п - Нажмите <Return> для исполнения команды Редактирование командной строки •Обеспечивается возможность изменять текущую или ранее введенную командную строку • Нажмите клавишу <Esc> для входа в командный режим • Вызовите требуемую команду - нажимая клавишу <k> пока команда не появится на экране - вводя номер команды, а затем G •Для редактирования командной строки используйте команды редактора vi • Не используйте клавиши со стрелками • Нажмите <Return> для запуска модифицированной команды Среда пользователя •Среда пользователя описывает сеанс работы с системой для программ, которые он запускает. Синтаксис: env Пример: $ env НОМЕ=/home/gerry EDITOR=vi TERM=70092 … PATH=/usr/bin:/usr/contrib/bin:/usr/local/bin:\ /home/gerry/bin Среда пользователя(2) Среда пользователя содержит следующую информацию: •Маршрутное имя начального каталога пользователя •Куда посылать электронную почту пользователя •Часовой пояс, в котором работает пользователь •Где shell будет искать команды •Тип терминала и размеры его экрана Среда пользователя(3) Перечень наиболее общих переменных среды и их смысловое содержание TERM, COLUMNS и LINES Описывают параметры используемого терминала HOME Маршрутное имя начального каталога PATH Путь поиска команд LOGNAME ENV и HISTFILE Входное имя пользователя, задаваемое при входе в систему Специальные переменные POSIX shell'a Некоторые из этих переменных устанавливаются для каждого пользователя самой системой, другие устанавливаются явно в /etc/profile или .profile. Установка переменных shell'a •Переменная shell'a имеет имя, которому ставится в соответствие некоторое значение. •Значение переменной может быть изменено. • Некоторые переменные shell'a определяются в процессе входа пользователя в систему. •Пользователь может определить новые переменные shell'a. Синтаксис: name=value Пример: $ PATH=/usr/bin/Xll:/usr/bin Две важные переменные •Переменная PATH - список каталогов, в которых shell ищет вводимые пользователем команды •Переменная TERM - описывает для запускаемых пользователем программ тип терминала и размер экрана Пример: $ env PATH=/usr/bin:/usr/contrib/bin:/usr/local/bin TERM=hp Что происходит при входе в систему? 1. getty •выводит содержимое файла /etc/issue •выдает приглашение login: •запускает процесс login 2. login •определяет допустимость введенного имени пользователя и пароля •помещает пользователя в начальный каталог •запускает shell пользователя 3. shell •выполняет /etc/ profile или /etc/csh.login •выполняет . profile или . login, находящиеся в пользовательском каталоге •выполняет .kshrc если файл создан пользователем и его имя присвоено переменной ENV в файле .profile •запускает пользовательский shell Стартовые файлы shell-a Если shell следующего типа... Локальной входной процедурой является. Korn(/usr/bin/ksh) .profile .kshrc Bourne (/usr/old/bin/sh) POSIX(/usr/bin/sh) .profile .profile .kshrc Restricted (/usr/bin/rsh, /usr/bin/rksh) .profile С(/usr/bin/csh) .login .cshrc Внутренние команды shell икоманды UNIX Внутренние команды встроены в shell: set, while, if, for Команды UNIX находятся в /usr/bin: cd ls more file Система находит команды UNIX, используя переменную PATH. Поиск команд - команда whereis Синтаксис: whereis [-b|-m|-s] команда Просматривает список каталогов для поиска указанной команды Примеры: $ whereis if if : $ $ whereis ls ls: /sbin/ls /usr/bin/ls /usr/share/man/man1.Z/ls.1 $ $ whereis cd cd: /usr/bin/cd /usr/share/man/man1.Z/cd.1 $ $ whereis holdyourhorses holdyourhorses : Поиск команд - команда whereis(2) Опции -b поиск только по двоичным кодам -m поиск по описаниям команды -s поиск по исходным текстам Модуль 8. Shell: расширенные возможности Shell-подстановки •Подстановка переменных •Подстановка команд •Тильда-подстановка Подстановки используются для выполнения командных строк. увеличения скорости ввода и Shell: хранение переменных Локальные переменные color=blue count=3 dir_name=/home/user3/tree Программный код /usr/bin/sh Переменные среды PS1=$ PATH=/usr/bin:/usr/contrib/bin HOME=/home/user3 TERM=70094a SHELL=/usr/bin/sh Shell: вывод на экран всех переменных, содержащихся в данный момент в среде $ env MANPATH=/usr/share/man:/usr/contrib/man:/usr/local/man PATH=/usr/bin:/usr/ccs/bin:/usr/contrib/bin:/usr/local/bin LOGNAME=user3 ERASE=^H SHELL=/usr/bin/sh HOME=/home/user3 TERM=hpterm PWD=/home/user3 TZ=PST8PDT EDITOR=/usr/bin/vi Shell: установка значений переменных Синтаксис: переменная=значение Пример: $ color=lavender Установка локальной переменной $ count=3 Установка локальной переменной $ dir_name=tree/car.models/ford Установка локальной переменной $ PS1=hi_there$ Изменение переменной среды Подстановка переменных Синтаксис: $переменная Указывает shell’у выполнить подстановку переменной Пример: $ echo PATH$ /usr/bin:/usr/contrib/bin:/usr/local/bin $PATH=$PATH:$HOME:. $ echo PATH$ /usr/bin:/usr/contrib/bin:/usr/local/bin:/home/user3:. $echo $HOME /home/user3 $ file_name=$HOME/file1 $ more $file_name <contents of /home/user3/file1> Использование фигурных скобок ({}) •Пусть есть две переменные с именами file и file1. Этим переменным могут быть присвоены значения с помощью следующих операторов: $ file=this $ file1=that $ echo $fileand$file1 ищет переменные fileand и file1 sh: fileand: parameter not set $ echo ${file}and$filel thisandthat ищет переменные file и file1 Фигурные скобки могут использоваться для выделения имени переменной из окружающего текста. Подстановка переменных(2) $ dir_name=tree/car.models/ford $ echo $dir_name tree/car.models/ford $ ls -F $dir_name sedan/ sports/ $ my_ls="ls -aFC" $ $my_ls ./ file.1 tree/ ../ file.2 $ $my_ls $dir_name . / .. / sedan/ sports/ $ cd /tmp $ dir_name=/home/user2/tree/dog.breeds/retriever $ $my_ls $dir_name ./ ../ golden labrador mixed Использование абсолютного маршрутного имени в качестве значения переменной, которая представляет собой имя файла или каталога, позволяет пользователю вне зависимости от местонахождения в файловой системе, получать доступ к файлу или каталогу Подстановка команд Синтаксис: $(команда) Пример: $pwd /home/user2 $curdir=$(pwd) $echo $curdir /home/user2 $cd /tmp $pwd /tmp $cd $curdir $pwd /home/user2 $curdir2=`pwd` $echo $curdir /home/user2 Указывает shell’у выполнить подстановку команды Тильда-подстановки Если слово начинается со знака "тильда" (~), то для этого слова формируется расширение. Следует заметить, тильда — подстановка выполняется только если знак (~) указывается в начале слова, а в случае /~home/users тильда— подстановка не осуществляется. Тильда—подстановки выполняются в соответствии со следующими правилами: •Отдельный знак (~) или предшествующий знаку (/) заменяется на значение переменной HOME. •Тильда с последующим знаком +, заменяется на значение переменной PWD. Переменная PWD устанавливается командой cd при переходе в новый текущий каталог. •Тильда с последующим знаком —, заменяется на значение переменной OLDPWD. Переменная OLDPWD устанавливается командой cd для предыдущего рабочего каталога •Если за знаком тильда следуют несколько символов, а затем символ /, то shell пытается установить не являются ли эти символы именем пользователя в системе. Если это так, то последовательность символов заменяется маршрутным именем начального каталога пользователя. Символ ~ может быть помещен в псевдоним команды. Тильда-подстановки -пример $ echo $HOME /home/user3 $ echo ~ /home/user3 $ echo $PWD /home/user3/tree $ ls ~+/poodle /home/user3/tree/poodle $ echo $OLDPWD /home/user3/mail $ ls ~/home/user3/mail/from.mike /home/user3/mail/from.jim $ echo ~tricia/file1 /home/tricia/file1 Вывод значений переменных env set unset Вывод значений переменной среды. Это команда системы UNIX из каталога /usr/bin/env Вывод на экран всех определенных к данному времени переменных (локальных и переменных среды), а также их значений. Это команда shell. Удаление значения переменной. Это команда shell. Вывод значений переменных-пример $ echo $HOME /home/user3 $ env HOME=/home/user3 PATH=/usr/bin:/usr/contrib/bin:/usr/local/bin SHELL=/usr/bin/sh $ set HOME=/home/user3 PATH=/usr/bin:/usr/contrib/bin:/usr/local/bin SHELL=/usr/bin/sh color=lavender count=3 dir_name=/home/user3/tree $ unset dir_name Экспортирование локальных переменных в среду Синтаксис: export [переменная[=значение]] Экспортирование переменной в среду Пример: $ color=lavender $ export color $ export count=3 $ export export PATH=/usr/bin:/usr/ccs/bin:/usr/contrib/bin:/usr/local/bin export color=lavender export count=3 Это встроенная команда shell. Передача переменных в приложение Процесс - выполняющаяся программа. При вводе пользователем имени приложения (или команды) в ответ на приглашение shell, создается порожденный процесс, который исполняется по шагам: 1. fork - порождает параллельный процесс, который дублирует shell-процесс пользователя, включая код программы и области локальных данных и данных среды. 2. exec - заменяет кодовый сегмент и область локальных данных порожденного процесса на программный код и область локальных данных требуемого приложения., затем выполняет процесс затребованного приложения, возвращает управление родительскому процессу. Существует один путь передачи данных порожденным процессам - через среду. Наблюдение за процессами ps [-f] выводит на экран информацию о выполняемых (или ожидающих) процессах в системе Выдает: UID идентификатор владельца процесса PID идентификатор процесса PPID идентификатор родителя процесса STIME начальное время процесса TTY идентификатор терминала, с которого запущен процесс TIME совокупное время выполнения процесса COMMAND команда,соответствующая данному процессу exec команда замещение текущего процесса (это встроенная команда shell). Наблюдение за процессами $ ps -f UID PID user3 4702 user3 4895 PPID 1 4702 С 1 18 STIME TTY TIME COMMAND 08:46:40 ttyp4 0:00 -sh 09:55:10 ttyp4 0:00 ps -f PPID 1 4702 4896 C 0 1 18 STIME TTY 08:46:40 ttyp4 09:57:20 ttyp4 09:57:26 ttyp4 PPID 1 4702 C 0 18 STIME TTY TIME COMMAND 08:46:40 ttyp4 0:00 -sh 09:57:26 ttyp4 0:00 ps -f $ ksh $ ps -f UID PID user3 4702 user3 4896 user3 4898 TIME COMMAND 0:00 -sh 0:00 ksh 0:00 ps -f $ exec ps -f UID PID user3 4702 user3 4897 Порожденные процессы и среда •Порожденные процессы не могут изменить среду родительских процессов. Пример: $ export color=lavender $ ksh (создание порожденного процесса $ ps -f UID PID PPID С STIME TTY user3 4702 1 0 08:46:40 ttyp4 user3 4896 4702 1 09:57:20 ttyp4 user3 4898 4896 18 09:57:26 ttyp4 $ echo $color lavender $ color=red $ echo $color red $ exit (выход из порожденного процесса shell) $ ps -f (возвра г в родительский процесс) UID PID PPID С STIME TTY user3 4702 1 0 08:46:40 ttyp4 user3 4895 4702 1 09:58:20 ttyp4 $ echo $color lavender shell) TIME 0:00 0:00 0:00 COMMAND -sh ksh ps -f TIME 0:00 0:00 COMMAND -sh ps -f Модуль 9 Shell: генерация имен файлов Генерация имен файлов:введение Интерпретируемый язык программирования Выполнение команд Конвейеры Shell Перенаправление ввода/вывода Установки параметров среды export переменная env Присвоение значений переменным Подстановка переменных Генерация имен файлов * ? [ ] Подстановка команд переменная=значение set $переменная переменная=$(команда) Генерация имен файлов (расширение имен файлов):введение • Символы генерации имен файлов интерпретируются shell`ом • Shell будет генерировать имена файлов, удовлетворяющие заданному шаблону • Генерация имен файлов осуществляется перед выполнением команды • Команда будет оперировать со сгенерированными именами файлов Символы генерации имен файлов ? Соответствует любому одному символу за исключением лидирующей точки [] Определяет группу символов Определяет группу символов, принадлежащих заданному диапазону Отвергает заданную группу символов ! * Соответствует произвольному числу символов, в том числе и нулевому, исключая лидирующую точку Генерация имен файлов и файлы с точкой •Символы генерации имен файлов никогда не породят имя файла, начинающееся с точки •В файлах, чьи имена начинаются с точки, она должна быть всегда указана явно Генерация имен файлов:символ ? ? Соответствует любому одному символу за исключением лидирующей точки Примеры $ ls -a …. .zz abc abcd abcdef abcz bbabb cyz zzayy $ echo ??? Результат: abc cyz $ echo abc? Результат: abcd abcz $ echo ??a?? Результат: bbabb zzayy $ echo .?? Результат: .zz $ echo ? Результат: ? Генерация имен файлов:символы [ ] [] Определяет группу символов, из которой может подойти лишь один Примеры $ ls -a …. .zz 1G 2G 7G 15G Ant Cat Dog abc abcdef ba cyz $ echo [abc]?? Результат: abc cyz $ echo [1-9][A-Z] Результат: 1G 2G 7G $ echo [!A-Z]?? Результат: 15G abc cyz Генерация имен файлов:символ * * Соответствует произвольному числу символов, в том числе и нулевому, исключая лидирующую точку Примеры $ ls -a …. .profile ab.dat abcd.dat abcde abcde.dat $ echo * Результат: ab.dat abcd.dat abcde abcde.dat $ echo .* Результат: .profile $ echo *.dat Результат: abcd.dat abcde.dat $ echo *e Результат: abcde Модуль 10 Shell: использование кавычек Использование кавычек:введение • Ряд символов имеет «специальный» смысл для shell`а: - пробел - возврат каретки -$ -# -* - <> • «Закавычивание» позволяет специальных символов. отменить особый смысл Символы закавычивания Обратный слэш Одиночные кавычки Двойные кавычки \ ‘ “ «Закавычивание»: символ \ \ Отменяет специальный смысл непосредственно следующего за ним символа Пример: $ echo the \$ text the $text $ color=red\ white\ and\ blue $ echo the value of \$color is $color the value of $color is red white and blue $ echo one two \ >three four one two three four «Закавычивание»: символ ‘ ‘ Отменяет специальный смысл всех символов, заключенных между одиночными кавычками Пример: $ color=‘red white and blue’ $ echo ‘the value of \$color is $color’ the value of \$color is $color $ echo ‘the value of $color is’ $color the value of $color is red white and blue «Закавычивание»: символ “ “ Отменяет специальный смысл всех символов, заключенных между двойными кавычками, за исключением \, $, {имя переменной}, $(команда) и “ Пример: $ color=“red white and blue” $ echo “the value of \$color is $color” the value of $color is red white and blue $ cur_dir=“$LOGNAME - your current directory is $(pwd)” $ echo $cur_dir user3 - your current directory is /home/user3/tree $ echo “they’re all here, \\, ‘, \” “ they’re all here, \, ‘, “ Модуль 11 Shell: перенаправление ввода и вывода Перенаправление ввода и вывода :введение Интерпретируемый язык программирования Выполнение команд Конвейеры Shell Перенаправление ввода/вывода cmd > file cmd2 > f.err cmd < file Установки параметров среды export переменная env Присвоение значений переменным Подстановка переменных Генерация имен файлов * ? [ ] Подстановка команд переменная=значение set $переменная переменная=$(команда) Перенаправление ввода и вывода: введение • Перенаправление вывода позволяет направить вывод команды в некоторый файл, отличный от терминала пользователя. • Перенаправление ввода дает возможность команде получить исходную информацию из файла, а не с клавиатуры. stdin, stdout, stderr Файл Устройство Дескриптор файла stdin Клавиатура 0 stdout Экран 1 stderr Экран 2 Перенаправление ввода: < Любая команда, читающая ввод со стандартного ввода, может за счет перенаправления принимать его из другого файла Пример: $ cat remind Your mother’s birthday is November 29 $ mail user < remind ! Перенаправление ввода не изменяет содержимое файла ввода Перенаправление вывода: > и >> Любая команда, отправляющая результат на stdout, может перенаправить его в другой файл Пример: Создание/Перезапись Создание/Добавление $ date > date.out $ ls >> ls.out $ date > who.log $ who >> who.log $ cat > cat.out $ ls >> who.log ввод текста <Ctrl>+<d> ! Один и тот же файл не может быть одновременно открыт для перенаправления и ввода и вывода. Файлы ввода и вывода должны быть разными. В противном случае можно потерять исходное содержимое файла. cat f1 f2 > f1 - здесь будет потеряно содержимое файла f1. Перенаправление протокола: 2> и 2>> Любая команда, выводящая сообщения об ошибках в стандартный протокол, может перенаправить его в другой файл Пример: $ cp 2> cp.err $ cp 2>> cp.err $ more cp.err …… …… Создание/Перезапись Создание/Добавление Что такое фильтр? •Читает стандартный ввод и генерирует стандартный вывод. •Осуществляет фильтрацию входного потока или файла. •Посылает результаты на экран, не изменяя входной поток или файл. •Обрабатывает вывод других команд, когда они используются совместно с перенаправлением вывода Пример: cat, grep,sort,wc wc - подсчет количества строк Синтаксис: wc [-lwc ] [файл...] Примеры $ wc file 115 567 3345 file $ wc -l file 115 file $ ls > ls.out $ wc -w ls.out 72 ls.out Подсчитывает число строк(-l), слов (-w) и символов (c) в файле рассматривается как аргумент команды подсчет количества файлов в каталоге wc - подсчет количества строк Примеры $ wc <Return> ab cde dvbnvnsbvbnd dhjhjdhfkdhjf <Ctrl><d> 3 4 30 $ wc < file 105 715 2456 $ wc -w file 715 file подсчитывается количество строк, слов и символов, вводимых со стандартного ввода стандартный файл заменяется на файл file, имя файла не выводится sort - алфавитная и числовая сортировка Синтаксис: sort [-ndutX ] [-k номер_поля] [файл...] Сортирует строки Примеры $ sort file рассматривается как аргумент команды $ tail -1 /etc/passwd user3:xyzbkd:303:30:student user3:/home/user3:/usr/bin/sh 1 2 3 4 5 6 7 $ sort -nt: -k 3 < /etc/passwd $ who > who1 $ sort who1 упорядочивание пользователей в системе по алфавиту $ sort -u who1 упорядочивание с исключением повторяющихся строк sort - опции сортировки none -d -n -u -tX -kn -r лексикографическая (по кодам ASCII) по принципу словаря (игнорируя любые символы, не являющиеся буквами, цифрами или пробелами) числовая уникальная (исключаются повторяющиеся строки) указание разделителя (X - символ-разделитель полей) выбор базового поля n для сортировки( по умолчанию n=1) сортировка в обратном порядке grep - поиск по модели Синтаксис: grep [-cinv] [-e] модель [-e модель][файл...] grep [-cinv] -f файл_с_моделями [файл...] Примеры $ grep user /etc/passwd $ grep -v user /etc/passwd $ grep -in -e like -e love file $ who > who1 $ grep -f who1 /etc/passwd grep - опции -c -i -n -v подсчитывать только число строк, содержащих заданную модель игнорировать регистр букв в модели сопровождать выводимые строки номерами выводить строки, не содержащие заданную модель поиска grep - построение модели В качестве модели можно задать некоторый текст. Такая модель называется регулярным выражением. Для их задания можно использовать некоторые специальные символы: ^ поиск совпадения в начале строки $ поиск совпадения с конца строки . соответствует любому одному символу * предшествующая модель повторяется 0 или более раз [] задается совокупность символов [-] задается диапазон символов [^] инвертирует процесс отбора ! Во избежание проблем при интерпретации shell’ом указанных специальных символов, лучше заключить регулярное выражение в кавычки. Перенаправление ввода и вывода: обзор cmd < файл cmd > файл cmd > > файл Перенаправляет ввод команды cmd из файла cmd 2> файл_ошибок Перенаправляет протокод команды cmd в файл_ошибок Фильтр Команда, которая читает со стандартного ввода и генерирует стандартный вывод. wc sort Подсчет количества слов, строк и символов. grep Осуществляет поиск строк, содержащих модель. Перенаправляет вывод команды cmd в файла Перенаправляет вывод команды cmd и добавляет к файлу Cортировка строк в алфавитном или числовом порядке. Модуль 12 Shell: каналы Конвейеры :введение Интерпретируемый язык программирования Выполнение команд Конвейеры cmd A | cmd B Shell Перенаправление ввода/вывода cmd > file cmd2 > f.err cmd < file Установки параметров среды export переменная env Присвоение значений переменным Подстановка переменных Генерация имен файлов * ? [ ] Подстановка команд переменная=значение set $переменная переменная=$(команда) Зачем используются конвейеры? $ who > temp_file $ wc -l < temp_file $ rm temp_file who ----> wc -l Конвейеры позволяют напрямую использовать вывод одной команды в качестве ввода другой, без создания временного файла. Символ | (символ канала) прием stdin cmd A cmd B прием stdin cmd C генерирует генерирует генерирует генерирует генерирует генерирует stderr stdout stderr stdout stderr stdout Пример: $ ps -ef | more $ ls | more $ ls | sort -r |more Примечание: cmd B должна быть фильтром Требования к командам в конвейере •Любая команда, расположенная слева от символа | должна направлять свой вывод в стандартный вывод (stdout) •Любая команда, расположенная справа от символа | должна читать свой ввод из стандартного ввода (stdin) •Любая команда, расположенная в середине конвейера должна читать свой ввод из стандартного ввода (stdin) и направлять свой вывод в стандартный вывод (stdout), т.е. быть фильтром Перенаправление вывода или конвейеры? Перенаправление ввода/вывода Синтаксис: cmd_out > file or cmd_in < file Пример: who > who.out sort < sort.out Конвейеры cmd_out | cmd_in who | sort Перенаправление в конвейере 3 потока для каждой команды: stdin, stdout, stderr Можно перенаправить потоки, которые не предназначены для конвейера stdout stdin Доступны для перенаправления Доступны для перенаправления cmd A stdin stderr cmd B stdout stderr stdout stdin stdout stdin cmd A stdin stderr cmd B stderr cmd C stdout stderr Пример: $ grep user /etc/passwd | sort > sort.out Требования к командам при перенаправлении в конвейере •Любая команда, расположенная слева от символа | может перенаправить стандартный ввод и протокол, поскольку ее вывод передается следующей команде конвейера. •Любая команда, расположенная справа от символа | может перенаправить стандартный вывод и протокол, поскольку она читает свой ввод с предшествующей команды конвейера. •Любая команда, расположенная между двумя символами | может перенаправить стандартный протокол, т.к. она читает ввод с предшествующей команды и направляет свой вывод следующей команде конвейера. Фильтры cut выделяет указанные столбцы или поля и выводит на stdout tr преобразует символы tee передает вывод в файл и на stdout pr форматирует вывод и направляет на stdout Команда cut (1) Синтаксис: cut -cсписок [файл...] Выделяет колонки или поля из файлов или стандартного ввода cut -fсписок [-dсимвол] [-s] [файл...] Опции: -с выделение колонок -f выделение полей -dсимвол указание символа - разделителя полей -s указание на пропуск любой строки, в которой нет разделителя Команда cut (2) Список - последовательность чисел, которая указывает на подлежащие выделению поля или колонки. Форматы для задания списка полей или колонок: А-В Поля или колонки от А до В включительно АОт поля или колонки А до конца строки -В С начала строки до поля или колонки В А, В Поля или колонки А и В Допустимо использовать любую комбинацию форматов. Команда cut (3) Примеры: $ date | cut -c1-3 Fri $ tail -1 /etc/passwd user3:mdhbmkdj:303:30:student user3:/home/user3:/usr/bin/sh 1 2 3 4 5 6 7 $ cut -f1,6 -d: /etc/passwd user3: /home/user3 $ cut -f1,6 -d: /etc/passwd |sort -r … $ cut -f1,3,5-7 /etc/passwd user3:303:student user3:/home/user3:/usr/bin/sh Команда tr Синтаксис: tr [-s ] строка1 [строка2] Опции: -s строка1 Примеры $ who | tr -s “ “ Преобразует символы строки1на соответствующие им символы строки2 Заменяет все символы строки1, встречающиеся несколько раз подряд на одиночное вхождение преобразование нескольких последовательно расположенных пробелов в один $ date |cut -c1-3 | tr “[[:lower:]]” “[[:upper:]]” перевод символов строк из нижнего регистра в верхний Команда tee (1) Синтаксис: tee [-a ] файл [файл...] Разветвляет конвейер, направляя вывод на стандартный вывод и одновременно в файл Опции: -a Команда tee добавляет вывод в конец файла, не перезаписывая его Когда используется tee ? •Для сбора данных промежуточного вывода в конвейере (tee ставится в середину конвейера). •Для передачи результирующего вывода команды на экран и в файл для удобства протоколирования. Команда tee (2) Примеры: $ who | sort $ who | tee unsorted | sort $ who | tee unsorted | sort | tee sorted $ who | wc -l $ who | tee whoatsystem | wc -l Команда pr (1) Синтаксис: pr [-опция] [файл...] Форматирует стандартный ввод и направляет его в стандартный вывод Опции: Обеспечивает вывод k столбцов сверху вниз Обеспечивает вывод в несколько столбцов, используется совместно с опцией - k, печать осуществляется построчно -t Удаляет заголовок и хвостовик на страницах -d Разделяет строки пустой строкой -wN Устанавливает длину строки в N символов -lN Устанавливает N строк на странице -nCK Задает нумерацию из K цифр, отделяемых от строки символом С ( по умолчанию С - знак табуляции <Tab>) -oN Смещает вывод на N столбцов от левого края страницы -p Устанавливает режим ожидания нажатия клавиши <Return> перед каждой страницей -hстрока Следующая за этой опцией строка используется в качестве заголовка -k -a Команда pr (2) Примеры: $ pr -n3 file нумерует строки $ pr -n3 file | more $ ls | pr -3 вывод 3 столбцов $ grep home /etc/passwd | pr -h “User accounts” добавление заголовка Печать из конвейера … | lp Ставится в конце конвейера, направляет вывод на печать Примеры: $ pr -158 file | lp Request id is laser-226 (standart input). $ ls -F $HOME | pr -3 | tee homedir | lp Request id is laser-227 (standart input). $ grep home /etc/passwd | pr -h “user accounts” | lp Request id is laser-228 (standart input). Конвейеры: обзор Конвейер cmd_out | cmd_in cmd_out | cmd_in_out | cmd_in cut Выделяет указанные колонки или поля для стандартного вывода tr Преобразует символы tee Посылает свой вывод в файл и на стандартный вывод pr Выводит на экран отформатированный вывод, обычно используется командой lp. Модуль 13 Управление процессами Команда ps Синтаксис: ps [-efl] Пример: $ ps PID 1324 1387 $ ps -ef UID root root root root user3 user3 Выводит информацию о состоянии процесса TTY ttyp2 ttyp2 PID 0 1 2 3 1324 1390 PPID 0 0 0 0 1 1324 TIME 0:00 0:00 C 0 0 0 0 3 22 STIME Jun 1 Jun 23 Jun 23 Jun23 18:03:21 18:30:23 COMMAND sh ps TTY ? ? ? ? ttyp2 ttyp2 TIME 0:20 0:00 0:16 12:14 0:00 0:00 COMMAND swapper init vhand statdeamon -sh ps-ef Опции команды ps Без опций -e -f -l Выдача краткой информации о процессах, связанных только с сеансом работы с системой запустившего ее пользователя. Выдача списка всех процессов, развивающихся в системе Получение полной информации о состоянии процессов Получение информации о процессах в т.н. длинном формате Фоновые процессы(1) Синтаксис: командная строка > cmd.out & •Планирует командную строку как задание для фонового режима. •Возвращает приглашение на ввод как только задание запущено. •Перенаправляет вывод фонового процесса с тем, чтобы его вывод не смешивался с интерактивными командами. •Выход из системы приведет к завершению процессов, выполняемых в фоновом режиме. Пользователь получит предупреждение в тот момент, когда попытается выйти из системы,следующего содержания: “There are running jobs”, и поэтому он снова должен ввести команду exit или нажать <Ctrl>+<d>. •Любая из выполняемых в фоновом режиме команд, требующая стандартного ввода, должна читать его из файла за счет перенаправления ввода. Фоновые процессы(2) Пример: $ grep user * > grep.out & [1] 194 $ ps PID TTY TIME COMMAND 164 ttyp2 0:00 sh 194 ttype2 0:00 grep 195 ttyp2 0:00 ps •Shell сообщает номер задания и идентификатор процесса при переводе команды в фоновый режим в том случае, если указана опция monitor в команде set (set -o monitor).При указании этой опции по завершении фонового процесса будет выдано на экран соответствующее сообщение. •Команду, выполняемую в фоновом режиме,нельзя прервать нажатием <Ctrl>+<c>. Такого рода команды могут быть прекращены с помощью команды kill. Весь ввод и вывод фонового процесса должен быть безусловно перенаправлен. Запуск заданий в фоновом/оперативном режиме jobs Выводит список выполняемых заданий <Ctrl>+<z> Приостанавливает оперативный процесс (Символ приостановки определяется во время входа в систему в файле .profile с помощью команды stty susp ^z), выдает приглашение shell’а fg [%номер] Переводит задание с номером в оперативный режим fg [%строка] Переводит любое задание, запущенное командной строкой, начинающееся со строки в оперативный режим bg [%номер] Переводит задание с номером в фоновый режим bg [%строка] Переводит любое задание, запущенное командной строкой, начинающееся со строки в фоновый режим Команда nohup(1) Синтаксис: nohup команда & Делает команду защищенной от выхода пользователя из системы Пример: $ nohup cat * > bigfile [1] 972 $ <Ctrl>+<d> <Return> login: user3 Password: ... $ ps -ef | grep cat UID PID user3 972 PPID 1 … COMMAND cat * > bigfile & Команда nohup(2) •Эта команда является прификсной, т.е. указывается перед запускамой командой. •Если команда запускается с префиксной командой nohup, пользователь может выйти из системы, и при этом UNIX продолжит выполнение фонового процесса даже несмотря на то, что родительский shell уже завершен. При этом родителем команды становится процесс с номером 1 (init). •Если файл вывода не указан, команда nohup сама обеспечит перенаправление вывода в файл nohup.out. Причем в этот файл будет записываться и стандартный вывод (stdout) и стандартный протокол (stderr) Команда nice Синтаксис: nice [-N] командная_строка Запускает процесс на выполнение с пониженным приоритетом. N число в диапазоне от 0 до 19. Пример: $ nice -10 cc myprog.c -o myprog $ nice -5 sort * > sort.out •По умолчанию базовый приоритет равен 10. Большее значение числа соответствует меньшему приоритету. •Приоритеты процессов можно определить с помощью команды ps -l. Они выводятся в столбце с заголовком PRI.Базовое значение приоритета выводится в столбце с заголовком NI. Команда kill(1) Синтаксис: kill [-s имя_сигнала ] PID [PID…] Посылает сигнал указанному процессу. •Прекращает выполнение любой команды, включая запущенные с прификс-командой nohup. •Команда kill не может использоваться по отношению к процессам других пользователей (исключение - суперпользователь). •По умолчанию процессу посылается сигнал TERM. Другие сигналы задаются с помощью опции -s. Наибольшую гарантию, что процесс будет действительно уничтожен обеспечивает сигнал KILL. •Для уничтожения процесс должен быть специфицирован указанием идентификатора процесса, либо номера задания (перед числом следует поставить символ %). •Если процесс указан цифрой 0, kill уничтожает все процессы, связанные текущим shell’ом, включая и его самого. Команда kill(2) Примеры $ cat /usr/share/ man/cat1/* > bigfile1 & [1] 995 $ cat /usr/share/ man/cat2/* > bigfile2 & [2] 996 $ kill 995 [1] - Terminated cat /usr/share/ man/cat1/* > bigfile1 & $ kill -s INT %2 [2] - Interrupt cat /usr/share/ man/cat2/* > bigfile2 & $ kill -s KILL 0 •Команда kill -l выводит все имена сигналов, допустимых в соответствующей реализации системы. Модуль 14 Введение в Shell-программирование Shell-программирование: обзор •Shell-процедура - это обычный файл, содержащий команды системы UNIX •Доступ к файлу должен быть по меньшей мере разрешен на чтение и выполнение •Для выполнения shell-процедуры следует ввести имя файла в ответ на приглашение shell. •Данные могут быть переданы в shell-процедуру через: – переменные среды – аргументы командной строки – использование ввода •Обычно пользователи создают подкаталог bin в своем домашнем каталоге HOME для хранения собственных программ и включают переменную &HOME/bin в свою переменную PATH. Пример shell-процедуры $ cat myprog #this is program myprog date ls -F Выполнение процедуры myprog: $ myprog $ /usr/bin/sh PID=1324 /usr/bin/sh /usr/bin/date myprog # date ls -F /usr/bin/ls PID=1350 PID=1361 PID=1362 Передача данных shell-процедуре(1) •Одним из способов передачи данных процедуре является их передача через среду Пример: $ color=lavender $ cat color1 echo You are now running program: color1 echo the value of variable color is: $color $ chmod +x color1 $ color1 You are now running program: color1 the value of variable color is: $ export color $ color1 You are now running program: color1 the value of variable color is: lavender Передача данных shell-процедуре(2) Пример: $ cat color2 echo The original value of the variable color is: $color echo This program will set the value of color to amber color=amber echo The value of variable color is now $color echo When your program concludes, display the value of the color variable. $ export color=lavender $ echo $color lavender $ color2 The original value of the variable color is: lavender echo This program will set the value of color to amber The value of variable color is now amber When your program concludes, display the value of the color variable. $ echo $color lavender Аргументы shell-процедур(1) Командная строка: $ sh_program $0 arg1 arg2 $1 $2 ... arg23 ${23} Пример: $ cat color3 echo You are now running program: $0 echo The value of command line argument \#1 is: $1 echo The value of command line argument \#2 is: $2 $ chmod +x color3 $ color3 red green You are now running program: color3 echo The value of command line argument #1 is: red echo The value of command line argument #2 is: green .... argX $X Аргументы shell-процедур(2) Пример: Данная shell-процедура инсталлирует программу, специфицированную как аргумент командной строки в каталог bin пользователя. $ cat > my_install echo $0 will install $1 to your bin directory chmod +x $1 mv $1 $HOME/bin echo Installation of $1 is complete $ chmod +x my_install $ my_install color3 my_install will install $1 to your bin directory Installation of color3 is complete $ Специальные переменные shell: # и *(1) # Количество аргументов в командной строке * Строка, содержащая все аргументы командной строки (за исключением $0) Пример: $ cat color4 echo There are $# command line arguments echo They are $* echo The first command line argument is $1 $ chmod +x color4 $ color4 red green yellow blue The are 4 command line arguments They are red green yellow blue The first command line argument is red $ Специальные переменные shell: # и *(2) Усовершенствованный пример программы инсталляции допускает в командной строке несколько аргументов: Пример: $ cat > my_install2 echo $0 will install $# files to your bin directory echo The files to be installed are: $* chmod +x $* mv $* $HOME/bin echo Installation is complete $ chmod +x my_install2 $ my_install2 color1 color2 my_install2 will install 2 files to your bin directory The files to be installed are: color1 color2 Installation is complete Специальные переменные shell: # и *(3) Пример: $ cat list_dir cd $* echo You are in the $(pwd) directory echo The contents of this directory are: ls -F $ list_dir dir1 dir2sh: cd: bad arguments count Команда shift(1) •Сдвигает все строки, отмеченные символом *, влево на n позиций •Уменьшает переменную # на n (по умолчанию n=1) Синтаксис: shift [n] Команду shift полезно использовать для: •доступа к позиционным параметрам в группах, например, совокупности координат x и y •удаления опций из командной строки, предполагая, что они предшествуют аргументам Команда shift(2) Пример: $ cat color5 orig_args=$* echo There are $# command line arguments echo They are $* echo Shifting two arguments shift 2 echo There are $# command line arguments echo They are $* echo Shifting two arguments shift 2; final_args=$* echo Original arguments are: $orig_args echo Final arguments are: $final_args Команда shift(3) $ color5 red green yellow blue orange black There are 6 command line arguments They are red green yellow blue orange black Shifting two arguments There are 4 command line arguments They are yellow blue orange black Shifting two arguments Original arguments are: red green yellow blue orange black Final arguments are: orange black $ Команда read(1) Синтаксис: read переменная [переменная...] Пример: $ cat color6 #This program prompts for user input echo “Please enter your favorite two colors -> \c” read color_a color_b echo The colors you entered are: $color_b $color_a $ chmod +x color6 $ color6 Please enter your favorite two colors -> read blue The colors you enterd are: blue red $ color6 Please enter your favorite two colors -> read blue tan The colors you entered are: blue tan red Позиционные параметры и переменные •Позиционные параметры задаются в командной строке при вызове программы. •Значения переменным присваиваются посредством команды read при вводе данных, осуществляемом в процессе выполнения процедуры. Команда echo и управляющие символы •Это специальные управляющие символы, интерпретируемые командой echo, которые обеспечивают управление строками. •Эти символы интерпретируются командой echo, а не shell’ом. Символ \b \c \f \n \r \t \\ \nnn Действие при печати Возврат на один симол Подавление перехода на новую строку Перевод страницы Новая строка Возврат каретки Символ табуляции Обратный слэш Символ, код ASCII которого nnn Команда read(2) Пример: $ cat > my_install3 echo $0 will install files to your bin directory echo “Enter the names of the files -> \c” read filenames chmod +x $filenames mv $filenames $HOME/bin echo Installation is complete $ chmod +x my_install3 $ my_install3 my_install3 will install files to your bin directory Enter the names of the files -> f1 f2 Installation is complete shell-функции Синтаксис: function имя_функции {shell_текст} или имя_функции (){shell_текст} Пример: $ function install >{ > echo Install file:$1 > chmod +x $1 > mv $1 $HOME/bin > echo Install complete >} $ install myfile Install file: myfile Install complete install() { echo Install file:$1 chmod +x $1 mv $1 $HOME/bin echo Install complete } Дополнительные средства •Комментирование текста shell-процедур с помощью знака # •Cуществует альтернативный запуск shell-процедуры: sh shell-процедура аргументы shell-процедура должна быть доступна для чтения и может не быть исполняема •“Отладчик” для shell-процедур: sh -x shell-процедура аргументы Каждая строка shell-процедуры выводится перед выполнением Модуль 15 Shell-программирование: ветвления Коды завершения Переменная shell’а ? содержит код завершения последней выполненной команды 0 команда выполнена без ошибки (true) не 0 команда завершена в связи с ошибкой (false) Пример: $ true $ echo $? 0 $ ls $ echo $? 0 $ echo $? 0 $ false $ echo $? 1 $cp Usage : cp f1 f2 ... $ echo $? 1 $ echo $? 0 Команда test Синтаксис: test выражение или [ выражение ] Команда test оценивает истинность выражения и формирует код завершения. Значение выражения Код завершения true 0 false не 0 (обычно 1) Команда test может оценивать истинность условия, в качестве аргументов которого могут быть: •целые числа •строки •файлы Команда test ничего не пишет в стандартный вывод. При вызове команды test вторым способом после открывающей и перед закрывающей квадратными скобками должны быть пробелы. Команда test:сравнение чисел Синтаксис : [ число отношение число ] Отношения : -lt -le -gt -ge -eq -ne Пример: $ [ $X -lt 7 ] $ echo $? 0 $ [ $X -gt 7 ] $ echo $? 1 меньше меньше или равно больше больше или равно равно не равно Сравнивает числа в соответствии с отношением Команда test:сравнение чисел Пример: $ [ $XX -eq 3 ] sh: test: argument expected $ [ “$XX” -eq 3 ] [ -eq 3 ] [ “ “ -eq 3 ] XX - NULL Общим правилом является необходимость заключений в двойные кавычки всех выражений вида $переменная, что предотвращает неподходящую замену переменных shell’ом. Команда test:сравнение строк Синтаксис : [ строка1 = строка2 ] Определяется эквивалентность строк [ строка1 != строка2 ] Определяется неэквивалентность строк Пример: $ X=abc $ [ “$X” = “abc” ] $ echo $? 0 $ [ “$X” != “abc” ] $ echo $? 1 После открывающей и перед закрывающей квадратными скобками должны стоять пробелы. Операторы сравнения строк строка1=строка2 истина, если строки идентичны друг другу строка1!=строка2 истина, если строки не идентичны друг другу -z строка истина, если строка нулевой длины -n строка истина, если строка ненулевой длины строка истина, если строка ненулевой длины Заключение переменной в кавычки застрахует от появления синтаксической ошибки Пример: $X=“Yes we will” $[ $X = yes ] вызывает синтаксическую ошибку, интерпретируется shell’ом как [Yes we will = yes ] $[ “$X” = yes ] правильный синтаксис, интерпретируется shell’ом как [“Yes we will” = yes ], и сравнение осуществляется корректным образом. Особенности сравнения чисел и строк Shell трактует все аргументы как числа в случае, если осуществляется сравнение чисел, и все аргументы как строки, если осуществляется сравнение строк. Пример: $ X=03 $ Y=3 $ [ “$X” -eq “$Y” ] $ echo $? 0 $ [ “$X” = “$Y” ] $ echo $? 1 сравнивается число 03 с числом 3 истина, т.к. аргументы равны друг другу, поскольку они числа сравнивается строка «03» со строкой «3» ложь, т.к. аргументы не равны друг другу, поскольку они строки Команда test: тестирование файлов Синтаксис : test -опция имя_файла Опции: -f имя_файла -s имя_файла -r имя_файла -w имя_файла -x имя_файла -d каталог Пример: $ test -f file $ echo $? 0 $ test -d file $ echo $? 1 Оценивает характеристики имя_файла в соответствии с опцией истина, если файл существует и является обычным файлом. т.е. не каталогом и не файлом устройства истина, если файл существует и его размер больше 0 истина, если файл существует и доступен для чтения истина, если файл существует и доступен для записи истина, если файл существует и доступен для выполнения истина, если файл существует и является именно каталогом или [ -f file ] или [ -d file ] Команда test: другие операторы Синтаксис : -o OR (ИЛИ) -a AND (И) ! NOT (НЕ) \ ( \) ГРУППИРОВКА Пример: $ [ “$ANS”=y -o “$ANS”=Y ] $ [ “$NUM” -gt 10 -a “$NUM” -lt 20 ] $ test -s file -a -r file $ test ! -d file $ [ \( $# -eq 2 \) -a \ ( “$1” -eq “-m” \ ) -a \ ( -d “$2” -o -s “$2” \) ] в этом примере проверяется истинность высказывания: «что имеются два аргумента в командной строке» и «что первый аргумент командной строки есть -m” и “что последний аргумент командной строки есть каталог или файл, размер которого больше 0” Между операторами, скобками и аргументами должны стоять пробелы. Команды exit и return Синтаксис : exit [аргумент] •Завершает выполнение shell-программы и формирует код возврата. •Если команда задана без аргументов, то код возврата устанавливается равным коду возврата последней команды, выполненной перед exit. return [аргумент] •Останавливает выполнение функции и возвращает в вызвавшую процедуру аргумент, содержащий код завершения. •Если аргумент не указан, то код зовершения соответствует последней команде, выполненной в функции перед выходом из нее. •Когда прекращение выполнения функции обусловлено какими-то внешними по отношению к ней причинами, то это равносильно exit. Команды exit и return Пример: $ cat exit_test echo exiting program now exit 99 $ exit_test exiting program now $echo $? 99 $ cat rtn_test function rtn { echo return from function return 99 } $ rtn_test return from function $echo $? 99 Конструкция if Синтаксис: (соответствует передаче управления на одну ветвь) if список_А then список_В fi Последовательность выполнения конструкции if: 1. Выполняются команды списка_А команд. 2. Если код завершения последней команды из списка_А равен 0 (ИСТИНА), то выполняются команды из списка_В команд и затем команды, следующие за fi. 3. Если код завершения последней команды из списка_А не равен 0 (ЛОЖЬ), то выполняются команды, следующие за fi. Блок-схема конструкции if if список_А код завершения =0 then список_В fi другие команды код завершения не равен 0 Конструкция if Примеры: 1. if test -s file then echo file exists fi echo hello 2. if grep kingkong /etc/passwd then echo found kingkong fi Конструкция if Примеры: 3. Использование для управления переходом в случае возникновения ошибок при выполнении программы if [ $# -ne 3 ] then echo Incorrect syntax echo Usage: cmd arg1 arg2 arg3 exit 99 fi Конструкция if-else Синтаксис: (соответствует передаче управления на одну из двух возможных ветвей) if список_А then список_В else список_C fi Последовательность выполнения конструкции if-else: 1. Выполняются команды списка_А команд. 2. Если код завершения последней команды из списка_А равен 0 (ИСТИНА), то выполняются команды из списка_В команд и затем команды, следующие за fi. 3. Если код завершения последней команды из списка_А не равен 0 (ЛОЖЬ), то выполняются команды из списка_С команд и затем команды, следующие за fi. Блок-схема конструкции if-else if список_А код завершения не равен 0 код завершения =0 then список_В fi другие команды else список_C Конструкция if-else Пример: if [ $X -lt 10 ] then echo X is less then 10 else echo X is not less then 10 fi Конструкция case Синтаксис: (соответствует передаче управления на одну из множества возможных ветвей) case слово in образец1) список_А ;; образец2) список_В ;; образецN) список_N ;; esac Образцы задаются по формату имен файлов, сравнение основано на проверке двух строк на абсолютно точное совпадение. Могут использоваться следующие специальные символы: * сравнение любой строки символов, включая пустую ? сравнение любого одиночного символа [] сравнение любого одного символа, помещенного между двумя символами обеспечивает сравнение с любым, попадающим в этот интервал | логический оператор OR («ИЛИ») Конструкция case слово образец 1 совпадение список_А несовпадение слово образец 2 несовпадение совпадение список_В ... слово образец N несовпадение esac другие команды ... совпадение список_N Конструкция case Пример: case $ANS in yes) echo O.K. ;; no) echo no go ;; esac case $OPT in 1) echo option 1 ;; 2) echo option 2 ;; 3) echo option 3 ;; *) echo no option ;; esac Конструкция case: примеры задания образцов В образцах конструкции case используются те же специальные символы, что и для генерации имен файлов Пример: $ cat menu_with-case echo COMMAND MENU echo d to display time and date echo w to display logged-in users echo l to list contents of current directory echo Please enter your choice: read choice case $choice in [dD]*) date ;; [wW]*) who ;; l*|L*) ls ;; *) echo Invalid selection ;; esac $ Shell-программирование: ветвления. Заключение. Код завершения Сравнение чисел Сравнение строк Тестирование файлов exit n if, if-else case Возвращает числовое значение после выполнения каждой программы - echo $? [ $число1 -lt $число2 ] [ $строка1 = $строка2 ] test -f имя_файла Завершает программу и формирует код завершения Передача управления осуществляется на основе анализа кода завершения последней команды списка_А Слово сравнивается с каждым образцом по принципу сравнения строк Модуль 16 Shell-программирование: циклы Введение в циклы Назначение : Повторное выполнение совокупности команд Управление: Основано на анализе кода завершения ключевой команды Три вида: while...do...done until... do... done for... do... done Оценивание значений арифметических выражений с помощью let(1) Синтаксис: let выражение или ((выражение)) •let дает возможность использовать в shell-программах арифметические выражения •работает в формате длинного целого •при построении арифметических выражений можно использовать операторы (даны в прорядке убывания приоритета выполнения): Оператор Описание ! * / % + <+ >= < > == != = () Одноместный минус (операция изменения знака арифметического выражения Логическое отрицание Умножение, деление, остаток от деления Сложение, вычитание Сравнение Равно, не равно Присвоение Скобки используются для изменения порядка вычисления Оценивание значений арифметических выражений с помощью let(2) Пример: $ x=10 $ y=2 $ let x=x+2 $echo $x 12 $ let “x=x / (y+1) “ $ echo $x 4 $ (( x=x+1 )) $ echo $x 5 $ x=12 $ let “x < 10” $ echo $? 1 $ (( x > 10 )) $ echo $? 0 $if (( x > 10 )) > then echo x greater > else echo x not greater fi x greater Конструкция while(1) Повторение выполнения когда условие истинно. Синтаксис: while список_А do список_В done Выполнение цикла while происходит следующим образом: 1. Выполняются команды списка_А. 2. Если код завершения последней команды из списка_А равен 0 (true), то выполняется список_В команд. 3. Возвращение к п.1. 4. Если код завершения последней команды из списка_А не равен 0 (false), то управление передается первой команде, следующей за ключевым словом done. Конструкция while(2) while список_А код завершения не 0 false код завершения 0 true do список_В done Конструкция while(3) Пример: $ cat test_while X=1 while (( X <= 10 )) do echo hello X is $X; let X=X+1 done $ test_while hello X is 1 hello X is 2 . . . hello X is 10 • Позаботьтесь о том, чтобы циклы while не оказались бесконечными. В таких циклах управляющая команда всегда возвращает код завершения true. Конструкция while(4) Пример: Повторение выполнения цикла, когда ans соответствует yes ans=yes while [ “$ans” = yes ] do echo Enter a name read name echo $name >> file.names echo “Continue?” enter yes or no read ans done Конструкция while(5) Пример: Повторение выполнения цикла, когда имеются аргументы в командной строке while (( $# != 0 )) do if test -d $1 then echo contents of $1: ls -F $1 fi shift echo There $# items echo left on the cmd line done Конструкция until(1) Повторение выполнения тела цикла до тех пор, пока условие истинно. Синтаксис: until список_А do список_В done Выполнение цикла until происходит следующим образом: 1. Выполняются команды списка_А. 2. Если код завершения последней команды из списка_А не равен 0 (false), то выполняется список_В команд. 3. Возвращение к п.1. 4. Если код завершения последней команды из списка_А равен 0 (true), то управление передается первой команде, следующей за ключевым словом done. Конструкция until(2) until список_А код завершения 0 true код завершения не 0 false do список_В done Конструкция until(3) Пример: $ cat test_until X=1 until (( X > 10 )) do echo hello X is $X; let X=X+1 done $ test_until hello X is 1 hello X is 2 . . . hello X is 10 • Позаботьтесь о том, чтобы циклы until не оказались бесконечными. В таких циклах управляющая команда всегда возвращает код завершения false. Конструкция until(4) Пример: Повторение выполнения цикла, когда ans не станет no ans=yes until [ “$ans” = no ] do echo Enter a name read name echo $name >> file.names echo “Continue?” enter yes or no read ans done Конструкция until(5) Пример: Повторение выполнения тела цикла до тех пор, пока в командной строке не окажется аргументов until (( $# == 0 )) do if test -d $1 then echo contents of $1: ls -F $1 fi shift echo There $# items echo left on the cmd line done Конструкция for(1) Для каждого элемента из списка выполнение цикла повторяется, после чего переменной присваивается значение следующего элемента списка и так до тех пор, пока список не будет исчерпан. Синтаксис: for переменная in список do список_А done Выполнение цикла for происходит следующим образом: 1. Shell-переменной переменная присваивается в качестве значения первая строка из списка. 2. Выполняются команды списка_А. 3. Shell-переменной переменная присваивается в качестве значения следующая строка из списка. 4. Выполняются команды списка_А. 5. Цикл продолжается до тех пор, пока не будут исчерпаны все элементы из списка. Конструкция for(2) for переменная in список присвоение переменной значения следующего элемента списка do список_А done список исчерпан Конструкция for(3) Пример: $ cat test_for for X in 1 2 3 4 5 do echo “2 * $X is \c” let X=X*2 echo $X done $ test_for 2 *1 is 2 2 *2 is 4 2 *3 is 6 2 *4 is 8 2 *5 is 10 Конструкция for(4) Пример: Цикл выполняется по списку, который может быть создан посредством подстановки команд $ cat example_A for NAME in $(grep home /etc/passwd | cut -f1 -d: ) do mail $NAME < mtg.minutes echo mailed mtg.minutes to $NAME done Конструкция for(5) Пример: $ cat example_B for FILE in $* do if test -d $FILE then ls -F $FILE fi done Конструкция for(6) Если требуется использовать один и тот же список несколько раз, то его можно сохранмить в файле. Затем, используя команду cat , можно сгенерировать список для своего цикла for способом, использованным в примере: $ cat students user1 user2 user3 user4 $ cat for_students_file_copy for NAME in $(cat students) do cp test.file /home/$NAME chown $NAME /home/$NAME/test.file chmod g-w,o-w /home/$NAME/test.file echo done $NAME done Использование в списке цикла аргументов командной строки Можно создать список цикла из аргументов командной строки следующим образом: for i in $* do cp $i $HOME/backups done или for i do cp $i $HOME/backups done Конструкции break, continue, exit break [n] Прекращает текущее выполнение цикла и передает управление первой (или с номером n) команде после done. continue [n] Останавливает выполнение текущей итерации цикла и передает управление на начало очередной (или с номером n) итерации вложенного цикла. exit [n] Останавливает выполнение shell-программы и формирует код завершения n. Команды break и continue: примеры while true do echo “Enter file to remove:\c” read FILE if test ! -f $FILE then echo $FILE is not a regular file continue fi echo removing $FILE rm $FILE break done Shell-программирование: циклы. Заключение. let выражение Оценивает значение арифметического выражения ((выражение)) while условие is истина do ... done цикл while until условие is истина do ... done цикл until for переменная in список do ... done цикл for break [n] прерывание цикла continue [n] прекращение выполнения текущей итерации цикла exit [n] прекращение выполнения shell-программы Модуль 17 Shell-программирование: сигналы и прерывания Что такое сигнал? Сигнал - некоторая переменная, передаваемая процессу, когда наступает определенное событие Сигнал Событие EXIT Выход из shell’а HUP Зависание - посылается фоновому процессу при выходе из системы INT <Ctrl>+<c> - прерывание QUIT <Ctrl>+<\> - прекращение работы (генерирует файл ядра) KILL Уничтожение процесса TERM Прекращение работы программы Команда kill передает сигнал, заданный в явном виде, процессу kill [-s сигнал] идентификатор_процесса (PID) Что такое прерывание? Прерывание - способ захватывания сигналов, которые могут быть посланы процессам, и выполнения в соответствии с видам сигнала некоторого действия. Программы обработки прерываний (обработчики прерываний) действия в ответ на прерывания. Команда trap Синтаксис : trap ‘команды’ сигнал [ сигнал... ] выполняются команды по получении сигнала • Команда trap может быть использована в shell-программах с целью перехвата сигнала до того, как он удалит(уничтожит) процесс и выполнения некоторого дополнительного или альтернативного действия. • Команду trap следует применить для указания в явном виде сигналов и связанных с ними соответствующх действий, которые должны быть выполнены. • Команды могут представлять собой список команд системы UNIX, отделяемых ;. Можно бакже создать shell-программу, которая выполнит требуемые действия и указать имя этой программы в качестве аргумента. • Обычно команды trap помещаются в начале shell-программы. Сигналы о прерывании определются shell’ом , когда он читает команду trap. Прерывания активизируются по получении соответствующего сигнала. Команда trap Пример: $ cat > mytrap trap ‘echo bye; exit’ INT QUIT TERM while true do echo hello done $ mytrap hello hello hello bye -------------------------------------- нажать <Ctrl>+<c> $ Команда trap Виды действий с сигналами прерываний : • Перехват сигнала. Вместо прекращения выполнения процесса будут выполнены указанные специальные команды. • Игнорирование сигнала. Используется если shell-программа работает с важными файлами и важно сохранить их содержимое, несмотря на прерывание. • Сбрасывание сигналов прерывания. После захвата или игнорирования команда trap умолчанию.Обычно такое действие связано с завершением процесса. Это не вызовет сброса прерываний по отношению к действиям, которые были заданы раньше, чем задано игнорирование прерываеий. Сигнал NULL посылается процессом при нормальном завершении. Он используется для того, чтобы задать действие, которое должна выполнить shell-программа после нормального завершения процесса. Игнорирование сигналов прерывания Синтаксис : trap ‘ ’ сигнал [ сигнал... ] Пример: $ cat > mytrap2 trap ‘ ’ INT while true do echo hello done $ mytrap2 hello hello-------------------------------------- нажать <Ctrl>+<c> (проигнорирован) hello hello -------------------------------------- нажать <Ctrl>+<\> (проигнорирован) $ Сигнал KILL не может быть проигнорирован! Размещение команды trap в программе Помещайте команду в начале программы для управления удалением временных файлов, если выполнение программы прекращается: trap ‘rm /tmp/tempfile;exit’ INT QUIT TERM Помещайте команду перед критическим участком программы для того, чтобы игнорировать возможные сигналы прерывания: trap ‘ ‘ INT QUIT TERM С помощью команды trap восcтанавливайте действие системы, принятое по умолчанию, когда выполняется участок программы, требующий нормального завершения: trap INT QUIT TERM Сигналы и прерывания: заключения Сигнал Выход из системы <Ctrl>+<c> <Ctrl>+<\> Логическая переменная, посылаемая shell-программе по наступлении определенного события EXIT - сигнал выхода INT - сигнал прерывания QUIT - прекращение работы kill -s сигнал идент_процесса Передача сигнала процессу с номером идент_процесса kill идент_процесса Передача сигнала TERM процессу с номером идент_процесса Передача сигнала безусловного уничтожения процессу с номером идент_процесса Перехват сигнала и запуск команды Просмотр сигналов kill -s KILL идент_процесса trap ‘команды’ сигнал stty -a Модуль 18 Хранение файлов во внешней памяти Запись файлов на ленту •Для записи файлов на ленту вы должны знать имя приборного файла Вашего накопителя на магнитной ленте •Типичные имена: /dev/rmt/0m 9-ти дорожечная лента или DDS лента /dev/rmt/c0t3d0BEST •Выясните у системного администратора, через какой приборный файл осуществляется доступ к накопителю на магнитной ленте. •Следующие команды позволяют создавать резервные копии: tar cpio Команда tar Синтаксис : tar –ключ [f имя_файла ] [файл … ] ведение архива Ключи: с x t r u Создается новый архив Файлы считываются из архива Рассматривается таблица содержимого архива Файлы записываются в конец архива Файлы записываются в архив, если они созданы заново или их содержимое подверглось изменению Опции: Вывод на экран имен файлов при их архивировании или восстановлении по ним содержимого утерянных файлов f файл Указывает файл, куда будет записываться архив. v Команда tar Примеры : Создать архив файлов: $ tar –cvf my_archive myfile $ tar –cvf /dev/rmt/0m myfile Прочитать таблицу содержимого архива файлов: $ tar –tvf my_archive $ tar –tvf /dev/rmt/0m Считать файл из архива: $ tar –xvf my_archive myfile $ tar –xvf /dev/rmt/0m myfile Команда tar Примеры : Создание резервной копии $ (cd directory_name; tar –cvf - *) | (cd target; tar –xvf -) Команда cpio Два режима: cpio –o [cvx] cpio –i [cmdtuvx] Генерация архива. Список файлов читается со стандартного ввода. Архив пишется на стандартный вывод. Восстановление из архива. Архив читается со стандартного ввода. Примеры: Создание архива файлов в текущем каталоге: $ find . | cpio –ocv > my_archive $ find . | cpio –ocv > /dev/rmt/0m Восстановление всех файлов из архива: $ cpio –icdmv < my_archive $ cpio –icdmv < /dev/rmt/0m Опции команды cpio Назначение опции -o -i -c -c Пишется заголовок в ASCII формате - -d Пересоздается в нужном виде структура каталога - -m Остается текущая дата, соответствующая времени внесения изменений (важно для осуществления контроля за хранящимися версиями файлов - -t Вывод таблицы, описывающей содержимое архива - -u Безусловное восстановление (если файл уже существует, то указание этой опции приводит к перезаписи его содержимого) -v -v Выводится список скопированных файлов -x -x Обрабатываются специальные (приборные файлы) Команда cpio Примеры: Чтение таблицы содержимого архива: $ cpio –ict < /dev/rmt/0m Восстановление одного файла: $ cpio –icudm "filename" < /dev/rmt/0m Восстановление всех файлов, чьи имена удовлетворяют заданному образцу: $ cpio –icudm "*filename*" < /dev/rmt/0m Использование команды find при резервном копировании Может создавать список • относительных маршрутных имен find . • абсолютных маршрутных имен find /home/user3 Синтаксис: find список_маршрутных имен [выражение] Модуль 19 Использование сетевых возможностей Что такое локальная сеть? •Пример топологии локальной сети с общей шиной. HP Series 300/400 System ARPA Berkeley NS HP Series 800 System ARPA Berkeley NS PC HP Vectra ARPA Non-HP Non-UNIX System ARPA Терминатор Терминатор HP 3000 System ARPA NS HP 3000 System ARPA NS Non-HP UNIX System ARPA Berkeley HP Series 700 ARPA Berkeley Сервисы локальной сети (LAN) • Две группы сервисов локальной сети: - ARPA сервисы (telnet, ftp) - Berkeley сервисы (rcp, rlogin, remsh) • Сервисы позволяют: - Входить в систему на удаленной машине - Передавать файлы между узлами сети - Осуществлять удаленный доступ к файлам Команда hostname Синтаксис: hostname Сообщает имя Вашего компьютера в сети Примеры : $ hostname fred $ $ more /etc/hosts 192.1.2.1 192.1.2.2 192.1.2.3 192.1.2.1 fred barney wilma betty Для того, чтобы иметь возможность использовать любой сервис локальной сети, вы должны быть зарегистрированы пользователем на удаленной машине Команда telnet Синтаксис: telnet имя_компьютера ARPA сервис для удаленного входа в другой компьютер • Все виды выполняемых вами работ будут реализовываться на удаленной машине. • Ваш компьютер будет только обеспечивать прием и передачу информации на терминал через локальную сеть. •Для прекращения сеанса связи выйдите с удаленной машины, используя <ctrl>+<d>, <Return> или exit. Примеры : $ telnet fred Trying … Connected to fred Escape character is '^]". HP-UX fred 10.0 9000/715 login: Команда ftp (протокол передачи данных) Синтаксис: ftp имя_компьютера ARPA сервис по передаче файлов на удаленную машину и получение их от него. ftp команды: get put ls ? help quit чтение файла с удаленной машины пересылка файла с Вашей машины на удаленную выдача списка файлов, находящихся на удаленной машине выдача списка всех ftp-команд вывод краткого описания команды выход из ftp Команда ftp. Примеры. $ ftp fred Connected to fred. 220 fred FTP server [Version 1.7.109.2.Tue Jul 28 23:46:52 GMT 1992) ready Name (fred:gerry): <Return> Password (fred:gerry) : Enter vour password and press <Return> 331 Password required for gerry. 230 User gerry logged in. Remote system type is UNIX. Using binary mode to transfer files. ftp> put funfile /tmp/funfile 200 PORT command successful. 150 Opening BINARY mlde connection for /tmp/funfile/ 226 Transfer complete. 3967 bytes sent in 0.19 seconds (20.57 Kbytes/sec) Команда ftp. Примеры. ftp> ls /tmp 200 PORT command successful. 150 Opening ASCII mode data connection for /bin/ls /tmp. -rw-rw-rw- 1 root sys 347 Jun 14 1993 exercises -rw-rw-rw- 1 root sys 35 Осt 23 1993 cronfile -rw-rw-rw- l root sys 41 Jul 5 1993 fio -rw-rw-rw- 1 root sys 153 Осt 23 1593 initlaserjet 226 Transfer complete. ftp> quit 221 Coodbye. $ Команда rlogin Синтаксис: rlogin имя_компьютера Berkeley сервис по удаленному входу в другой компьютер •rlogin пытается загрузить вас, используя локальной пользовательское имя. •Если системный администратор сконфигурировал файл/etc/hosts.equiv, то пароль запрашиваться не будет •Если в Вашем домашнем каталоге создан файл .rhosts, то вход в удаленный компьютер также можно вести без ввода пароля (информация о формате файла .rhosts находится в hosts.equiv(4)) . Пример: $ hostname barney $ rlogin fred Password: $ hostname fred $ exit $ hostname barney Команда rcp Синтаксис: rcp имя_пути_файла_источника имя_пути_файла_преемника Berkeley сервис, обеспечивающий передачу файла на или с удаленном машины. Работает подобно команде cp. •Имена удаленных файлов указываются в виде имя_компьютера:имя_пути •Если осуществляется копирование в или из локального файла, можно отбросить задание имени компьютера в сети и двоеточие Пример: $ rcp funfile fred:/tmp/funfile $ rcp fred:/tmp/funfile barney:/tmp передача файла с локальной машины Для работы команды rcp должен быть правильно сконфигурирован файл /etc/hosts.equiv или .rhosts. Команда remsh Синтаксис: remsh имя_компьютера команда Berkeley сервис по запуску на выполнение команды на удаленной машине Пример: $ hostname barney $ remsh fred ls /tmp backuplist crout fred.log update.log $ remsh fred ps –ef … $ remsh fred cat /etc/hosts | more $ cat myfile | remsh fred lp печать файла на принтере, подключенном к другому компьютеру Для работы команды rcp должен быть правильно сконфигурирован файл /etc/hosts.equiv или .rhosts. Команда rwho (Berkeley) Синтаксис: rwho обеспечивает вывод, подобный команде who; выводит на экран имена пользователей в сети, выполняющих со своих машин команду rwho Пример: $ rwho user1 barney:tty0p1 Jul 18 8:23 user2 wilma:tty0p1 Jul 18 9:44 user3 fred:tty0p1 Jul 18 8:56 Команда ruptime (Berkeley) Синтаксис: ruptime выводит на экран данные о состоянии каждой машины в локальной сети; каждая машина должна быть опрошена посредством команды rwho Пример: $ ruptime barney up 3:10 1 users load 1.32, 0.80, 0.30 fred up 1+5:15 4 users load 1.47, 1.16, 0.30 wilma down 0:00