2.32M
Category: softwaresoftware

Введение в архитектуру UNIX

1.

Вавренюк
Александр Борисович
к.т.н., доцент
abvavrenyuk@mephi.ru

2.

Проектная практика
(основы
администрирования
UNIX-подобных ОС)

3.

Виды занятий
• Лекции
• Лабораторные работы
Отчетность: зачет

4.

Лекции
Рассматриваются структура,
основные принципы работы,
пользовательский интерфейс
UNIX-подобных операционных
систем (ОС).

5.

Лабораторные работы (1)
Командный интерфейс ОС UNIX
• Знакомство с ОС UNIX
• Управление файлами и каталогами
• Разграничение прав доступа

6.

Лабораторные работы (2)
Командный интерфейс ОС UNIX
• Управление процессами
• Программирование на языке shell

7.

Лабораторные работы (3)
Адрес кафедрального UNIXсервера:
samos.dozen.mephi.ru
Возможен доступ через Интернет

8.

9.

Литература (1)
1. Вавренюк А.Б., Курышева О.К., Кутепов С.В.,
Макаров В.В. Операционные системы. Основы
UNIX: учебное пособие. М.: ИНФРА-М, 2018.
2. Таненбаум Э. Современные операционные
системы. 4-е изд. СПб.: Питер, 2015.
3. Вавренюк А.Б., Курышева О.К., Макаров В.В.
Командный интерфейс операционных систем
семейства UNIX. Лабораторный практикум:
учебно-методическое пособие. М.: НИЯУ
МИФИ, 2015.

10.

Литература (2)
4. Забродин Л.Д., Вавренюк А.Б., Макаров В.В.
UNIX: основы командного интерфейса и
программирования (в примерах и задачах):
Учебное пособие. М.: НИЯУ МИФИ, 2010.
5. Робачевский А.М., Немнюгин С.А., Стесик
О.Л. Операционная система UNIX. 2-е изд.
СПб.: ВHV, 2010.

11.

История UNIX
1 января 1970 года – официальная
дата рождения. От нее
отсчитывают время системные
часы. 32-разрядный счетчик
переполнится 19 января 2038 года.

12.

1965 – Bell Telephone Laboratories
(AT&T) совместно с General
Electric Company и
Массачусетским институтом
технологии (MIT)
MULTICS (MULTIplexed Information
and Computing Service)

13.

Ken Thompson
Dennis Ritchie

14.

1984 – Ричард Столлман создает проект
GNU «GNU’s Not UNIX»
Первой программой, выпущенной по
лицензии GNU стал текстовый редактор
Emacs. Далее число программ и
разработчиков, работающих под этой
лицензией постоянно увеличивалось.
Необходима была свободная среда,
позволяющая осуществлять запуск этих
программ.

15.

Richard Stallman

16.

1991 – Линус Торвалдс создает ядро Linux.
Возможности этого ядра позволяют
компоновать открыто распространяемое в
исходных кодах программное обеспечение
GNU как завершенную операционную
систему. ОС GNU/Linux позднее
становится известной под сокращенным
именем Linux.

17.

Linus Torvalds

18.

Версии ядер Linux
Linux 0.01 17 сентября 1991 (10 239 строк кода)
Linux 1.0.0 14 марта 1994 (176 250 строк кода)
Linux 2.0.0 9 июня 1996 (777 956 строк кода
Linux 3.0 22 июля 2011 (14,6 млн строк кода)
Linux 3.1 24 октября 2011
Linux 3.3 15 января 2012 (более 15 млн строк кода)
Linux 4.0 12 апреля 2015 (более 19 млн строк кода)
Linux 5.0 7 января 2019 (более 26 млн строк кода)
Linux 6.0 2 октября 2022 (более 30 млн строк кода)
Последняя версия
Linux 6.10.7 29 августа 2024

19.

FreeBSD – 1993 год на базе BSD Lite версия
для IBM PC.
Последние версии: 13.3 5 марта 2024
14.1 4 июня 2024
NetBSD – 1993 год на базе 4.3 BSD. Лозунг:
Of course it runs NetBSD.
Последняя версия 10.0 28 марта 2024
OpenBSD – 1995 год ответвление от
NetBSD. Основной лозунг – создание
наиболее безопасной, свободной и
лицензионно чистой UNIX-подобной ОС.

20.

OpenBSD первый выпуск в 1995 году.
Новая версия выходит два раза в год –
1
мая и 1 ноября.
Последняя версия 7.5 вышла 5 апреля 2024
года.
В настоящее время поддерживает 15
различных платформ.

21.

Android – OC для смартфонов, планшетов,
электронных книг, бытовых роботов…
Разработана компанией Android в 2008
году. Основана на ядре Linux и
виртуальной Java-машине компании
Google
Сейчас права принадлежат компании
Google.
Последняя версия 14 – 4 октября 2023
года.

22.

iOS (iPhoneOS) – ОС для смартфонов и
других устройств, выпускаемых
компанией Apple. Выпущена в 2007 году.
Использует ядро XNU, основано на
микроядре Mach, используется также код
FreeBSD. Разрабатывается только для
устройств Apple ARM-архитектуры.
Последняя версия 17.6 – 8 августа 2024
года.

23.

Операционная система
(ОС)
Комплекс взаимосвязанных
программ, предназначенных
для управления ресурсами
компьютера и организации
взаимодействия с
пользователем

24.

ОС как система
управления ресурсами
ОС как расширенная
(виртуальная) машина

25.

Введение в
архитектуру UNIX

26.

Причины популярности
UNIX
• Код написан на Си
• Многозадачная, многопользовательская с
широким спектром услуг
• Наличие стандартов
• Мощный модульный пользовательский
интерфейс
• Иерархическая файловая система
• Большое количество свободно
распространяемых приложений

27.

Ядро системы
обеспечивает базовую
функциональность:
управление процессами,
распределение памяти,
доступ к файлам и
периферийным устройствам

28.

Структура ядра

29.

Основные подсистемы
ядра
• Файловая подсистема
• Подсистема управления
процессами и памятью
• Подсистема ввода/вывода

30.

Файловая подсистема
• Поддержка унифицированного
интерфейса к обычным файлам
и периферийным устройствам
• Проверка прав доступа

31.

Подсистема управления
процессами
• Создание и удаление процессов
• Распределение системных
ресурсов
• Синхронизация процессов
• Межпроцессное взаимодействие

32.

Подсистема
ввода/вывода
• Обеспечение работы с
периферийными устройствами
• Буферизация данных
• Взаимодействие с драйверами

33.

Структура файловой системы
UNIX

34.

Каталог /bin
Часто употребляемые команды и
утилиты системы общего
пользования

35.

Каталог /sbin
Часто употребляемые команды и
утилиты системы для
администрирования и
начальной загрузки

36.

Каталог /etc
Системные конфигурационные
файлы. Каталоги стартовых
скриптов.
/etc/passwd /etc/group /etc/shadow

37.

Каталог /lib
Файлы системных библиотек

38.

Каталог /dev
Специальные файлы устройств.
Обычно содержит каталоги, в
которых группируются
устройства по типам. Бывает
виртуальный каталог, который
формируется динамически на
основе найденных устройств.

39.

Каталог /tmp
Для хранения временных
файлов. Все пользователи
могут создавать в нем файлы.
Очищается при перезагрузке
системы, а также периодически
от файлов, доступа к которым
не было в течение длительного
времени.

40.

Каталог /usr
Неизменяемая часть UNIXсистемы. Имеет большое
количество подкаталогов:
/usr/bin /usr/lib /usr/sbin
/usr/include /usr/man

41.

Каталог /var
Изменяемая часть UNIXсистемы. Имеет большое
количество подкаталогов:
/var/log /var/tmp /var/spool

42.

Каталог /home
Размещение домашних каталогов
пользователей

43.

Каталог /boot
Файлы, обеспечивающие
начальную загрузку ОС

44.

Процессы
• Системные процессы
• Демоны
• Прикладные процессы

45.

Атрибуты процесса (1)
• Идентификатор PID
• Идентификатор родительского
процесса PPID
• Приоритет процесса (поправка)
Nice
• Терминал TTY

46.

Атрибуты процесса (2)
• Реальный и эффективный
идентификаторы пользователя
(UID и EUID)
• Реальный и эффективный
идентификаторы группы (GID и
EGID)

47.

Жизненный путь процесса

48.

Иерархия процессов

49.

Пользователи
Числовые идентификаторы
UID, GID
Символьные имена
Пользователь root UID=0

50.

Работа пользователей
• Командный режим
• Графический режим

51.

Командный режим
Используется командный
интерпретатор (оболочка)
shell (Вourn shell, csh, ksh,
bash и т.п.). Командный
интерпретатор выводит
приглашение, считывает,
интерпретирует и выполняет
очередную команду
пользователя.

52.

Команда
• Внутренняя – выполняется
командным
интерпретатором
• Внешняя – командный
интерпретатор запускает на
выполнение программу
(утилиту) из файла
(загрузочный модуль или
shell-процедура)

53.

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

54.

Сетевой вход
• telnetd – telnet (небезопасно)
• sshd – ssh

55.

Файл /etc/passwd

56.

Формат файла
/etc/passwd (1)
Набор текстовых строк –
учетных записей. Поля в
строке разделяются
двоеточием. Семь полей
user:x:1341:157:New user:/home/user:/bin/bash

57.

Формат файла
/etc/passwd (2)
1. Логическое имя (login)
2. Зашифрованный пароль или x (/etc/shadow)
3. Идентификатор пользователя (uid)
4. Идентификатор группы (gid)
5. Комментарий к учетной записи (gecos)
6. Домашний каталог пользователя
7. Командный интерпретатор

58.

Авторизация пользователя
1.
2.
3.
4.
5.
6.
Аутентификация
Назначение терминала
Установление домашнего каталога текущим
Настройка среды (переменные окружения)
Запуск командного интерпретатора
Командный интерпретатор выполняет
начальные процедуры (/etc/profile,
.bash_profile, .bash_login). Могут
устанавливаться дополнительные
переменные окружения

59.

Среда пользователя (1)
Набор текстовых строк вида:
переменная=значение.
Используется различными
утилитами, в том числе
командным
интерпретатором для
настройки.

60.

Среда пользователя (2)
PATH
PS1
НОМЕ
USER
SHELL
TERM
LANG
MAIL

61.

Работа с командами
Приглашение shell – $.
Команда вводится до ввода
Enter.
Дополнительный ввод – >.
Выход из системы – ctrl-d,
exit, logout.

62.

Справка по команде
help внутренняя команда
man [ раздел ] страница
1. Пользовательская команда
2. Системный вызов
3. Библиотечная функция
4. Драйверы устройств
5. Форматы файлов
8. Системные команды

63.

Формат команды
команда [–оп1 [–оп2 […] [арг1 [арг2
[…] [<имя] [>имя]

64.

Команда alias
alias имя=значение
alias –p
unalias имя
Примеры:
alias ll=‘ls –l’
unalias ll

65.

Команда date
date ключи +формат
date новое значение даты и времени
Примеры:
date -u

66.

Команда df
Информация об используемом
дисковом пространстве
Примеры:
df -h

67.

Команды which и whereis
which [-a] команда
whereis [-b] [-m] [-s] команда
Примеры:
$ which ls
/bin/ls
$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz
$

68.

Команда id
id [-u] [-g] [-G] [-n] [пользователь]
Примеры:
$ id -u root
0
$ id -ng abv
users
$

69.

Команда groups
Аналогична
id -nG [пользователь]

70.

Команда mail
Отправка и чтение почтовых
сообщений. Почтовая служба
глобальна (позволяет отправлять
сообщения пользователем других
систем, используя полный почтовый
адрес (имя@сервер).
Каталог /var/spool/mail.

71.

Команда write и mesg
Отправка онлайн сообщений
пользователям текущей системы.
Сообщение прерывает вывод
текущей команды получателя.
Для защиты от онлайн сообщений
следует использовать команду
mesg.

72.

Команда hostname
Примеры:
$ hostname
UnixVM
$ hostname qqq
hostname: you must be root to change
the host name
$

73.

Команда uname
uname [-asnrvmpio]
Примеры:
$ uname -a
Linux UnixVM 3.16.0-6-amd64 #1
SMP Debian 3.16.57-2 (2018-07-14)
x86_64 GNU/Linux
$

74.

Команда finger
finger [-m] [пользователь]
Примеры:
$ finger abv
Login: abv
Name: Alexandr B. Vavrenuk
Directory: /home/abv
Shell: /bin/bash
On since Mon Feb 15 17:33 (MSK) on pts/0 from 192.168.30.5
No mail.
No Plan.
$ finger -s abv
Login Name
abv
$
Tty
Idle Login Time Office
Alexandr B. Vavrenuk pts/0
Office Phone
Feb 15 17:33 (192.168.30.5)

75.

Команда chsh
Позволяет в диалоговом режиме
поменять текущий shell.
Запрашивает пароль пользователя.
Список допустимых shell в файле
/etc/shells

76.

Команда chfn
Позволяет в диалоговом режиме
поменять информацию, выдаваемую
командой finger

77.

Команда last
Выдает статистику о последних
пользовательских регистрациях
в системе
last [-количество] [пользователь]
Примеры:
$ last -3 kutepov
kutepov pts/1
10.10.0.100
Sat Feb 16 10:14 - 12:52 (02:37)
kutepov pts/0
10.10.0.100
Sat Feb 16 10:13 - 12:52 (02:39)
kutepov pts/0
10.10.0.100
Tue Feb 5 13:21 - 13:23 (00:02)
wtmp begins Fri Feb 1 14:17:14 2019
$

78.

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

79.

Команда whoami
Логическое имя пользователя,
вызвавшего данную команду.
Команда аналогична id -nu.

80.

Команда passwd
Поменять пароль пользователя.
Будет запрошен старый пароль
и два раза новый. Пользователь root
может поменять любой пароль.

81.

Обращение к файлу
Абсолютный путь
(относительно корневого
каталога)
Относительный путь
(относительно текущего
каталога)

82.

Абсолютный путь
/etc/passwd
/home/user/a.txt
/bin/ls
~/cat/f1

83.

Относительный путь
./a.txt
a.txt
user/a.txt
../../f1

84.

Команда cd
cd новый каталог
cd
(без параметров эквивалентно cd ~)
Примеры:
cd /etc
cd ..

85.

Команда pwd
Печать абсолютного пути текущего
каталога
Примеры:
$ pwd
/home/abv
$ cd ..
$ pwd
/home
$

86.

Команда ls (1)
Просмотр содержимого каталога
(алфавитный список имен файлов)
ls имя1 имя2 …
Ключи:
-l длинный листинг, содержащий
атрибуты элементов каталога
-a выводить также скрытые имена
-d выводить информацию о каталоге
как имени, а не содержимом

87.

Команда ls (2)
Формат длинного листинга:
• тип файла
• права доступа
• количество ссылок
• имя владельца
• имя группы владельца
• размер файла (в байтах)
• временная метка
• имя файла

88.

Команда ls (3)
Примеры:
$ ls test
a.out quest1.c quest3 quest4.c quest6 quest7.c two
contr.c quest2 quest3.c quest5 quest6.c t1
quest1 quest2.c quest4 quest5.c quest7 t2
$ ls -l test/quest1.c
-rw-r--r-- 1 abv users 78 дек 19 2013 test/quest1.c
$ ls -a test
.
contr.c quest2 quest3.c quest5 quest6.c t1
..
quest1 quest2.c quest4 quest5.c quest7 t2
a.out quest1.c quest3 quest4.c quest6 quest7.c two
$ ls -ld test
drwxr-sr-x 2 abv users 4096 дек 20 2013 test
$

89.

Команда ls (4)
Примеры:
$ cd test
$ ls
a.out quest1.c quest3 quest4.c quest6 quest7.c two
contr.c quest2 quest3.c quest5 quest6.c t1
quest1 quest2.c quest4 quest5.c quest7 t2
$ ls .
a.out quest1.c quest3 quest4.c quest6 quest7.c two
contr.c quest2 quest3.c quest5 quest6.c t1
quest1 quest2.c quest4 quest5.c quest7 t2
$

90.

Команда mkdir (1)
Создание нового каталога
mkdir имя1 имя2 …
Ключи:
-p в случае необходимости создать
необходимые родительские каталоги

91.

Команда mkdir (2)
Примеры:
$ mkdir newcat
$ ls -d newcat
newcat
$ ls -a newcat
. ..
$ cd newcat
$ mkdir d1/d2
mkdir: невозможно создать каталог «d1/d2»: Нет такого файла или каталога
$ mkdir -p d1/d2
$ ls d1
d2
$

92.

Команда rmdir (1)
Удаление пустого каталога
rmdir имя1 имя2 …
Ключи:
-p
rmdir -p a/b/c => rmdir a/b/c a/b a

93.

Команда rmdir (2)
Примеры:
$ ls newcat/d1
d2
$ ls newcat/d1/d2
$ rmdir newcat/d1/d2
$ rmdir newcat
rmdir: не удалось удалить «newcat»: Каталог не пуст
$ rmdir -p newcat
rmdir: не удалось удалить «newcat»: Каталог не пуст
$ rmdir -p newcat/d1
$ ls newcat
ls: невозможно получить доступ к newcat: Нет такого файла или каталога
$

94.

Команда touch
Создание нового файла или
обновление временных параметров
существующего файла или каталога
touch имя1 имя2 …

95.

Команда rm
Удаление жесткой ссылки
rm имя1 имя2 …
Ключи:
-i запрашивать подтверждение
-r рекурсивно удалить непустой
каталог
-f не сообщать об ошибках

96.

Команда сp (1)
Копирование файлов
cp файл1 файл2
cp файл1 файл2 … каталог
Ключи:
-i интерактивный режим

97.

Команда cp (2)
Примеры:
Копирование одного файла
cp f1 f2
Копирование одного файла с тем же
именем в другой каталог
cp f1 d1
Копирование нескольких файлов
cp f1 f2 f3 f4 d1

98.

Команда mv (1)
Перемещение (переименование)
файлов
mv файл1 файл2
mv файл1 файл2 … каталог
mv каталог1 каталог2
Ключи:
-i интерактивный режим
-f неинтерактивный режим
-n никогда не перезаписывать файлы

99.

Команда mv (2)
Примеры:
Переименование одного файла
mv f1 f2
Перемещение одного файла с тем же
именем в другой каталог
mv f1 d1
Перемещение нескольких файлов
mv f1 f2 f3 f4 d1

100.

Команда ln (1)
Создание ссылок
ln файл1 файл2
ln файл1
ln файл1 файл2 … каталог
Ключи:
-i интерактивный режим
-s создать символическую ссылку

101.

Команда ln (2)
Примеры:
Создание жесткой ссылки
ln f1 f2
Создание символической ссылки
ln -s f1 f2
Создание жестких ссылок на файлы в
текущем каталоге
ln ../f1 ../f2 ../f3

102.

Метасимволы (1)
В именах файлов могут встречаться
специальные символы (*, ?, [], !).
Если они не экранированы, то
командный интерпретатор выполняет
подстановку имен файлов.
Если подстановку выполнить
невозможно, то специальные
символы остаются без изменений

103.

Метасимволы (2)
Символ ? заменяет любой символ,
кроме точки, стоящей на первом
месте. Символ * заменяет любую
последовательность символов или их
отсутствие, кроме точки, стоящей на
первом месте. То есть имена скрытых
файлов не подставляются

104.

Метасимволы (3)
Символы [] заключают некоторую
последовательность символов.
Аналогично ? заменяет любой
символ, но из перечисленных
в последовательности. Допустимо
указывать диапазон через -.
Например: [0-9] – все цифры,
[A-D] – буквы A, B, C, D

105.

Метасимволы (4)
Символ ! как первый символ
последовательности, заключенной
в [], говорит, что любой символ,
кроме перечисленных
в последовательности и точки
на первом месте

106.

Метасимволы (5)
Примеры:
$ ls
f. f1 f.1 f2 f21 f22 f.3
$ ls f?
f. f1 f2
$ ls ?21
f21
$ ls f*
f. f1 f.1 f2 f21 f22 f.3
$ ls *2
f2 f22
$

107.

Метасимволы (6)
Примеры:
$ ls
f1 f2 f3 f4 f5 f6 f7
$ ls f[127]
f1 f2 f7
$ ls f[1-4]
f1 f2 f3 f4
$ ls f[1-367]
f1 f2 f3 f6 f7
$ ls f[!45]
f1 f2 f3 f6 f7
$

108.

Метасимволы (7)
Примеры:
Удалить все файлы, имена которых
состоят из двух символов
rm ??
Скопировать все файлы, имена
которых начинаются с fil,
в вышележащий каталог
cp fil* ..

109.

Команда tree (1)
Вывод на экран иерархии каталогов
tree имя1 имя2 …
Ключ -d выводить только каталоги
Примеры:
$ mkdir d
$ mkdir -p d/d1/d4/d5
$ mkdir -p d/d2
$ mkdir -p d/d3
$ > d/d1/d4/f1
$ > d/d1/f2
$

110.

Команда tree (2)
Примеры:
$ tree d
d
├── d1
│ ├── d4
│ │ ├── d5
│ │ └── f1
│ └── f2
├── d2
└── d3
5 directories, 2 files
$

111.

Команда tree (3)
Примеры:
$ tree -d d
d
├── d1
│ └── d4

└── d5
├── d2
└── d3
5 directories
$

112.

Команда find (1)
Поиск файлов в поддереве каталогов
по разным условиям
find [каталог] условия

113.

Команда find (2)
Условия задаются в виде опций.
Если опции перечислены,
то подразумевается логическая
связка «И». В противном случае,
между опциями следует указывать
-o «ИЛИ». Отрицание опции – !

114.

Команда find (3)
Опции:
-type f | d тип файла
-name шаблон
-size размер (в блоках или байтах)
-user владелец файла
-mmin время модификации (мин)
-mtime время модификации (сутки)
-exec команда ;

115.

Команда find (4)
Для числовых параметров число
означает точное значение,
+число – больше,
-число – меньше

116.

Команда find (5)
Примеры:
Все файлы, имена которых
начинаются с Z или каталоги, имена
которых начинаются с Y
find . \( -name “Z*” -type f \) -o
\( -name “Y*” -type d \)

117.

Команда grep (1)
Поиск по содержимому
текстового файла
grep шаблон имя1 имя2 …
Ключи:
-i не учитывать регистр в шаблоне
-v выводить строки, не содержащие
шаблон
-l выводить только имена файлов

118.

Команда grep (2)
Примеры:
$ cat f1
123
abc
$ cat f2
abc
$ grep 123 f1
123
$ grep 123 f1 f2
f1:123
$ grep -l abc f1 f2
f1
f2
$

119.

Команда du (1)
Вывод информации о месте,
занимаемом на диске файлом или
каталогом
du имя1 имя2 …
Ключи:
-a вывод информации о каждом
файле
-s вывод только суммарной
информации

120.

Команда du (2)
Примеры:
$ du test2
16
test2
$ du -a test2
4
test2/main.c
8
test2/main
0
test2/test2
16
test2
$

121.

Команда cat (1)
Вывод содержимого текстового
файла
cat имя1 имя2 …

122.

Команда cat (2)
Копирование файла:
cat f1 > f2
Добавление информации в конец:
cat f1 >> f2
Объединение файлов:
cat f1 f2 f3 > newf
Создание файла:
cat > f

123.

Команда
cat
(3)
Примеры:
$ cat f1
12345
abcde
$ cat f2
qwerty
asdfg
54321
$ cat f1 f2
12345
abcde
qwerty
asdfg
54321
$

124.

Команда cat (4)
Примеры:
$ cat >f3
123
$ cat f3
123
$ cat f1 f2 > f3
$ cat f3
12345
abcde
qwerty
asdfg
54321
$

125.

Команда cat (5)
Примеры:
$ cat f2 >> f1
$ cat f1
12345
abcde
qwerty
asdfg
54321
$

126.

Команда more
Постраничный вывод содержимого
файла
more имя1 имя2 …

127.

Команда less
Постраничный вывод содержимого
файла c дополнительными
возможностями
less имя1 имя2 …

128.

Команда head
Вывод первых строк файла
head имя1 имя2 …
По умолчанию – 10 строк
Примеры:
head f1
head -5 f1

129.

Команда tail
Вывод последних строк файла
tail имя1 имя2 …
По умолчанию – 10 строк
Примеры:
tail f1
tail -5 f1

130.

Команда sort (1)
Вывод строк файла в алфавитном
порядке
sort имя1 имя2 …
Ключи:
-r обратный порядок сортировки
-n сортировать как числа

131.

Команда sort (2)
Примеры:
$ cat f1
sdfg
aser
zser
qwer
$ sort f1
aser
qwer
sdfg
zser
$

132.

Команда sort (3)
Примеры:
$ sort f2
1
125
2
345
$ sort -n f2
1
2
125
345
$

133.

Команда wc (1)
Подсчет количества символов, слов
и строк в файле
wc имя1 имя2 …
Ключи:
-c считать только символы
-w считать только слова
-l считать только строки

134.

Команда wc (2)
Примеры:
$ cat f1
qwe rty
asd
assd f f
$ cat f2
123 567
qwe
$ wc f1 f2
3 6 22 f1
2 3 12 f2
5 9 34 итого
$

135.

Команда wc (3)
Примеры:
$ wc -l f1 f2
3 f1
2 f2
5 итого
$ wc -w f1 f2
6 f1
3 f2
9 итого
$ wc -c f1 f2
22 f1
12 f2
34 итого
$

136.

Конвейер команд (1)
Стандартный вывод одной команды
направляется в стандартный ввод
другой команды. Можно каскадировать
в цепочки команд:
команда1 | команда2 | команда3

137.

Конвейер команд (2)
Команда слева от знака конвейера
должна генерировать стандартный
вывод. Команда справа от знака
конвейера должна принимать
стандартный ввод.

138.

Конвейер команд (3)
Многие команды при отсутствии
параметров принимают стандартный
ввод: cat, more, less, sort, head, tail, wc
Команда cat также принимает
стандартный ввод на месте параметра -.

139.

Конвейер команд (4)
Примеры:
$ ls -l test | head -5
итого 108
-rwxr-xr-x 1 abv users 4698 дек 2 2012 a.out
-rw-r--r-- 1 abv users 696 фев 20 2012 contr.c
-rwxr-xr-x 1 abv users 4490 дек 19 2013 quest1
-rw-r--r-- 1 abv users 78 дек 19 2013 quest1.c
$ ls -l test | wc -l
20
$ who
abv
pts/0
$ who | wc -w
5
$
2019-03-01 14:07 (10.10.0.100)

140.

Стандартный протокол (1)
В отличие от стандартного вывода
стандартный протокол имеют все
команды. По умолчанию стандартный
протокол связан с терминалом.
В стандартный протокол команды
выводят сообщения об ошибках.
Переадресация – 2>имя_файла.

141.

Стандартный протокол (2)
Примеры:
$ ls cat/f1 cat/f2
ls: невозможно получить доступ к cat/f2: Нет такого файла или каталога
cat/f1
$ ls cat/f1 cat/f2 >/dev/null
ls: невозможно получить доступ к cat/f2: Нет такого файла или каталога
$ ls cat/f1 cat/f2 2>/dev/null
cat/f1
$ ls cat/f1 cat/f2 >file1 2>file2
$ cat file1
cat/f1
$ cat file2
ls: невозможно получить доступ к cat/f2: Нет такого файла или каталога
$

142.

Права доступа

143.

Три категории
пользователей
• Владелец u (User)
• Группа владельца g (Group)
• Остальные o (Other)

144.

Три права
• Чтение r (Read)
• Запись w (Write)
• Исполнение x (eХecute)

145.

По команде ls -l
rwxrwxrwx 777
u g o
- - - - - - - - - 000
rwxr - xr - x 755
r - - r - - r - - 444
rw- - - - - - - 600

146.

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

147.

Применение прав (2)
r-- rw- rwПри обращении к файлу
владелец сможет только
читать. Любой другой
пользователь – читать и
писать.

148.

Значение прав (1)
Чтение для файла
Получение содержимого
файла. Любые команды,
которым требуется
содержимое файла, но не
требуется его
модифицировать.

149.

Значение прав (2)
Запись для файла
Модификация файла. Любые
команды, которые изменяют
содержимое файла. Файл
может стать пустым.

150.

Значение прав (3)
Исполнение для файла
Исполнение файла,
являющегося загрузочным
модулем, или текстового
файла, содержащего команды
командного интерпретатора.

151.

Значение прав (4)
Чтение для каталога
Получение списка имен
данного каталога. Это право
не позволяет обращаться
к файлам.

152.

Значение прав (5)
Запись для каталога
Совместно с правом
исполнения позволяет
создавать и удалять имена
в данном каталоге.

153.

Значение прав (6)
Исполнение для каталога
Позволяет обращаться
к именам в данном каталоге.
Это право не позволяет
получить список имен
данного каталога. Можно
сделать каталог текущим.

154.

Команда chmod (1)
Изменение прав доступа
chmod права имя1 имя2 …
Права в виде трехзначного
восьмеричного числа либо в виде
символов.
Ключ:
-R – применить команду рекурсивно
к поддереву каталогов

155.

Команда chmod (2)
Примеры:
chmod 755 f1.txt
chmod u+x f2.txt
chmod a=rwx f3.txt
chmod -R go-w dir1 dir2
chmod ug+r-w a.out

156.

Права на новые файлы (1)
При создании нового файла
он получает права 666.
При создании нового каталога
он получает права 777.
Эти права корректируются
маской прав.

157.

Права на новые файлы (2)
Маска прав определяет:
какие права на вновь
создаваемые файлы и
каталоги должны быть
обязательно сброшены.
Маска по умолчанию – 022.

158.

Права на новые файлы (3)
666 маска 022 = 644
777 маска 022 = 755
666 маска 002 = 664
777 маска 002 = 775
666 маска 077 = 600
777 маска 077 = 700

159.

Команда umask
Просмотр и установка маски прав
Примеры:
$ umask
022
$ umask 077
$ umask
077
$

160.

Дополнительные права
suid s - - бит смены
идентификатора пользователя
sgid - s - бит смены
идентификатора группы
sticky - - t стики бит

161.

Списки доступа ACL (1)
Три базовых категории
пользователей соответствуют
трем элементам списков
доступа: user::, group:: и
other::.

162.

Списки доступа ACL (2)
Дополнительно может быть
любое количество элементов
u:user: и g:group. Если в ACL
содержится хотя бы один
такой элемент, то обязательно
наличие маски – m::.

163.

Списки доступа ACL (3)
Маска определяет
максимальное количество
прав для всех категорий,
кроме владелец и остальные.

164.

Списки доступа ACL (4)
Каталоги могут содержать
еще ACL по умолчанию – d:.
В этом случае при создании
файла в этом каталоге он
будет наследовать ACL
данного каталога по
умолчанию.

165.

Списки доступа ACL (5)
Проверка прав доступа при
наличии ACL проводится
в следующем порядке:
владелец, именованный
пользователь, группа
владельца, именованная
группа, остальные.

166.

Команда getfacl
Просмотр ACL файлов
getfacl имя1 имя2 …
Просмотр ACL файлов
(список файлов задается
в стандартном вводе)
getfacl -

167.

Команда setfacl (1)
Изменение ACL файлов
setfacl имя1 имя2 …
Ключи:
--set список_ACL – заменить ACL
-m список_ACL – дополнить ACL
-x список_ACL – удалить ACL

168.

Команда setfacl (2)
Ключи:
--set-file имя_файла – заменить ACL
-М имя_файла – дополнить ACL
-Х имя_файла – удалить ACL
В этих ключах ACL задается в файле.

169.

Команда setfacl (3)
Ключи:
-b – удалить все ACL, кроме базовых
-k – удалить ACL по умолчанию
-n – не пересчитывать маску
-d – работа с ACL по умолчанию
-R – применить рекурсивно
к поддереву

170.

Команда setfacl (4)
Примеры:
$ ls -l
итого 4
drwxr-xr-x 2 abv users 4096 мар 9 22:32 d
-rw-r--r-- 1 abv users 0 мар 9 22:23 f1
-rw-r--r-- 1 abv users 0 мар 9 22:24 f2
$ getfacl f1
# file: f1
# owner: abv
# group: users
user::rwgroup::r-other::r--
$

171.

Команда setfacl (5)
Примеры:
$ setfacl -m u:student:rwx f1
$ ls -l
итого 4
drwxr-xr-x 2 abv users 4096 мар 9 22:32 d
-rw-rwxr--+ 1 abv users 0 мар 9 22:23 f1
-rw-r--r-- 1 abv users 0 мар 9 22:24 f2
$

172.

Команда setfacl (6)
Примеры:
$ getfacl f1
# file: f1
# owner: abv
# group: users
user::rwuser:student:rwx
group::r-mask::rwx
other::r-$

173.

Команда setfacl (7)
Примеры:
$ setfacl -m g:student:rw- f1
$ getfacl f1
# file: f1
# owner: abv
# group: users
user::rwuser:student:rwx
group::r-group:student:rwmask::rwx
other::r-$

174.

Команда setfacl (8)
Примеры:
$ setfacl --set u::rw,u:dozen:rw,g::r,o::r f1
$ getfacl f1
# file: f1
# owner: abv
# group: users
user::rwuser:dozen:rwgroup::r-mask::rwother::r--
$

175.

Команда setfacl (9)
Примеры:
$ setfacl -m u:student:rwx f1
$ getfacl f1
# file: f1
# owner: abv
# group: users
user::rwuser:dozen:rwuser:student:rwx
group::r-mask::rwx
other::r-$

176.

Команда setfacl (10)
Примеры:
$ setfacl -m m::r f1
$ getfacl f1
# file: f1
# owner: abv
# group: users
user::rwuser:dozen:rw-
#effective:r--
user:student:rwx
#effective:r--
group::r-mask::r-other::r-$

177.

Команда setfacl (11)
$ setfacl -m d:g:student:rwx d
$ getfacl d
# file: d
# owner: abv
# group: users
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:group:student:rwx
default:mask::rwx
default:other::r-x
$

178.

Управление
процессами

179.

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

180.

Интерактивное задание (1)
• Запущено с клавиатуры
• Имеет доступ к терминалу
• Невозможно вводить
команды shell
• Реагирует на комбинации
клавиш

181.

Интерактивное задание (2)
Стандартный ввод, вывод,
протокол связаны с
терминалом.
Комбинации клавиш:
ctrl-c – прервать выполнение
задания

182.

Интерактивное задание (3)
ctrl-\ – прервать выполнение
задания с созданием
аварийного дампа памяти
ctrl-z – приостановить
выполнение задания, можно
возобновить позже или
перевести в фоновый режим

183.

Фоновое задание (1)
• Запущено с клавиатуры или
из cron-сценария
• Нет доступа к терминалу
• Работает параллельно с shell
• Не реагирует на комбинации
клавиш

184.

Фоновое задание (2)
Используются специальные
команды управления
заданиями: jobs, fg, bg, kill.
При запуске из командной
строки в конце следует
указывать символ &.

185.

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

186.

Команда ps (2)
Стандартный перечень полей:
• PID – идентификатор процесса
• TTY – управляющий терминал
• TIME – потребленное
процессорное время
• CMD – имя исполнимого файла

187.

Команда ps (3)
Ключи:
-a – вывод информации обо всех
процессах, за исключением не
связанных с терминалом
-e – вывод информации обо всех
процессах
-f – вывод информации в длинном
формате

188.

Команда ps (3)
Ключи:
-o <формат> – вывод информации в
пользовательском формате
-u <пользователь> – вывод
информации обо всех процессах
конкретного пользователя
-p <PID> – вывод информации о
конкретном процессе

189.

Команда ps (4)
Ключи:
-H – вывод информации об иерархии
процессов
-j – вывод информации о процессах в
формате задания

190.

Команда ps (5)
Примеры:
$ ps
PID TTY
TIME CMD
11279 pts/1 00:00:00 bash
11456 pts/1 00:00:00 ps
$ ps -j
PID PGID SID TTY
TIME CMD
11279 11279 11279 pts/1 00:00:00 bash
11480 11480 11279 pts/1 00:00:00 ps
$

191.

Команда ps (6)
Примеры:
$ ps -u abv
PID TTY
TIME CMD
10927 ?
00:00:00 systemd
10928 ?
00:00:00 (sd-pam)
11278 ?
00:00:00 sshd
11279 pts/1 00:00:00 bash
11550 pts/1 00:00:00 ps
$

192.

Команда ps (7)
Примеры:
$ ps -fp 11279
UID
abv
PID PPID C STIME TTY
TIME CMD
11279 11278 0 09:56 pts/1 00:00:00 -bash
$ ps -f
UID
PID PPID C STIME TTY
TIME CMD
abv
11279 11278 0 09:56 pts/1 00:00:00 -bash
abv
11603 11279 0 10:06 pts/1 00:00:00 ps -f
$ ps -fj
UID
PID PPID PGID SID C STIME TTY
TIME CMD
abv
11279 11278 11279 11279 0 09:56 pts/1 00:00:00 -bash
abv
11605 11279 11605 11279 0 10:06 pts/1 00:00:00 ps -fj
$

193.

Команда jobs (1)
Вывод информации обо всех
заданиях. Команда внутренняя
исполняется командным
интерпретатором.

194.

Команда jobs (1)
Вывод информации о задании.
Команда внутренняя
исполняется командным
интерпретатором.
jobs %номер задания
Без параметров – вывод информации
обо всех заданиях.

195.

Команда jobs (2)
Ключи:
-l – вывод дополнительно
идентификаторов процессов
-n – вывод информации только о
процессах, изменивших статус
-p – вывод информации только об
идентификаторах процессов

196.

Команда jobs (3)
Ключи:
-r – вывод информации только об
активных заданиях
-s – вывод информации только о
приостановленных заданиях

197.

Команда jobs (4)
Примеры:
$ jobs
[1]+ Stopped
find / > /dev/null 2>&1
[2] Running
./background &
[3] Running
./background &
[4]- Running
./background &
$ jobs -l
[1]+ 11878 Остановлено find / > /dev/null 2>&1
[2] 11917 Running
./background &
[3] 11922 Running
./background &
[4]- 11927 Running
./background &
$

198.

Команда jobs (5)
Примеры:
$ jobs -r
[2] Running
./background &
[3] Running
./background &
[4]- Running
./background &
$ jobs -s
[1]+ Stopped
find / > /dev/null 2>&1
$ bg %1
[1]+ find / > /dev/null 2>&1 &
$ jobs -n
[1] Exit 1
$
find / > /dev/null 2>&1

199.

Команды bg и fg
Перевести задание в фоновый режим
bg %<номер задания>
Перевести задание в интерактивный
режим
fg %<номер задания>
Если не указан номер задания, то
используется последнее активное,
помеченное знаком +.

200.

Команда kill
Послать сигнал процессу или
заданию
kill -<сигнал> <список процессов>
kill -<сигнал> <список заданий>
Процессы задаются
идентификатором, задания –
идентификатором с префиксом %.

201.

Команда nice (1)
Выполнить команду с пониженным
приоритетом
nice <командная строка>
Ключ:
-n <поправка>
По умолчанию поправка равна 10.

202.

Команда nice (2)
Диапазон изменения поправок
к приоритету: -20 – 19, где большее
значение соответствует более
низкому значению приоритета.
То есть 19 – самое низкое значение
приоритета. Обычный пользователь
может только уменьшить значение
поправки к приоритету.

203.

Команда nice (3)
Суперпользователь может как
увеличивать, так и уменьшать
значение поправки к приоритету
в заданном диапазоне.

204.

Команда renice
Изменить приоритет процесса
renice <идентификатор процесса>
Ключ:
-n <поправка>
По умолчанию поправка равна 10.

205.

Команда nohup (1)
Запустить команду с защитой
от прерывания.
nohup <командная строка> &
Если не указан файл перенаправления
вывода, то вывод перенаправляется
в файл nohup.out. Ввод перенаправлен
из /dev/null.

206.

Команда nohup (2)
Без команды nohup все фоновые
задания будут завершены после
завершения пользователем сеанса
работы в системе.

207.

Shellпрограммирование

208.

Язык командного
интерпретатора
/bin/bash
Born Again Shell

209.

Переменные (1)
Все переменные имеют тип
символьной строки. Простые
переменные объявлять не
нужно. При первом появлении
любая переменная имеет
значение – пустая строка.

210.

Переменные (2)
Можно явно определить тип
переменной как целый:
declare -i переменная
В этом случае при
присваивании выражение будет
считаться арифметическим без
дополнительных указаний.

211.

Переменные (3)
Присваивание:
переменная=значение
Использование (подстановка
значения):
${переменная}
Удалить переменную:
unset переменная

212.

Переменные (4)
Добавить переменную в среду
(сделать доступной дочерним
Shell):
export переменная
При выполнении команды
export возможно сразу
выполнить присваивание.

213.

Переменные (5)
Ввести значение переменной из
стандартного ввода:
read переменная1 …
При вводе разделители
задаются переменной IFS. По
умолчанию: пробел, табулятор,
новая строка.

214.

Переменные (6)
Остаток строки при вводе
независимо от разделителей
записывается в последнюю
переменную.

215.

Переменные (7)
Вывести строку на экран:
echo строка
В строке производятся
подстановки переменных.

216.

Переменные (8)
Примеры:
$ a=5
$ b=7
$ export a
$ echo a=$a b=$b
a=5 b=7
$ bash
$ echo a=$a b=$b
a=5 b=
$ exit
exit
$

217.

Переменные (9)
$ a=$b
$ echo $a
7
$ a=b
$ echo $a
b
$ declare -i a
$ echo $a
b
$ a=b
$ echo $a
7
$

218.

Переменные (10)
$ read a b c
qww rty rty q1
$ echo a=$a b=$b c=$c
a=0 b=rty c=rty q1
$ unset a b c
$ echo a=$a b=$b c=$c
a= b= c=
$ declare -p a b c
-bash: declare: a: не найден
-bash: declare: b: не найден
-bash: declare: c: не найден
$

219.

Переменные (11)
По умолчанию всегда
происходит конкатенация
строк:
$ a=5
$ b=7
$ ab=12
$ echo $ab
12
$ echo ${a}b
5b
$

220.

Команда expr (1)
Старые версии командных
интерпретаторов не
поддерживали арифметические
выражения. Было необходимо
использовать команду expr. Она
интерпретировала строковые
значения переменных как
целые числа.

221.

Команда expr (2)
Для подстановки результата
выполнения команды
(стандартного вывода команды)
используется символ ` – тупое
ударение. Аналогичное
действие имеет $().

222.

Команда expr (3)
Примеры:
$ expr 2 + 2
4
$ a=3
$ b=4
$ expr $a + $b
7
$ c=`expr $a + $b`
$ echo $c
7
$

223.

Команда expr (4)
$ a=7
$ b=9
$ c=$(expr $a * $b)
expr: синтаксическая ошибка
$ c=$(expr $a "*" $b)
$ echo $c
63
$ a=$(expr $c / 3)
$ echo $a
21
$ d=$(expr 21 % 5)
$ echo $d
1
$

224.

Арифметические
выражения (1)
Современные версии
командных интерпретаторов
поддерживают вычисления
арифметических выражений.
let "арифметическое выражение"
((арифметическое выражение))

225.

Арифметические
выражения (2)
Если нужно присвоить
переменной результат
арифметического выражения,
то используется синтаксис:
переменная=$((арифм. выраж.))

226.

Арифметические
выражения (3)
Для переменных, объявленных
с помощью declare целыми,
можно явно не указывать целый
тип выражения при помощи let
или (()).

227.

Арифметические
выражения (4)
Примеры:
$ a=5
$ b=7
$ ((c=a+b))
$ echo $c
12
$ c=a+b
$ echo $c
a+b
$

228.

$ declare -i c
$ c=a+b
$ echo $c
12
$ a=$((b+c))
$ echo $a
19
$ a=$b+$c
$ echo $a
7+12
$
Арифметические
выражения (5)

229.

Строковые выражения (1)
Косвенная подстановка:
${!переменная}
Имя переменной для
подстановки берется из
значения переменной.

230.

Строковые выражения (2)
Выделение подстроки:
${перем.:позиция:количество}
Нумерация начинается с нуля.
Отрицательное значение
соответствует концу строки.

231.

Строковые выражения (3)
Длина строки:
${#переменная}

232.

Строковые выражения (4)
Примеры:
$ a=qwerty
$ echo $a
qwerty
$ echo ${#a}
6
$ echo ${a:2:3}
ert
$ echo ${a:2}
erty
$

233.

Строковые выражения (5)
$ echo ${!a}
$ qwerty=15
$ echo $qwerty
15
$ echo $a
qwerty
$
$ echo ${!a}
15
$

234.

Строковые выражения (6)
$ a=who
$ echo a
a
$ echo $a
who
$ echo "$a"
who
$ echo '$a'
$a
$ echo `$a`
abv pts/0 2019-04-11 16:25 (109-252-15-87.nat.spd-mgts.ru)
$

235.

Специальные переменные
Код завершения последней
команды (успешное завершение
– 0): $?
PID текущего командного
интерпретатора: $$
PID последнего запущенного
фонового процесса: $!

236.

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

237.

Позиционные параметры
(2)
Позиционные параметры
нумеруются начиная с нуля,
причем нуль соответствует
имени самой командной
процедуры.

238.

Позиционные параметры
(3)
При запуске:
$ proc as q 12
Внутри процедуры $0 будет
равно proc, $1, $2, $3
соответственно as, q, 12.
Параметр $4 будет пустой.

239.

Позиционные параметры
(4)
Внутри процедуры будет также
доступен параметр $#
(количество позиционных
параметров). Он будет равен 3.
Для обращения к параметрам с
двузначным номером
обязательны {} – ${13}.

240.

Позиционные параметры
(5)
Команда shift осуществляет
сдвиг позиционных
параметров. Позиционный
параметр с номером n-1
получает значение параметра n.
Значение из $1 теряется. $#
уменьшается на единицу.

241.

Позиционные параметры
(6)
Присвоить значение
позиционных параметров
можно командой set.
set зн.1 зн.2 …
Параметры получат значения
по порядку зн.1, зн.2 и т.д.

242.

Позиционные параметры
(7)
Примеры:
$ set a b c d
$ echo $1
a
$ shift
$ echo $1
b
$ echo $#
3
$

243.

Список команд (1)
Последовательность команд (с
набором параметров и
перенаправлений), разделенная
специальными разделителями.

244.

Список команд (2)
Разделители:
;
перевод строки
последовательное выполнение
команд.

245.

Список команд (3)
Разделители:
&
параллельное выполнение
команд, все, кроме последней, в
фоновом режиме.

246.

Список команд (4)
Разделители:
&&
выполнение второй команды, в
случае успешного завершения
первой команды.

247.

Список команд (5)
Разделители:
||
выполнение второй команды, в
случае неуспешного
завершения первой команды.

248.

Соединение команд (1)
(список команд)
Выполняется в отдельной
копии командного
интерпретатора.

249.

Соединение команд (2)
{список команд;}
Выполняется в текущей копии
командного интерпретатора.
Иначе называется группой
команд.

250.

Команда test (1)
Вырабатывает код завершения в
зависимости от условий.
Обычно используется в
синтаксических конструкциях.
Истинное условие – код
завершения равен нулю.
Ложное условие – код
завершения отличен от нуля.

251.

Команда test (2)
Условия задаются опциями и
параметрами команды.
Короткая форма записи
команды – [ ].
test $a = $b эквивалентно
[ $a = $b ]

252.

Команда test (3)
Сравнение строк:
строка1 = строка2
строки равны,
строка1 != строка2
строки не равны.

253.

Команда test (4)
Анализ строк:
-z строка
строка пуста,
-n строка
строка не пуста.

254.

Команда test (5)
Сравнение числовых
параметров:
число1 -eq число2
числа равны,
число1 -ne число2
числа не равны.

255.

Команда test (6)
Сравнение числовых
параметров:
число1 -gt число2
число1 больше, чем число2,
число1 -ge число2
число1 больше или равно, чем
число2.

256.

Команда test (7)
Сравнение числовых
параметров:
число1 -lt число2
число1 меньше, чем число2,
число1 -le число2
число1 меньше или равно, чем
число2.

257.

Команда test (8)
Анализ файлов:
-е объект
объект существует,
-f объект
объект – обычный файл,
-d объект
объект – каталог.

258.

Команда test (9)
Анализ файлов:
-r объект
объект доступен для чтения,
-w объект
объект доступен для записи,
-x объект
объект доступен для
исполнения.

259.

Команда test (10)
Анализ файлов:
-s объект
размер объекта отличен от нуля.

260.

Команда test (11)
Комбинация условий:
-а И
-o ИЛИ
! НЕ

261.

Команда test (12)
Примеры:
$ a=qwe
$ b=qwe
$ c=xyz
$ test $a = $b && echo a equal b
a equal b
$ test $a != $b && echo a not equal b
$ test $a = $c && echo a equal c
$ test $a != $c && echo a not equal c
a not equal c
$

262.

Команда test (13)
$ a=5
$ b=05
$ test $a = $b && echo a equal b
$ test $a != $b && echo a not equal b
a not equal b
$ test $a -eq $b && echo a equal b
a equal b
$ test $a -ne $b && echo a equal b
$ c=5
$ test $a -eq $b -a $a -eq $c && echo a equal b and a equal c
a equal b and a equal c
$ test $a -eq $b && test $a -eq $c && echo a equal b and a equal c
a equal b and a equal c
$

263.

Команда test (14)
$ ls
asm.c
hashtable.c recurse.c
strings.c
$ [ -e asm.c ] && echo file asm.c exists
file asm.c exists
$ [ -e asm1.c ] && echo file asm1.c exists
$ [ -f asm.c ] && echo file asm.c is regular
file asm.c is regular
$ [ -d asm.c ] && echo file asm.c is directory
$ [ -d / ] && echo file / is directory
file / is directory
$ [ -r asm.c ] && echo file asm.c is readable
file asm.c is readable
$ [ -x asm.c ] && echo file asm.c is executable
$

264.

Программирование (1)
if список команд
then
список команд
else
список команд
fi

265.

Программирование (2)
if test $a –gt $b
then
echo $a
else
echo $b
fi

266.

Программирование (3)
case переменная in
зн.11|зн.12…)
cписок команд1;;
зн.21|зн.22…)
список команд2;;

esac

267.

Программирование (4)
case $a in
1)
who
ls
;;
2)
env
;;
*)
echo Incorrect number
;;
esac

268.

Программирование (5)
while список команд
do
список команд
done
Выполнение цикла до тех пор,
пока условие истинно.

269.

Программирование (6)
while test –n "$1"
do
echo $1
shift
done

270.

Программирование (7)
until список команд
do
список команд
done
Выполнение цикла до тех пор,
пока условие ложно.

271.

Программирование (8)
until test –z "$1"
do
echo $1
shift
done

272.

Программирование (9)
for переменная in список знач.
do
список команд
done
Список значений может
отсутствовать – в этом случае
значения берутся из
позиционных параметров.

273.

Программирование (10)
for a in *
do
echo $a
done

274.

Программирование (11)
for a
do
echo $a
done

275.

Функции (1)
имя () группа команд
function имя группа команд
Выполняется как отдельная
команда со списком
параметров. Внутри функции
параметры доступны как
позиционные параметры.

276.

Функции (2)
Внутри функции можно
определить локальные
переменные при помощи
команды local.
Досрочный выход из функции
можно осуществить при
помощи команды return.
English     Русский Rules