Upload
necia
View
83
Download
0
Embed Size (px)
DESCRIPTION
Модуль 1-2. Введение в UNIX. Вход в систему и простейшие действия. Что такое операционная система?. Магнитные диски. Пользователи. Оперативная память. Операционная система. Центральный процессор. Программы. Сеть. Потребители. Принтеры. Ресурсы. Основные компоненты UNIX. - PowerPoint PPT Presentation
Citation preview
Модуль 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
ShellShell
Выполнениекоманд
Выполнениекоманд Средства настройки
средыСредства настройки
среды
НазначениепеременныхНазначениепеременных
Подстановка переменных
Подстановка переменных
Генерацияимен файловГенерация
имен файлов
Интерпретируемыйязык
программирования
Интерпретируемыйязык
программирования
Подстановкакоманд
Подстановкакоманд
КонвейерыКонвейеры
Перенаправлениеввода/вывода
Перенаправлениеввода/вывода
Формат командной строки
Синтаксис:
$ команда [-опции] [аргументы] <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 EXAMPLES
SYNOPSYS WARNINGS
DESCRIPTION DEPENDENCIES
EXTERNAL INFLUENCE AUTHOR
NETWORKING FEATURESFILES
RETURN CODE SEE ALSO
DIAGNOSTICS BUGS
ERRORS STANDART CONFORMANCE
Оперативный справочник
Синтаксис:
man [-k|X] ключевое_слово|команда
где X-номер одного из разделов справочника
Примеры:
$ man date Выводится описание команды «date»
$ man -k copy Выводятся статьи с ключевым словом «copy»
$ man passwd Выводится статья «passwd» - раздел 1
$ man 4 passwd Выводится статья «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 tty1p5 Jul 01 08:01
user1 tty1p4 Jul 01 09:59
user2 tty0p3 Jul 01 10:01
$ who am i
user2 tty0p3 Jul 01 10:01
$ 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 user2$ write user2 Message from user1 (tty05)
Are you going to the meeting? Are you going to the meeting?
$ write user1
I will be there <Ctrl>+<d>
Message from user2 (tty04)
I will be there
It is fine <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 Отправление почты пользователю user4
Hi there! Содержание почтового сообщения
I will meet you at 12:00 for lanch.
<Ctrl>+<d> Завершение сообщения
$
Утилита mail
Команды
? Помощь
q Выход из утилиты
x Выход без изменения содержимого почтового ящика
d Уничтожение предыдущего сообщения
s [file] Сохранение сообщения в файле (по умолчанию файл с именем mbox
<Return> Вывод на экран следующего сообщения
+ Вывод на экран следующего сообщения
- Вывод на экран предыдущего сообщения
!cmd Выполнение команды системы UNIX, не выходя из утилиты mail
Команда mailx
• Позволяет отвечать на почту
• Дает возможность манипулировать сообщениями, используя их порядковые номера
• Добавляет заголовок к почтовому сообщению
Команда news
Синтаксис:
news [-a] [-n] [headline] Выводит на экран терминала
новости системы
Примеры:$ news Выводит последние новости
$ news -a Выводит все новости
$ news - n Выводит заголовки новостей
Модуль 3.Файловая система
Иерархия файловой системы
/
sbin tmpstandvaroptetcdevusr home
group passwd .profile vmunix
user3user2user1
mail news tmp vue
contribbin lib local sbin share vue
man
cp ls man sh tar vi- файл
- каталог
Маршрутные имена файлов
/
tmp usrhome
user1 user2 user3
f1
f1
memo
Абсолютные маршрутные имена файлов•полностью определяет местоположение•всегда начинаются от корня•всегда начинаются знаком /•не зависят от текущего положения пользователя•уникальны по отношению ко всей иерархической структуре/home/user3/f1/home/user3/memo/f1
Относительные маршрутные имена файлов•начинаются от текущего положения пользователя•никогда не начинаются знаком /•уникальны только по отношению к текущему положению•обычно короче, чем абсолютное маршрутное имяuser3/f1user3/memo/f1f1
Особые каталоги
/
tmp usrhome
user1 user2 user3
f1
f1
memo
Входной каталог•создается при добавлении пользователя•обычно является подкаталогом /homeТочка (.)•представляет текущий каталогЕсли текущий каталог /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 usrhome
user1 user2 user3
f1
f1
memo
$ pwd/home/user3
Команда ls
Синтаксис:
ls [-adlFR] [маршрутное имя(имена)] -выводит содержимое каталога• если команда вводится без аргументов, выводятся имена файлов и каталогов,
находящихся в текущем каталоге
• в качестве аргументов можно указывать и относительные и абсолютные маршрутные имена файлов
• допускается задание ряда опций:
-a - выводит имена всех файлов, в том числе “невидимых”(начинаются с точки(.))
-d - вычисляет характеристики каталога вместо представления его содержимого
-l - представляет полный перечень атрибутов каждого файла (тип, права доступа, количество ссылок, владелец, группа, размер в байтах, дата последней модификации, имя)
-F - добавляет знак / к имени каждого каталога и * к имени каждого исполняемого файла
-R - рекурсивно перечисляет файлы в данном каталоге и во всех его подкаталогах
Сокращения команд в HP-UX
Команда системы UNIX Эквивалент в HP-UX
ls -F lsf
ls - l ll
ls - R lsr
Команда cd
Синтаксис:
cd [имя каталога] Изменяет текущий каталог
• имя каталога - абсолютное или относительное маршрутное имя каталога, в который надо перейти
• если команда вызвана без аргументов, пользователь окажется в HOME-каталоге
Команда find
Синтаксис:
find список_имен выражение Осуществляет упорядоченный поиск в файловой
системе
• список_имен - список имен каталогов, в которых осуществляется поиск
• выражение - задает критерий поиска и действия
• ключевым словам в выражении предшествует знак -
Примеры$ find . -newer f1 Найти в текущем каталоге файлы, более новые чем
f1
Команды mkdir и rmdir
Синтаксис:
mkdir [-p] имя(имена)_каталога Создание каталога
• [-p] - создаются промежуточные каталоги, если они до этого не существовали
rmdir [-i] имя(имена)_каталога Удаление каталога
• удаляемые каталоги должны быть пустыми
• нельзя удалить каталог между текущим и корневым
• [-i] - удаление с подтверждением
• rm -r имя_каталога - удаление непустого каталога
Файловая система - краткое резюме
Файл Контейнер для данных
Каталог Контейнер для файлов и других каталогов
Дерево Иерархическая структура UNIX системы
Маршрутное Идентифицирует положение файла или каталога
имя в иерархии
HOME Маршрутное имя входного каталога пользователя
pwd Выводит на экран текущий каталог
cd Изменяет текущий каталог
ls Выводит содержимое каталога
find Отыскивает файлы, специфицируемые опциями
mkdir Создает каталоги
rmdir Удаляет каталоги
Модуль 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 Вывод на экран содержимого файла f1
$ cat f1 f2 Вывод на экран содержимого файлов f1 и f2
$ cat Ввод с клавиатуры
abs
<Ctrl>+<d>
abc
$ cat f1 f2 > f3 Перенаправление вывода файлов f1 и f2 в f3
Команда more
Синтаксис:
more [файл] ... Осуществляет поэкранный вывод содержимого файла
Примеры$ more f1
……
…
--f1 (20%)--
<Q> или <q> Выход из команды more
<Return> Вывод очередной строки
<Space> Вывод очередного экрана с информацией
Команда tail
Синтаксис:
tail [-n] [имя_файла] ... Вывод последних n строк файла(ов)
Примеры$ tail -1 note
soon as it is available
Система спулинга строчных принтеров
• Система спулинга строчных принтеров (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число Число копий, по умолчанию 1
-tзаголовок Печать заголовка на титульном листе
-oопция Указание опций, специфических для принтера ( тип шрифта, шаг печати, толщина линий,
структурированность данных и т.д.)
-w Выдача сообщения на терминал пользователя после распечатки
Команда lpstat
Синтаксис:
lpstat [-t]
• Команда lpstat сообщает о запросах, поставленных в очередь на печать
• Команда lpstat -t сообщает состояние планировщика заданий, имя пнинтера по умолчанию, состояние принтера и список всех запросов, стоящих в очереди на печать.
Команда lpstat
Примеры:
$ lpstatrw-55 john 4025 Jul 6 14:26:33 1994$$ lpstat -tscheduler is runningsystem default destination: rwdevice for rw: /dev/lp2235rw accepting requests since Jul 1 10:56:20 1994printer rw now printing rw-55. enabled since Jul 4 14:32:52 1994rw-55 john 4025 Jul 6 14:26:33 1994 on rwrw-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
user3user2
f1.link f1
Это файл, к которому можно обращаться по
нескольким именам
Пользователь находитьсяздесь
Команда rm
Синтаксис:rm [-if] имя_файла [имя_файла]... Удаление файлов rm -r[if] каталог [имя_файла ...] Удаление каталогов
• -f Безусловное удаление поименованных в команде файлов• -r Рекурсивно удаляется содержимое каталогов, указанных в
командной строке• -i Режим интерактивного удаления
Примеры$ ls -F $ rm -i f2
f1 f2 fruit/memo f2? y
$ rm f1 $ rm fruit $ ls -F rm: fruit directory f2 fruit/memo $ 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 f2drwxr-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-- rw- r-- r--
$ chmod u+x,g+x,o+x file
Новые права: режим владелец группа остальные
rwxr-xr-x rwx r-x r-x
$ chmod +x file
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=4write=2execute=12. Числа складываются для каждой категории пользователей (владельца,
группы, остальных) и объединяются в трехразрядное число.
Примеры1. user group others
rw- r-- ---4+2+0 4+0+0 0+0+06 4 0chmod 640 имя_файла
2. chmod 000 имя_файла Отмена всех прав доступа к файлу
Команда umask
Синтаксис:
umask [-S] [режим_доступа] ... Пользовательская маска создания файла
Примерыправа доступа по умолчанию: rw-rw-rw-
установка новых прав доступа по умолчанию rw-r--r--
$ umask g=r, o=
$ umask -S Вывод текущей маски создания файла в символьном представлении
Команда touch
Синтаксис:
touch [-amc] [-t время] имя_файла... Обновляет время последнего доступа и/или
модификациии файла Опции:
-a [время] Установить время последнего доступа к файлу равным время
-m [время] Установить время последней модификации файла равным время
-c Если файл не существует, не создавать его
-t время Использовать время вместо текущего
время [[cc]yy]mmddhhmm[.ss]
Команда touch
Примеры:$ ll-rw-r--r-- 1 karenk users 25936 Aug 24 09:53 firstfile-rw-r--r-- 1 karenk users 10245 Aug 24 09:53 secondfile $ touch newfile $ ll-rw-r--r-- 1 karenk users 25936 May 24 09:53 firstfile-rw-r--r-- 1 karenk users 0 Aug 25 10:02 newfile-rw-r--r-- 1 karenk users 10245 Aug 24 09:53 secondfile$ touch secondfile $ ll-rw-r--r-- 1 karenk users 25936 May 24 09:53 firstfile-rw-r--r-- 1 karenk users 0 Aug 25 10:02 newfile-rw-r--r-- 1 karenk users 10245 Aug 25 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 24 13:13 f3$ iduid=303 (user3), gid=300 (class)$ su class_adminPassword:$ iduid=400 (class_admin), gid=300 (class)$ /usr/local/bin/class_setup$ <Ctrl>+<d><Return>log out of su session$
Команда newgrp
Синтаксис:
newgrp [имя_группы]... Изменяет идентификатор группы
Примеры$ ls -1 /usr/ local/bin/class_setup-rwxr-x--- 1 class_admin teacher 3967 Jan 24 13:13 f3$ iduid=303 (user3), gid=300 (class)$ newgrp teacher$ iduid=303 (user3), gid=33 (teacher)$ /usr/local/bin/class_setup$ newgrp
return to login group status$ newgrp otherSorry$
Списки управления доступом ACL
Синтаксис:
lsacl имя_файла Выводит ACL для файла
chacl [-d] 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
• William Joy, Калифорнийский университет
• vi - это экранный текстовый редактор
• поставляется в большинстве версий системы UNIX
• управляется командами
• включает следующие классы команд:
– общеорганизующие
– управления курсором
– вставки текста
– удаления текста
– вставки ранее удаленного текста
– изменения текста
Что представляет собой редактор vi?
vi: Начало сеанса работы
Синтаксис:
vi [имя_файла] Начало сеанса редактирования файла
Примеры$ vi file1
file1 file1
vi file1Диск
file1
Keyboard
Все изменения при редактировании выполняются надкопией файла, размещенной в оперативной памяти
vi: Режимы работы редактора
•Командный режим - нажатия клавиш интерпретируются как команды
–исходным является режим, когда начинается сеанс vi редактирования
–нажатие клавиши <Esc> переводит вас в командный режим
–vi команды не отражаются на экране
–ex команды префиксируются двоеточием(:) и отображаются на экране
•Режим ввода - информация, соответствующая нажатым клавишам вводится в файл
Режим последней
строки
Командныйрежим
Режимввода
:/?
Return
i Ia Ao O
ESC
Это пример содержимого файла test, который будет рассматриваться далее
~~~ Пометки строк,~ которые не существуют~ в файле~: ex команды сообщения
о режиме работы
vi: Сеанс редактирования
содержимое файла
строки в конце
файла
курсор
vi:Завершение сеанса редактирования
<Esc> ZZ <Return> Сохранение файла на диске (на экране не отображается)
<Esc>:wq! <Return> Сохранение файла на диске и выход из редактора
<Esc>:q! <Return> Выход без сохранения
Команды управления курсором (1)
h или <BackSpace> Перемещение курсора на одну позицию влево
j Перемещение вниз на одну строку
k Перемещение вверх на одну строку
l или <Space> Перемещение курсора на одну позицию вправо
#w Перемещение вперед на слово (word) за словом
#b Перемещение назад на слово (backword) за словом
#e Перемещение к концу (end) следующего слова
$ Перемещение в конец текущей строки
^ или 0 Перемещение в начало текущей строки
Команды управления курсором (2)
G Переход (Go) в конец файла
#G Переход (Go) на строку с номером #
:# Переход на строку с номером #
<Ctrl>+<g> Вывод номера текущей строки
<Return> Переход к первому непустому символу на следующей строке
<Ctrl>+<b> Вывод предыдущего (back) содержимого экрана
<Ctrl>+<f> Вывод следующего (forward) содержимого экрана
<Ctrl>+<u> Возврат вверх (up) на половину экрана
<Ctrl>+<d> Переход вниз (down) на половину экрана
L Переход к последней (last) строке экрана
M Переход к средней (middle) строке экрана
H Переход к первой строке экрана (на первую строку, первый символ)
<Ctrl>+<l> Перерисовка экрана
Режим ввода Для переключения в режим ввода используются следующие команды:
a Добавление (append) текста после курсора
i Добавление (insert) текста перед курсором
O Открытие (Open) пустой строки над текущей строкой
o Открытие (open) пустой строки под текущей строкой
A Добавление (Append) текста в конец строки
I Вставка (Insert) текста с начала строки
В режиме ввода:
<Return> Появление новой пустой строки (можно разрезать строки)
<BackSpase> Возвращение влево для исправления введенного
<Esc> Окончание режима ввода. Возвращение в командный режим
Удаление текста: команды x,dw,dd,dG
#x Удаление (X out) символа над курсором
#dw Удаление (Delete) текущего слова (Word)
#dd Удаление текущей строки
dG Удаление всех строк от текущей до последней строки файла
d$ Удаление конца строки (от текущей позиции)
d^ Удаление начала строки (до текущей позиции)
Можно задать число, показывающее сколько раз должна быть повторена команда. Например: 3dd - удалить 3 строки
Команды отмены произведенных изменений
u Отмена (undo) последнего изменения
U Отмена (Undo) всех изменений в текущей строке
Перемещение текста: команды p и P.
dобъект Удаление объекта и сохранение его в буфере
p Вставка (paste) содержимого буфера в текст после курсора
P Вставка (Paste) содержимого буфера в текст перед курсором
Копирование текста: команды yw, yy
#yw Копирование (yank) текущего слова в буфер
#yy Копирование текущей строки
yG Копирование строк от текущей до конца файла
y$ Копирование части строки от курсора до конца строки
y^ Копирование части строки от курсора до начала строки
Список команд копирования и вставки
yобъект Копирование (yank) объекта в буфер
p Вставка (paste) содержимого буфера в текст после курсора
P Вставка (Paste) содержимого буфера в текст перед курсором
Изменение текста: команды r, R, cw, .
rсимвол Заменяет (replace) символ, помеченный курсором на символ
R Заменяет (Replace) все символы строки, пока не нажата клавиша <Esc>
#сw Изменение текущего слова
#cc Изменение всей текущей строки
cG Изменение всех строк файла от текущей до последней
c$ Изменение части строки от курсора до конца строки
c^ Изменение части строки от курсора до начала строки
. Повтор последнего действия по изменению текста, включая удаление
Поиск текста: команды /, 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 fileXrequest id is laser-234 (1 file)$ alias выводит установленные псевдонимы команд….$ alias mroe выводит псевдоним команды mroemroe=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 cd16 more .profile$ history 3 5 Вывод списка команд с номерами от 3 до 53 date4 pwd5 ls
Буферирование команд(2)
Опции:
-n вывод n последних команд
a z вывод команд с номерами от a до z
ПеременныеHISTSIZE количество доступных пользователю ранее
вводимых команд (по умолчанию 128)
HISTFILE определяет имя текстового файла, создаваемого лоя хранения вводимых команд (по умолчанию .sh_history)
Повторный ввод команд
• Для повторного ввода предшествующей команды с номером с следует ввести команду г с
Пример:$ history 3 5 Вывод на экран списка команд с номерами от 3 до 5
3 date4 pwd5 ls
$ r 4 Запуск команды с номером 4pwd/home/kelley
Повторный ввод команд(2)
• Вместо номера команды можно ввести первый символ имени команды, в результате будет выполнена последняя команда, хранящаяся в буфере предыстории, начинающаяся с этого символа
Пример:
$ history
1 date
2 cat file1
3 ll
$ r d
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/gerryEDITOR=viTERM=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/binTERM=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) .profile
POSIX(/usr/bin/sh) .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:
cdlsmorefile
Система находит команды UNIX, используя переменную PATH.
Поиск команд - команда whereis
Синтаксис:
whereis [-b|-m|-s] команда Просматривает список каталогов для поиска указанной
команды
Примеры:
$ whereis if
if :$$ whereis lsls: /sbin/ls /usr/bin/ls /usr/share/man/man1.Z/ls.1$$ whereis cdcd: /usr/bin/cd /usr/share/man/man1.Z/cd.1$$ whereis holdyourhorsesholdyourhorses :
Поиск команд - команда whereis(2)
Опции
-b поиск только по двоичным кодам
-m поиск по описаниям команды
-s поиск по исходным текстам
Модуль 8.Shell: расширенные
возможности
Shell-подстановки
•Подстановка переменных
•Подстановка команд
•Тильда-подстановка
Подстановки используются для увеличения скорости ввода и выполнения командных строк.
Shell: хранение переменных
color=bluecount=3
dir_name=/home/user3/tree
PS1=$PATH=/usr/bin:/usr/contrib/bin
HOME=/home/user3TERM=70094a
SHELL=/usr/bin/sh
/usr/bin/sh
Локальные переменные
Программный код
Переменные среды
Shell: вывод на экран всех переменных, содержащихся в данный момент в среде
$ envMANPATH=/usr/share/man:/usr/contrib/man:/usr/local/manPATH=/usr/bin:/usr/ccs/bin:/usr/contrib/bin:/usr/local/binLOGNAME=user3ERASE=^HSHELL=/usr/bin/shHOME=/home/user3TERM=hptermPWD=/home/user3TZ=PST8PDTEDITOR=/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_nametree/car.models/ford$ ls -F $dir_namesedan/ 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Использование абсолютного маршрутного имени в качестве значения переменной, которая представляет собой имя файла или каталога, позволяет пользователю вне зависимости от местонахождения в файловой системе, получать доступ к файлу или каталогу
Подстановка команд
Синтаксис:
$(команда) Указывает shell’у выполнить подстановку команды
Пример:$pwd/home/user2$curdir=$(pwd)$echo $curdir/home/user2$cd /tmp$pwd/tmp$cd $curdir$pwd/home/user2$curdir2=`pwd`$echo $curdir/home/user2
Тильда-подстановкиЕсли слово начинается со знака "тильда" (~), то для этого слова формируется расширение. Следует заметить, тильда — подстановка выполняется только если знак (~) указывается в начале слова, а в случае /~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 Вывод значений переменной среды. Это команда системы UNIX из каталога /usr/bin/env
set Вывод на экран всех определенных к данному времени переменных (локальных и переменных среды), а также их значений. Это команда shell.
unset Удаление значения переменной. Это команда shell.
Вывод значений переменных-пример
$ echo $HOME/home/user3
$ envHOME=/home/user3PATH=/usr/bin:/usr/contrib/bin:/usr/local/binSHELL=/usr/bin/sh
$ setHOME=/home/user3PATH=/usr/bin:/usr/contrib/bin:/usr/local/binSHELL=/usr/bin/shcolor=lavendercount=3dir_name=/home/user3/tree
$ unset dir_name
Экспортирование локальных переменных в среду
Синтаксис:export [переменная[=значение]] Экспортирование
переменной в среду
Пример:$ color=lavender$ export color$ export count=3$ exportexport PATH=/usr/bin:/usr/ccs/bin:/usr/contrib/bin:/usr/local/binexport color=lavenderexport count=3
Это встроенная команда shell.
Передача переменных в приложение
Процесс - выполняющаяся программа.При вводе пользователем имени приложения (или команды) в ответ на приглашение shell, создается порожденный процесс, который исполняется по шагам:1. fork - порождает параллельный процесс, который дублирует shell-процесс пользователя, включая код программы и области локальных данных и данных среды.2. exec - заменяет кодовый сегмент и область локальных данных порожденного процесса на программный код и область локальных данных требуемого приложения., затем выполняет процесс затребованного приложения, возвращает управление родительскому процессу.
Существует один путь передачи данных порожденным процессам - через среду.
Наблюдение за процессами
ps [-f] выводит на экран информацию о выполняемых (или ожидающих) процессах в системе
Выдает:
UID идентификатор владельца процесса
PID идентификатор процесса
PPID идентификатор родителя процесса
STIME начальное время процесса
TTY идентификатор терминала, с которого запущен процесс TIME совокупное время выполнения процесса
COMMAND команда,соответствующая данному процессу
exec команда замещение текущего процесса (это встроенная команда shell).
Наблюдение за процессами
$ ps -fUID PID PPID С STIME TTY TIME COMMAND
user3 4702 1 1 08:46:40 ttyp4 0:00 -sh
user3 4895 4702 18 09:55:10 ttyp4 0:00 ps -f
$ ksh
$ ps -fUID PID PPID C STIME TTY TIME COMMAND
user3 4702 1 0 08:46:40 ttyp4 0:00 -sh
user3 4896 4702 1 09:57:20 ttyp4 0:00 ksh
user3 4898 4896 18 09:57:26 ttyp4 0:00 ps -f
$ exec ps -fUID PID PPID C STIME TTY TIME COMMAND
user3 4702 1 0 08:46:40 ttyp4 0:00 -sh
user3 4897 4702 18 09:57:26 ttyp4 0:00 ps -f
Порожденные процессы и среда
•Порожденные процессы не могут изменить среду родительских процессов.
Пример:$ export color=lavender $ ksh (создание порожденного процесса shell)$ ps -fUID PID PPID С STIME TTY TIME COMMANDuser3 4702 1 0 08:46:40 ttyp4 0:00 -shuser3 4896 4702 1 09:57:20 ttyp4 0:00 kshuser3 4898 4896 18 09:57:26 ttyp4 0:00 ps -f$ echo $colorlavender$ color=red$ echo $colorred$ exit (выход из порожденного процесса shell)$ ps -f (возвра г в родительский процесс)UID PID PPID С STIME TTY TIME COMMANDuser3 4702 1 0 08:46:40 ttyp4 0:00 -shuser3 4895 4702 1 09:58:20 ttyp4 0:00 ps -f$ echo $color lavender
Модуль 9Shell: генерация имен файлов
Генерация имен файлов:введение
Выполнениекоманд
Выполнениекоманд
Установки параметров
среды
Установки параметров
среды
Присвоениезначений
переменным
Присвоениезначений
переменным
Подстановка переменных
Подстановка переменных
Генерацияимен файловГенерация
имен файлов
Интерпретируемыйязык
программирования
Интерпретируемыйязык
программирования
Подстановкакоманд
Подстановкакоманд
КонвейерыКонвейеры
Перенаправлениеввода/вывода
Перенаправлениеввода/вывода
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
Модуль 10Shell: использование кавычек
Использование кавычек:введение
• Ряд символов имеет «специальный» смысл для 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, \, ‘, “
Модуль 11Shell: перенаправление ввода и
вывода
Перенаправление ввода и вывода :введение
Выполнениекоманд
Выполнениекоманд
Установки параметров
среды
Установки параметров
среды
Присвоениезначений
переменным
Присвоениезначений
переменным
Подстановка переменных
Подстановка переменных
Генерацияимен файловГенерация
имен файлов
Интерпретируемыйязык
программирования
Интерпретируемыйязык
программирования
Подстановкакоманд
Подстановкакоманд
КонвейерыКонвейеры
Перенаправлениеввода/вывода
Перенаправлениеввода/вывода
Shell
export переменнаяenv
переменная=значениеset
$переменная
переменная=$(команда)
* ? [ ]
cmd > filecmd2 > f.errcmd < file
Перенаправление ввода и вывода: введение
• Перенаправление вывода позволяет направить вывод команды в некоторый файл, отличный от терминала пользователя.
• Перенаправление ввода дает возможность команде получить исходную информацию из файла, а не с клавиатуры.
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 ] [файл...] Подсчитывает число строк(-l), слов (-w) и символов (c) в файле
Примеры
$ wc file рассматривается как аргумент команды
115 567 3345 file
$ wc -l file
115 file
$ ls > ls.out подсчет количества файлов в каталоге
$ wc -w ls.out
72 ls.out
wc - подсчет количества строк
Примеры
$ wc <Return> подсчитывается количество строк, слов и
ab cde символов, вводимых со стандартного
dvbnvnsbvbnd ввода
dhjhjdhfkdhjf
<Ctrl><d>
3 4 30
$ wc < file стандартный файл заменяется на файл
105 715 2456 file, имя файла не выводится
$ wc -w file
715 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 лексикографическая (по кодам ASCII)
-d по принципу словаря (игнорируя любые символы, не являющиеся буквами, цифрами или пробелами)
-n числовая
-u уникальная (исключаются повторяющиеся строки)
-tX указание разделителя (X - символ-разделитель полей)
-kn выбор базового поля n для сортировки( по умолчанию n=1)
-r сортировка в обратном порядке
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 > > файл Перенаправляет вывод команды cmd и добавляет к файлу
cmd 2> файл_ошибок Перенаправляет протокод команды cmd в файл_ошибок
Фильтр Команда, которая читает со стандартного ввода и генерирует стандартный вывод.
wc Подсчет количества слов, строк и символов.
sort Cортировка строк в алфавитном или числовом порядке.
grep Осуществляет поиск строк, содержащих модель.
Модуль 12Shell: каналы
Конвейеры :введение
Выполнениекоманд
Выполнениекоманд
Установки параметров
среды
Установки параметров
среды
Присвоениезначений
переменным
Присвоениезначений
переменным
Подстановка переменных
Подстановка переменных
Генерацияимен файловГенерация
имен файлов
Интерпретируемыйязык
программирования
Интерпретируемыйязык
программирования
Подстановкакоманд
Подстановкакоманд
КонвейерыКонвейеры
Перенаправлениеввода/вывода
Перенаправлениеввода/вывода
Shell
export переменнаяenv
переменная=значениеset
$переменная
переменная=$(команда)
* ? [ ]
cmd > filecmd2 > f.errcmd < file
cmd A | cmd B
Зачем используются конвейеры?
Конвейеры позволяют напрямую использовать вывод одной команды в качестве ввода другой, без создания временного файла.
$ who > temp_file$ wc -l < temp_file$ rm temp_file
who ----> wc -l
Символ | (символ канала)
прием прием
stdin stdin
генерирует генерирует генерирует генерирует генерирует генерирует
stderr stdout stderr stdout stderr stdout
Пример:
$ ps -ef | more
$ ls | more
$ ls | sort -r |more
Примечание: cmd B должна быть фильтром
cmd A cmd B cmd C
Требования к командам в конвейере
•Любая команда, расположенная слева от символа | должна направлять свой вывод в стандартный вывод (stdout)
•Любая команда, расположенная справа от символа | должна читать свой ввод из стандартного ввода (stdin)
•Любая команда, расположенная в середине конвейера должна читать свой ввод из стандартного ввода (stdin) и направлять свой вывод в стандартный вывод (stdout), т.е. быть фильтром
Перенаправление вывода или конвейеры?
Перенаправление ввода/вывода Конвейеры
Синтаксис:
cmd_out > file cmd_out | cmd_in
or
cmd_in < file
Пример:
who > who.out who | sort
sort < sort.out
Перенаправление в конвейере
3 потока для каждой команды: stdin, stdout, stderrМожно перенаправить потоки, которые не предназначены для конвейера
stdout stdin
cmd A cmd BДоступны для stdin stdoutперенаправления stderr stderr
stdout stdin stdout stdin
cmd A cmd B cmd CДоступны для stdin stderr stdoutперенаправления stderr 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] Преобразует символы строки1на соответствующие им символы строки2
Опции:
-s строка1 Заменяет все символы строки1, встречающиеся несколько раз подряд на одиночное вхождение
Примеры
$ who | tr -s “ “ преобразование нескольких последовательно расположенных пробелов в один
$ 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 столбцов сверху вниз-a Обеспечивает вывод в несколько столбцов, используется совместно
с опцией - k, печать осуществляется построчно-t Удаляет заголовок и хвостовик на страницах-d Разделяет строки пустой строкой-wN Устанавливает длину строки в N символов-lN Устанавливает N строк на странице-nCK Задает нумерацию из K цифр, отделяемых от строки символом С (
по умолчанию С - знак табуляции <Tab>)-oN Смещает вывод на N столбцов от левого края страницы-p Устанавливает режим ожидания нажатия клавиши <Return> перед
каждой страницей-hстрока Следующая за этой опцией строка используется в
качестве заголовка
Команда 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 TTY TIME COMMAND
1324 ttyp2 0:00 sh
1387 ttyp2 0:00 ps
$ ps -ef
UID PID PPID C STIME TTY TIME COMMAND
root 0 0 0 Jun 1 ? 0:20 swapper
root 1 0 0 Jun 23 ? 0:00 init
root 2 0 0 Jun 23 ? 0:16 vhand
root 3 0 0 Jun23 ? 12:14 statdeamon
user3 1324 1 3 18:03:21 ttyp2 0:00 -sh
user3 1390 1324 22 18:30:23 ttyp2 0:00 ps-ef
Опции команды ps
Без опций Выдача краткой информации о процессах, связанных только с сеансом работы с системой запустившего ее пользователя.
-e Выдача списка всех процессов, развивающихся в системе
-f Получение полной информации о состоянии процессов
-l Получение информации о процессах в т.н. длинном формате
Фоновые процессы(1)
Синтаксис:
командная строка > cmd.out &
•Планирует командную строку как задание для фонового режима.
•Возвращает приглашение на ввод как только задание запущено.
•Перенаправляет вывод фонового процесса с тем, чтобы его вывод не смешивался с интерактивными командами.
•Выход из системы приведет к завершению процессов, выполняемых в фоновом режиме. Пользователь получит предупреждение в тот момент, когда попытается выйти из системы,следующего содержания: “There are running jobs”, и поэтому он снова должен ввести команду exit или нажать <Ctrl>+<d>.
•Любая из выполняемых в фоновом режиме команд, требующая стандартного ввода, должна читать его из файла за счет перенаправления ввода.
Фоновые процессы(2)
Пример:$ grep user * > grep.out &[1] 194$ psPID TTY TIME COMMAND164 ttyp2 0:00 sh194 ttype2 0:00 grep195 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 PPID COMMAND
user3 972 1 … 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
/usr/bin/sh
/usr/bin/date /usr/bin/lsPID=1324
PID=1350
myprog#datels -F PID=1361 PID=1362
$
Передача данных shell-процедуре(1)
•Одним из способов передачи данных процедуре является их передача через средуПример:$ color=lavender$ cat color1echo You are now running program: color1echo the value of variable color is: $color$ chmod +x color1$ color1You are now running program: color1the value of variable color is:$ export color$ color1You are now running program: color1the value of variable color is: lavender
Передача данных shell-процедуре(2)
Пример:$ cat color2echo The original value of the variable color is: $colorecho This program will set the value of color to ambercolor=amberecho The value of variable color is now $colorecho When your program concludes, display the value of the color variable.$ export color=lavender$ echo $colorlavender$ color2The original value of the variable color is: lavenderecho This program will set the value of color to amberThe value of variable color is now amberWhen your program concludes, display the value of the color variable.$ echo $colorlavender
Аргументы shell-процедур(1)
Командная строка:
$ sh_program arg1 arg2 ... arg23 .... argX
$0 $1 $2 ${23} $X
Пример:
$ 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
Аргументы 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 color4echo There are $# command line argumentsecho They are $*echo The first command line argument is $1
$ chmod +x color4
$ color4 red green yellow blueThe are 4 command line argumentsThey are red green yellow blueThe first command line argument is red$
Специальные переменные shell: # и *(2)
Усовершенствованный пример программы инсталляции допускает в командной строке несколько аргументов:Пример:$ cat > my_install2echo $0 will install $# files to your bin directoryecho The files to be installed are: $*chmod +x $*mv $* $HOME/binecho Installation is complete
$ chmod +x my_install2
$ my_install2 color1 color2my_install2 will install 2 files to your bin directoryThe 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 inputecho “Please enter your favorite two colors -> \c”read color_a color_becho The colors you entered are: $color_b $color_a$ chmod +x color6$ color6Please enter your favorite two colors -> read blueThe colors you enterd are: blue red$ color6Please enter your favorite two colors -> read blue tanThe 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_install3echo $0 will install files to your bin directoryecho “Enter the names of the files -> \c”read filenameschmod +x $filenamesmv $filenames $HOME/binecho Installation is complete
$ chmod +x my_install3
$ my_install3my_install3 will install files to your bin directoryEnter the names of the files -> f1 f2Installation is complete
shell-функции
Синтаксис:function имя_функции {shell_текст}
илиимя_функции (){shell_текст}
Пример:$ function install install()> { {> echo Install file:$1 echo Install file:$1> chmod +x $1 chmod +x $1> mv $1 $HOME/bin mv $1 $HOME/bin> echo Install complete echo Install complete> } }$ install myfileInstall file: myfileInstall complete
Дополнительные средства
•Комментирование текста shell-процедур с помощью знака #
•Cуществует альтернативный запуск shell-процедуры:
sh shell-процедура аргументы
shell-процедура должна быть доступна для чтения и может не быть исполняема
•“Отладчик” для shell-процедур:
sh -x shell-процедура аргументы
Каждая строка shell-процедуры выводится перед выполнением
Модуль 15Shell-программирование:
ветвления
Коды завершения
Переменная shell’а ? содержит код завершения последней выполненной команды
0 команда выполнена без ошибки (true)
не 0 команда завершена в связи с ошибкой (false)
Пример:$ true$ echo $?0$ ls$ echo $?0$ echo $?0$ false$ echo $?1$cpUsage : 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 ] [ -eq 3 ]
sh: test: argument expected
$ [ “$XX” -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” ] сравнивается число 03 с числом 3
$ echo $?
0 истина, т.к. аргументы равны друг другу, поскольку они числа
$ [ “$X” = “$Y” ] сравнивается строка «03» со строкой «3»
$ echo $?
1 ложь, т.к. аргументы не равны друг другу, поскольку они строки
Команда test: тестирование файлов
Синтаксис : test -опция имя_файла Оценивает характеристики имя_файла в
соответствии с опциейОпции:-f имя_файла истина, если файл существует и является обычным
файлом. т.е. не каталогом и не файлом устройства-s имя_файла истина, если файл существует и его размер больше 0-r имя_файла истина, если файл существует и доступен для чтения-w имя_файла истина, если файл существует и доступен для записи-x имя_файла истина, если файл существует и доступен для выполнения-d каталог истина, если файл существует и является именно
каталогом
Пример:$ test -f file или [ -f file ]$ echo $?0$ test -d file или [ -d file ]$ echo $?1
Команда 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_testecho exiting program nowexit 99
$ exit_testexiting program now
$echo $?99
$ cat rtn_testfunction rtn{echo return from functionreturn 99}
$ rtn_testreturn from function
$echo $?99
Конструкция if
Синтаксис: (соответствует передаче управления на одну ветвь)if
список_Аthen
список_Вfi
Последовательность выполнения конструкции if:1. Выполняются команды списка_А команд.
2. Если код завершения последней команды из списка_А равен 0 (ИСТИНА), то выполняются команды из списка_В команд и затем команды, следующие за fi.
3. Если код завершения последней команды из списка_А не равен 0 (ЛОЖЬ), то выполняются команды, следующие за fi.
Блок-схема конструкции if
ifсписок_А
thenсписок_В
fi
другие команды
код завершения =0
код завершения не равен 0
Конструкция if
Примеры:1.
iftest -s file
thenecho file exists
fiecho hello
2.if
grep kingkong /etc/passwdthen
echo found kingkongfi
Конструкция if
Примеры:3. Использование для управления переходом в случае возникновения ошибок при выполнении программы
if[ $# -ne 3 ]
thenecho Incorrect syntaxecho Usage: cmd arg1 arg2 arg3exit 99
fi
Конструкция if-else
Синтаксис: (соответствует передаче управления на одну из двух возможных ветвей)
ifсписок_А
thenсписок_В
elseсписок_C
fi
Последовательность выполнения конструкции if-else:1. Выполняются команды списка_А команд.
2. Если код завершения последней команды из списка_А равен 0 (ИСТИНА), то выполняются команды из списка_В команд и затем команды, следующие за fi.
3. Если код завершения последней команды из списка_А не равен 0 (ЛОЖЬ), то выполняются команды из списка_С команд и затем команды, следующие за fi.
Блок-схема конструкции if-else
ifсписок_А
thenсписок_В
fi
другие команды
код завершения =0
код завершения не равен 0
elseсписок_C
Конструкция if-else
Пример:if
[ $X -lt 10 ]then
echo X is less then 10else
echo X is not less then 10fi
Конструкция 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 in1) echo option 1 ;;2) echo option 2 ;;3) echo option 3 ;;*) echo no option ;;esac
Конструкция case: примеры задания образцов
В образцах конструкции case используются те же специальные символы, что и для генерации имен файлов
Пример:$ cat menu_with-caseecho COMMAND MENUecho d to display time and date echo w to display logged-in usersecho l to list contents of current directoryecho Please enter your choice:read choicecase $choice in
[dD]*) date ;;[wW]*) who ;;l*|L*) ls ;;*) echo Invalid selection ;;
esac$
Shell-программирование: ветвления. Заключение.
Код завершения Возвращает числовое значение после
выполнения каждой программы - echo $?
Сравнение чисел [ $число1 -lt $число2 ]
Сравнение строк [ $строка1 = $строка2 ]
Тестирование файлов test -f имя_файла
exit n Завершает программу и формирует код
завершения
if, if-else Передача управления осуществляется на основе
анализа кода завершения последней команды
списка_А
case Слово сравнивается с каждым образцом по
принципу сравнения строк
Модуль 16Shell-программирование: циклы
Введение в циклы
Назначение : Повторное выполнение совокупности команд
Управление: Основано на анализе кода завершения ключевой
команды
Три вида: while...do...done
until... do... done
for... do... done
Оценивание значений арифметических выражений с помощью let(1)
Синтаксис:
let выражение или ((выражение))•let дает возможность использовать в shell-программах арифметические выражения•работает в формате длинного целого•при построении арифметических выражений можно использовать операторы (даны в прорядке убывания приоритета выполнения): Оператор Описание- Одноместный минус (операция изменения знака
арифметического выражения! Логическое отрицание* / % Умножение, деление, остаток от деления+ - Сложение, вычитание<+ >= < > Сравнение== != Равно, не равно= Присвоение() Скобки используются для изменения порядка вычисления
Оценивание значений арифметических выражений с помощью let(2)
Пример:
$ x=10 $ x=12
$ y=2 $ let “x < 10”
$ let x=x+2 $ echo $?
$echo $x 1
12 $ (( x > 10 ))
$ let “x=x / (y+1) “ $ echo $?
$ echo $x 0
4 $if (( x > 10 ))
$ (( x=x+1 )) > then echo x greater
$ echo $x > else echo x not greater
5 fi
x greater
Конструкция while(1)
Повторение выполнения когда условие истинно.
Синтаксис:while
список_Аdo
список_ВdoneВыполнение цикла while происходит следующим образом:1. Выполняются команды списка_А.2. Если код завершения последней команды из списка_А равен 0 (true), то выполняется список_В команд.3. Возвращение к п.1.4. Если код завершения последней команды из списка_А не равен 0 (false), то управление передается первой команде, следующей за ключевым словом done.
Конструкция while(2)
код завершения не 0 false
код завершения 0
true
whileсписок_А
do
список_В
done
Конструкция while(3)
Пример:$ cat test_whileX=1while (( X <= 10 ))do
echo hello X is $X; let X=X+1done
$ test_whilehello X is 1hello 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)
код завершения 0 true
код завершения не 0
false
untilсписок_А
do
список_В
done
Конструкция until(3)
Пример:$ cat test_untilX=1until (( X > 10 ))do
echo hello X is $X; let X=X+1done
$ test_untilhello X is 1hello 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_forfor X in 1 2 3 4 5do
echo “2 * $X is \c”let X=X*2echo $X
done
$ test_for2 *1 is 22 *2 is 42 *3 is 62 *4 is 82 *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 studentsuser1user2user3user4
$ cat for_students_file_copyfor NAME in $(cat students)do
cp test.file /home/$NAMEchown $NAME /home/$NAME/test.filechmod g-w,o-w /home/$NAME/test.fileecho 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: примеры
whiletrue
doecho “Enter file to remove:\c”read FILEif test ! -f $FILEthen
echo $FILE is not a regular filecontinue
fiecho removing $FILErm $FILEbreak
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-программы
Модуль 17Shell-программирование:
сигналы и прерывания
Что такое сигнал?
Сигнал - некоторая переменная, передаваемая процессу, когда наступает определенное событие
Сигнал Событие
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 > mytrap2trap ‘ ’ INT while truedo
echo hellodone
$ mytrap2hellohello-------------------------------------- нажать <Ctrl>+<c> (проигнорирован)hellohello -------------------------------------- нажать <Ctrl>+<\> (проигнорирован)$
Сигнал KILL не может быть проигнорирован!
Размещение команды trap в программе
Помещайте команду в начале программы для управления удалением временных файлов, если выполнение программы прекращается:
trap ‘rm /tmp/tempfile;exit’ INT QUIT TERM
Помещайте команду перед критическим участком программы для того, чтобы игнорировать возможные сигналы прерывания:
trap ‘ ‘ INT QUIT TERM
С помощью команды trap восcтанавливайте действие системы, принятое по умолчанию, когда выполняется участок программы, требующий нормального завершения:
trap INT QUIT TERM
Сигналы и прерывания: заключения
Сигнал Логическая переменная, посылаемая shell-программе по наступлении определенного события
Выход из EXIT - сигнал выходасистемы<Ctrl>+<c> INT - сигнал прерывания
<Ctrl>+<\> 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 Файлы записываются в архив, если они созданы заново или их содержимое подверглось изменению
Опции:v Вывод на экран имен файлов при их архивировании или восстановлении по ним содержимого утерянных файлов
f файл Указывает файл, куда будет записываться архив.
Команда 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/400System ARPA
BerkeleyNS
HP Series 800System ARPA
BerkeleyNS
PC HP Vectra
ARPA
Non-HPNon-UNIX
SystemARPA
HP Series 700 ARPA
Berkeley
Non-HP UNIXSystemARPA
Berkeley
HP 3000 System ARPA
NS
HP 3000 System ARPA
NS
Терминатор
Терминатор
Сервисы локальной сети (LAN)
• Две группы сервисов локальной сети:
- ARPA сервисы (telnet, ftp)
- Berkeley сервисы (rcp, rlogin, remsh)
• Сервисы позволяют:
- Входить в систему на удаленной машине
- Передавать файлы между узлами сети
- Осуществлять удаленный доступ к файлам
Команда hostname
Синтаксис:hostname Сообщает имя Вашего компьютера в сети
Примеры : $ hostname
fred
$
$ more /etc/hosts
192.1.2.1 fred
192.1.2.2 barney
192.1.2.3 wilma
192.1.2.1 betty
Для того, чтобы иметь возможность использовать любой сервис локальной сети, вы должны быть зарегистрированы
пользователем на удаленной машине
Команда telnet
Синтаксис:telnet имя_компьютера ARPA сервис для удаленного входа в
другой компьютер• Все виды выполняемых вами работ будут реализовываться на удаленной машине.• Ваш компьютер будет только обеспечивать прием и передачу информации на терминал через локальную сеть.•Для прекращения сеанса связи выйдите с удаленной машины, используя <ctrl>+<d>, <Return> или exit.
Примеры : $ telnet fredTrying …Connected to fredEscape character is '^]".
HP-UX fred 10.0 9000/715login:
Команда ftp (протокол передачи данных)
Синтаксис:ftp имя_компьютера ARPA сервис по передаче файлов на
удаленную машину и получение их от него.
ftp команды:get чтение файла с удаленной машиныput пересылка файла с Вашей машины на удаленнуюls выдача списка файлов, находящихся на удаленной машине? выдача списка всех ftp-командhelp вывод краткого описания командыquit выход из ftp
Команда ftp. Примеры.$ ftp fredConnected 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)) .
Пример:$ hostnamebarney$ rlogin fredPassword:$ hostnamefred$ exit$ hostnamebarney
Команда rcp
Синтаксис:rcp имя_пути_файла_источника имя_пути_файла_преемника Berkeley сервис, обеспечивающий передачу файла на или с удаленном машины. Работает подобно команде cp.•Имена удаленных файлов указываются в виде имя_компьютера:имя_пути•Если осуществляется копирование в или из локального файла, можно отбросить задание имени компьютера в сети и двоеточие
Пример:$ rcp funfile fred:/tmp/funfile передача файла с локальной машины $ rcp fred:/tmp/funfile barney:/tmp
Для работы команды rcp должен быть правильно сконфигурирован файл /etc/hosts.equiv или .rhosts.
Команда remsh
Синтаксис:remsh имя_компьютера команда Berkeley сервис по запуску на выполнение команды на
удаленной машине
Пример:$ hostnamebarney$ remsh fred ls /tmpbackuplistcroutfred.logupdate.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