====== Работа в командной строке UNIX ======
* "UNIX в основном простая операционная система, но нужно быть гением, чтобы понять её простоту" (Денис Ритчи)
* "Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий" (Козьма Прутков)
===== Программа курса =====
* [[http://www.specialist.ru/course/yuncom|Linux/FreeBSD. Уровень «На старт». Эффективная работа в командной строке]]
===== Offline материалы к курсу =====
* [[http://val.bmstu.ru/unix/Docs/unix1_materials.zip]]
===== Видео уроки =====
* [[Видео уроки#Работа в системе Linux/FreeBSD]]
===== Модуль 0. Подготовка стенда в классе. =====
* Узнать свой номер стенда
ipconfig /all
route delete 172.16.1.0 -p
* Удалить виртуалки
* Удалить профили putty
* Отключить не используемые адаптеры
* Записать логин пароль и IP (сообщить преподавателю) рабочей станции
* Проверить наличие дистрибутивов и образов
===== Модуль 1. Знакомство с UNIX =====
==== Теория ====
История и стандарты
* [[https://ru.wikipedia.org/wiki/Bell_Labs|Лаборатории Белла]]
* [[https://ru.wikipedia.org/wiki/Space_Travel_(игра)|Space Travel]]
* [[https://ru.wikipedia.org/wiki/UNIX|UNIX]]
* Список команд 1-й редакции UNIX (1971)
''cat, chdir, chmod, cp, ed, find, mail, mkdir, mkfs, mount, mv, rm, rmdir, wc, who.''
* [[https://ru.wikipedia.org/wiki/UNIX_System_V|UNIX System V]]
* [[https://ru.wikipedia.org/wiki/BSD|UNIX BSD]]
* [[https://ru.wikipedia.org/wiki/POSIX|POSIX]]
* [[https://ru.wikipedia.org/wiki/История_Linux|История Linux]]
* [[https://ru.wikipedia.org/wiki/FreeBSD|FreeBSD]]
* [[https://ru.wikipedia.org/wiki/Plan_9|Plan 9]]
* [[Организация системы UNIX]]
* [[https://youtu.be/jAhvVBpx3IM|Видео: Как пользователи использовали UNIX :)]]
Подключение к UNIX
* [[https://ru.wikipedia.org/wiki/Телетайп|Телетайп]]
* [[https://ru.wikipedia.org/wiki/Текстовый_терминал|Текстовый_терминал]]
* [[https://ru.wikipedia.org/wiki/RS-232|Интерфейс RS-232]]
* [[https://ru.wikipedia.org/wiki/Telnet|Telnet]]
* [[https://ru.wikipedia.org/wiki/SSH|Протокол SSH]]
* [[https://ru.wikipedia.org/wiki/X_Window_System|X Window System]]
* [[https://ru.wikipedia.org/wiki/XDM|X Display Manager]]
Работа в командной строке
* [[https://ru.wikipedia.org/wiki/Интерфейс_командной_строки|Интерфейс командной строки]]
* [[https://ru.wikipedia.org/wiki/Bash|Bourne again shell]]
==== Лабораторные работы ====
Входное тестирование - скачать свежий образ netinst под архитектуру amd64 с сайта
* https://www.debian.org/
Подключение к уже установленной и настроенной системе
* [[https://youtu.be/7lE8Y8U4M0g|Видео урок: Принцип работы терминала UNIX]]
* [[https://www.tutorialspoint.com/unix_terminal_online.php|Unix Terminal Online]]
* [[http://www.freeemulator.com/online-terminal-emulator/|ONLINE TERMINAL EMULATOR]]
* getty/login (демонстрирует преподаватель)
* putty, winscp (во 2-м модуле)
* ssh из unix в unix (после развертывания собственной системы)
Принципы работы в системе
* [[https://youtu.be/jAhvVBpx3IM|Видео урок: Как пользователи использовали UNIX :)]]
* [[Структура команд UNIX]]
* [[Документация UNIX]]
==== Вопросы ====
- Какие Windows программы могут быть использованы для подключения к UNIX системе по протоколу ssh?
- Что определяют аргументы команды/утилиты?
- Что определяют ключи/опции команды/утилиты?
- Какая команда используется для чтения UNIX документации?
- Как осуществляется поиск в UNIX документации?
===== Модуль 2. Файлы в UNIX =====
==== Теория ====
* [[https://ru.wikipedia.org/wiki/Файловая_система|Файловая система]]
* [[https://ru.wikipedia.org/wiki/Unix_File_System|Unix File System]]
* [[https://ru.wikipedia.org/wiki/Ext|Linux Extended File System]]
* [[https://ru.wikipedia.org/wiki/Procfs|procfs]]
* [[https://ru.wikipedia.org/wiki/Udev|udev]]
* [[Структура файловой системы]]
==== Лабораторные работы ====
* [[Команды для работы с файловой системой]]
* [[Команды чтения содержимого файлов]]
* [[Текстовые редакторы ed, sed, vi, vim]] ([[https://youtu.be/r8e7F46un7A|Видео урок]])
* [[Текстовый редактор nano]]
* [[Настройка командных интерпретаторов]] (комбинации клавиш, повтор и автоподстановка команд)
* [[Команды фильтры]] (выполнить работу в теме перенаправления ввода вывода)
* [[Регулярные выражения]] ([[https://youtu.be/BhbDsKetNn8|Видео урок]])
* [[Утилиты diff и patch]] ([[https://youtu.be/vqPaHyisBB0|Видео урок]])
* [[Система контроля версий rcs]] ([[https://youtu.be/QyhaKdgg4LE|Видео урок]])
* [[Генератор отчетов awk]] ([[https://youtu.be/4PkkMzB7fIM|Видео урок]])
* [[Команда tar]] (выполнить работу в конце курса)
* Команды scp, wget (в лабораторных работах следующего модуля)
==== Вопросы ====
- Что обозначают ключи «a», «l» в команде ls?
- Какой командой можно создать файл?
- Что означает символы "~", ".", "..", "/" в имени файла?
- Что обозначают ключи "h/H", "v", "r/R" во многих командах?
- Какие команды используются для анализа занятого места на диске/в каталоге?
- Какой командой можно удалить непустой каталог?
- Какие команды могут быть использованы для поиска файлов?
- Какие команды используются для просмотра содержимого файлов?
- Какая программа может быть использована для копирования файлов между UNIX и Windows по протоколу ssh?
- Какой ключ команды tail позволяет "в онлайне" наблюдать процесс появления новых записей в файле?
- Какая последовательность клавиш позволяет выйти из редактора vi без сохранения изменений?
- Какой командой можно найти содержимое в файле по шаблону?
- Какой ключ команды sort позволит отсортировать данные по числовому столбцу?
- Что обозначают символы "^", "$", ".", "|" в регулярных выражениях?
- Что обозначают ключи "c", "t", "x", "z", "f" в команде tar
- Что появится на экране в результате последовательности команд: mkdir dir1; cd dir1/; touch echo ls; *
- Каким образом можно определить тип файла в UNIX?
===== Модуль 3. Процессы в UNIX =====
==== Теория ====
* [[Процессы UNIX]]
==== Лабораторные работы ====
* [[Перенаправление потоков ввода/вывода]]
* [[Переменные окружения#Управление процессами через переменные окружения]]
* [[Настройка командных интерпретаторов]] (управление приглашением ко вводу PS1)
* [[Коды завершения]]
* Развертывание виртуальной машины в VirtualBox
* Лабораторная работа [[Использование Asterisk в офисной телефонии#2.1 Установка системы server]] из курса по Asterisk
* [[Пакет screen]]
* [[Управление ПО в Linux]], [[Сервис Asterisk#Установка]] сервиса Asterisk
* [[Сигналы]], [[Управление сервисами в Linux]], [[Сервис Asterisk#Настройка базового функционала IP PBX]]
# asterisk -x 'sip show users'
# ps ax | grep asterisk
# kill -s HUP НОМЕР_ПРОЦЕССА
# kill -s HUP `cat /var/run/asterisk/asterisk.pid`
* Управление заданиями bg, fg, jobs (демонстрирует преподаватель)
==== Вопросы ====
- Что обозначают ключи "a", "x" в команде ps?
- Что такое STDIN, STDOUT, STDERR и какие у них номера?
- Что обозначают элементы "<", ">", "2>", "&1", "|" в выражениях shell
- Объясните, как работает конструкция :> file1
- Чем отличается команда set от команды env?
- Что влияет на выбор языка интерфейса в *NIX программах?
- Как посмотреть код завершения процесса и какое он должен иметь значение, если не было ошибок?
- Что обозначают элементы "&&", "||", ";", "&" в выражениях shell
- Объясните, что происходит при использовании комбинаций "Ctrl C", "Ctrl D", "Ctrl Z"?
- Как обрабатываются сигналы "HUP", "INT", "TERM", "KILL", "TSTP" процессами?
===== Модуль 4. Система безопасности и права доступа =====
==== Теория ====
* [[https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C|Компьютерная безопасность - Википедия]]
* [[https://ru.wikipedia.org/wiki/%D0%A3%D1%87%D1%91%D1%82%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C|Учётная запись - Википедия]]
* [[Система безопасности UNIX#Управление маской доступа]]
* [[http://help.ubuntu.ru/wiki/%D1%81%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%B0%D0%B2%D0%B0_unix|Права доступа Unix, SUID, SGID, Sticky биты]]
==== Лабораторные работы ====
* [[Система безопасности UNIX]]
=== Управление атрибутами доступа к файлам ===
Задание: исправить владельца файла конфигурации sip.conf
# ps axu | grep asterisk
# ls -l /etc/asterisk/sip.conf
# cp /etc/asterisk/sip.conf .
# ls -l sip.conf
# rm /etc/asterisk/sip.conf
# cp sip.conf /etc/asterisk/
# service asterisk restart
# asterisk -x 'sip show users'
# chown asterisk:asterisk /etc/asterisk/sip.conf
или
# chmod +r /etc/asterisk/sip.conf
# service asterisk restart
# asterisk -x 'sip show users'
==== Вопросы ====
- Что обозначают ключ "u" в команде ps?
- Для чего предназначены команды chmod, chown?
- Что определяет маска 640 или -rw-r-----
для файла?
- Что обозначает бит "x" для файла и каталога
- Что обозначает значение атрибута EUID=0 для процесса?
===== Модуль 5. Программирование на shell =====
==== Теория ====
* [[https://ru.wikipedia.org/wiki/Bourne_shell|Bourne shell из Википедии]]
==== Лабораторные работы ====
* [[https://youtu.be/GxVmukxVUo0|Видео урок]]
* [[Переменные окружения#Присваивание значений переменным окружения в shell]]
* [[Средства программирования shell]]
* [[Сервис Asterisk#Конференц связь]]
* [[Планирование выполнения заданий в Linux#Сервис cron]]
==== Вопросы ====
- Объясните, результаты выражений: a=1;a=a+1;echo $a
a=1;a=$a+1;echo $a
a=1;a='$a+1';echo $a
a=1;a=$(($a+1));echo $a
a=Hello;a=$a World;echo $a
a=Hello;a=$a\ World;echo $a
a=Hello;a='$a World';echo $a
a=Hello;a="$a World";echo $a
a=/bin;a="ls $a | wc -l";echo $a
a=/bin;a='ls $a | wc -l';echo $a
a=/bin;a=`ls $a | wc -l`;echo $a
a=/bin;a=$(ls $a | wc -l);echo $a
- Что определяет комбинация "#!" в начале файла?
- Что содержит значение переменных $0, $1, $!
- Объясните результат выражения: echo '#!/bin/ls' > ex1; chmod +x ex1; ./ex1
- В чем разница и что общего при запуске скрипта следующими способами: ./script.sh
. script.sh
sh script.sh
- Объясните элементы выражения while :;do
- Что обозначают операторы continue, break, exit в sh программах?
- Чем завершаются операторы if, case, do в sh программах?
- Какой оператор поможет запретить прекращение выполнения скрипта комбинацией клавиш "Ctrl C"?
- Какой оператор поможет получить ввод пользователя в sh программе?
- Объясните элементы выражений while [ $i -lt 254 ]
while test $i -lt 254
- Чем оперирует цикл for в sh программах?
- Какой оператор позволяет открывать файлы в sh программах?
- Какой оператор необходим для написания на sh искусственного интеллекта?
===== Модуль 6. Дополнительные лабораторные работы =====
* [[Сервис SSH#Аутентификация с использованием ключей ssh]]
* [[Пакет screen]] ([[https://youtu.be/YXSC7KeIq3E|Видео урок]])