Модуль 1-2. Введение в UNIX. Вход в систему и простейшие действия.

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