<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xml" href="http://ais2016.github.io/feed.xslt.xml"?><feed xmlns="http://www.w3.org/2005/Atom"><generator uri="http://jekyllrb.com" version="3.3.1">Jekyll</generator><link href="http://ais2016.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="http://ais2016.github.io/" rel="alternate" type="text/html" /><updated>2016-12-02T10:30:11+00:00</updated><id>http://ais2016.github.io//</id><title type="html">АИС-2016</title><subtitle>Курс АИС, 5 семестр</subtitle><entry><title type="html">DNS и почта</title><link href="http://ais2016.github.io/DNS-and-MAIL/" rel="alternate" type="text/html" title="DNS и почта" /><published>2016-12-02T00:00:00+00:00</published><updated>2016-12-02T00:00:00+00:00</updated><id>http://ais2016.github.io/DNS-and-MAIL</id><content type="html" xml:base="http://ais2016.github.io/DNS-and-MAIL/">&lt;h1 id=&quot;section&quot;&gt;Задание&lt;/h1&gt;
&lt;ol&gt;
  &lt;li&gt;Настроить прямую и обратную зону для server&lt;номер_по_журналу&gt;.rtf.&lt;/номер_по_журналу&gt;&lt;/li&gt;
  &lt;li&gt;Настроить search.serverN.rtf как ссылку на google.com&lt;/li&gt;
  &lt;li&gt;Поднять на www.example.rtf отдельный сайт Apache (напр., созданный два занятия назад).&lt;/li&gt;
  &lt;li&gt;В качестве адресов брать адрес, выданный DHCP-сервером.&lt;/li&gt;
  &lt;li&gt;Заставить соседа прописать ваш DNS-сервер себе в систему.&lt;/li&gt;
  &lt;li&gt;Сделать то же самое себе.&lt;/li&gt;
  &lt;li&gt;Убедиться, что у него резолвятся ваши адреса, а у вас - его.&lt;/li&gt;
  &lt;li&gt;Отправить письмо соседу.&lt;/li&gt;
  &lt;li&gt;Убедиться, что дошло.&lt;/li&gt;
&lt;/ol&gt;</content><summary type="html">Задание

  Настроить прямую и обратную зону для server.rtf.
  Настроить search.serverN.rtf как ссылку на google.com
  Поднять на www.example.rtf отдельный сайт Apache (напр., созданный два занятия назад).
  В качестве адресов брать адрес, выданный DHCP-сервером.
  Заставить соседа прописать ваш DNS-сервер себе в систему.
  Сделать то же самое себе.
  Убедиться, что у него резолвятся ваши адреса, а у вас - его.
  Отправить письмо соседу.
  Убедиться, что дошло.</summary></entry><entry><title type="html">Web-сервер</title><link href="http://ais2016.github.io/Httpd/" rel="alternate" type="text/html" title="Web-сервер" /><published>2016-11-18T00:00:00+00:00</published><updated>2016-11-18T00:00:00+00:00</updated><id>http://ais2016.github.io/Httpd</id><content type="html" xml:base="http://ais2016.github.io/Httpd/">&lt;p&gt;&lt;a href=&quot;http://ais2016.github.io/HTTP/&quot;&gt;Основной документ&lt;/a&gt;&lt;/p&gt;

&lt;h1 id=&quot;section&quot;&gt;Практика (контрольная)&lt;/h1&gt;
&lt;p&gt;Игра “Жизнь” на PHP (или не PHP, но всё равно через Apache2):
- Начальное положение задаётся накликиванием мышкой.
- Следующая итерация получается после нажатия кнопки.
- Поле минимум 128x128.
- Расчет следующей итерации не на фронте.
- Возможность как заполнять, так и очищать клетки на любом шаге итерации.
- Запрещено использовать стандартные элементы форм (кнопки, чекбоксы итп) в качестве клеток поля.&lt;/p&gt;

&lt;p&gt;Пример реализации подобной игры  - &lt;a href=&quot;https://gist.github.com/ais2016/1d2c908405bdebba34cad759f513ac82&quot;&gt;“Угадайка”&lt;/a&gt;&lt;/p&gt;</content><summary type="html">Основной документ</summary></entry><entry><title type="html">Firewall</title><link href="http://ais2016.github.io/Firewall/" rel="alternate" type="text/html" title="Firewall" /><published>2016-11-11T00:00:00+00:00</published><updated>2016-11-11T00:00:00+00:00</updated><id>http://ais2016.github.io/Firewall</id><content type="html" xml:base="http://ais2016.github.io/Firewall/">&lt;h1 id=&quot;firewall&quot;&gt;Firewall&lt;/h1&gt;

&lt;h2 id=&quot;section&quot;&gt;Разграничение доступа к сетевым ресурсам.&lt;/h2&gt;

&lt;p&gt;iptables - “таблицы IP”&lt;/p&gt;

&lt;p&gt;Таблицы: Filter (обычный файрвол), NAT (для маршрутизации), 
  Mangle (для остального).&lt;/p&gt;

&lt;p&gt;Таблицы состоят из цепочек:&lt;br /&gt;
Filter = цепочки INPUT + FORWARD + OUTPUT&lt;/p&gt;

&lt;p&gt;INPUT для входящих пакетов&lt;br /&gt;
OUTPUT для исходящих&lt;br /&gt;
FORWARD - для маршрутизируемых&lt;/p&gt;

&lt;p&gt;iptables -A OUTPUT -d 217.69.139.200 -j DROP&lt;br /&gt;
Опции команды:&lt;br /&gt;
-d - адрес назначения&lt;br /&gt;
-s - адрес источника&lt;br /&gt;
-p - протокол&lt;br /&gt;
-i - сетевой интерфейс&lt;br /&gt;
–sport / –dport - порт источника/назначения.&lt;/p&gt;

&lt;p&gt;iptables -A INPUT -s 8.8.8.8 -j DROP&lt;/p&gt;

&lt;h2 id=&quot;nat&quot;&gt;Таблица NAT&lt;/h2&gt;
&lt;p&gt;Цепочки POSTROUTING и PREROUTING.&lt;br /&gt;
PREROUTING - до решения о маршрутизации&lt;br /&gt;
POSTROUTING - после (уже знаем, через какой интерфейс отправим)&lt;/p&gt;

&lt;p&gt;NAT - Network Address Translation - подмена адресов&lt;br /&gt;
Source NAT - подмена адреса источника.&lt;/p&gt;

&lt;p&gt;iptables -t nat -A POSTROUTING -j MASQUERADE&lt;br /&gt;
MASQUERADE - SNAT с автоматическим определением адреса источника
(медленно)&lt;/p&gt;

&lt;p&gt;iptables -t nat -A POSTROUTING -j SNAT –to-source 195.19.1.1&lt;/p&gt;

&lt;p&gt;iptables -t nat -A POSTROUTING -s 10.0.0.0/32 -j SNAT –to-source 195.19.1.1&lt;/p&gt;

&lt;p&gt;DNAT - подмена адреса назначения&lt;/p&gt;

&lt;h2 id=&quot;section-1&quot;&gt;Проброс портов&lt;/h2&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.17
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.17:8080
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.17-19 (балансировка нагрузки)
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;DNAT работает при настроенном SNAT!&lt;/p&gt;</content><summary type="html">Firewall</summary></entry><entry><title type="html">Kernel</title><link href="http://ais2016.github.io/Kernel/" rel="alternate" type="text/html" title="Kernel" /><published>2016-10-28T00:00:00+00:00</published><updated>2016-10-28T00:00:00+00:00</updated><id>http://ais2016.github.io/Kernel</id><content type="html" xml:base="http://ais2016.github.io/Kernel/">&lt;h1 id=&quot;section&quot;&gt;Архивы&lt;/h1&gt;

&lt;ol&gt;
  &lt;li&gt;tar - Tape ARchiver.&lt;br /&gt;
Объединяет несколько файлов в один. Не сжимает.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;archive.tar&lt;br /&gt;
tar xf archive.tar - распаковывает архив в текущую директорию&lt;br /&gt;
tar cf archive.tar &amp;lt;список файлов&amp;gt; - создание архива&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;gzip - сжимает. Но только один файл на архив.&lt;br /&gt;
file.txt -&amp;gt; file.txt.gz (при сжатии)&lt;br /&gt;
file.txt.gz -&amp;gt; file.txt (при распаковке)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;gzip file.txt - сжатие&lt;br /&gt;
gzip -d file.txt.gz - расжимает обратно&lt;/p&gt;

&lt;p&gt;Обычно используют tar + gzip.
Ключ z у tar - работа с gzip-архивами &lt;br /&gt;
tar zcf file.tar.gz /etc - создает tar.gz архив с содержимым /etc &lt;br /&gt;
tar zxf file.tar.gz - распакует&lt;/p&gt;

&lt;p&gt;tar xf file.tar.gz - вероятно, сработает&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;bzip2 - другой архиватор, умеет несколько файлов на архив (но
этим никто не пользуется).
xz - ещё один архиватор.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1 id=&quot;section-1&quot;&gt;Ядро&lt;/h1&gt;
&lt;p&gt;http://kernel.org - тут лежит ядро. Надо скачать stable.&lt;/p&gt;

&lt;p&gt;Ядро + модули. Модули - части ядра, подргужаемые динамически
по мере надобности.&lt;/p&gt;

&lt;p&gt;linux-4.73.23.tar.xz&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;tar xf linux-4.73.23.tar.xz
cd linux-4.73.23
apt-get install build-essential libncurses5-dev
make oldconfig - копирует настройки текущего ядра в 
  новое собираемое  
make menuconfig - команда конфигурации через псевдографический 
  интерфейс. make config, make xconfig - другие версии.  
make bzImage - собрать ядро (можно ещё zImage или Image)  
make modules - собрать модули (это долго)  
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section-2&quot;&gt;Установка&lt;/h2&gt;
&lt;p&gt;make modules_install - скопирует модули в /lib/modules/версия
mkinitramfs -o initrd.img-&lt;версия&gt; &lt;версия&gt; - создаём образ initrd
  с собранными модулями&lt;/версия&gt;&lt;/версия&gt;&lt;/p&gt;

&lt;p&gt;arch/x86/boot/bzImage - наше ядро
initrd.img-&lt;версия&gt; - наш bzImage
.config - наша конфигурация&lt;/версия&gt;&lt;/p&gt;

&lt;p&gt;все эти файлы нужно сложить в /boot&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo cp arch/x86/boot/bzImage /boot/vmlinuz-&amp;lt;версия&amp;gt;
sudo cp initrd.img-&amp;lt;версия&amp;gt; /boot
sudo cp .config /boot/config-&amp;lt;версия&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;sudo update-grub2 - Обновить конфигурацию загрузчика (найдет новое
  ядро и добавит)&lt;/p&gt;

&lt;p&gt;Теперь можно перезагружаться.&lt;/p&gt;</content><summary type="html">Архивы</summary></entry><entry><title type="html">Процессы и запуск системы</title><link href="http://ais2016.github.io/Processes/" rel="alternate" type="text/html" title="Процессы и запуск системы" /><published>2016-10-17T00:00:00+00:00</published><updated>2016-10-17T00:00:00+00:00</updated><id>http://ais2016.github.io/Processes</id><content type="html" xml:base="http://ais2016.github.io/Processes/">&lt;h1 id=&quot;section&quot;&gt;Процессы&lt;/h1&gt;

&lt;p&gt;Процесс - объект ОС, хранящий данные о выполняемой программе
и позволяющий управлять её выполнением.&lt;br /&gt;
Демон - процесс, работающий в фоне.&lt;/p&gt;

&lt;h2 id=&quot;section-1&quot;&gt;Атрибуты процесса&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;PID - уникальный идентификатор процесса (0..65535)&lt;/li&gt;
  &lt;li&gt;PPID - уникальный идентификатор родителя.&lt;br /&gt;
PID 0 - ядро (впрочем, это не процесс)&lt;br /&gt;
PID 1 - процесс, запущенный самым первым. Обычно это init.&lt;/li&gt;
  &lt;li&gt;UID, GID - идентификаторы пользователя, запустившего процесс.&lt;/li&gt;
  &lt;li&gt;EUID, EGID - права, с которыми процесс выполняется.&lt;/li&gt;
  &lt;li&gt;Приоритет (-19..20). Чем ниже, тем приоритетней.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;nice - команда, задающая приоритет для запускаемой программы.&lt;br /&gt;
nice -n +5 find / -name ‘*.txt’&lt;/p&gt;

&lt;p&gt;top - список процессов (интерактивная команда)&lt;/p&gt;

&lt;p&gt;renice +5 &lt;PID&gt;&lt;/PID&gt;&lt;/p&gt;

&lt;p&gt;ps ax - команда для просмотра процессов.&lt;br /&gt;
ps ax | grep bash - можно грепать&lt;/p&gt;

&lt;p&gt;kill &lt;PID&gt; - для убийства процессов  
kill %1 - для убийства фоновых jobs  
kill -9 - посылает сигнал KILL, который убивает гарантированно.&lt;/PID&gt;&lt;/p&gt;

&lt;p&gt;killall mc - убивает процессы по имени&lt;/p&gt;

&lt;h2 id=&quot;section-2&quot;&gt;Запуск команд по расписанию&lt;/h2&gt;
&lt;p&gt;crontab&lt;br /&gt;
/etc/crontab&lt;/p&gt;

&lt;h1 id=&quot;section-3&quot;&gt;Процесс загрузки&lt;/h1&gt;

&lt;ol&gt;
  &lt;li&gt;BIOS (UEFI) копируется в ОЗУ.&lt;/li&gt;
  &lt;li&gt;Запуск BIOS (UEFI).&lt;/li&gt;
  &lt;li&gt;Power On Self Test (POST) - тест железа (памяти).&lt;/li&gt;
  &lt;li&gt;Лезет в настройки в nvram (в просторечии CMOS).&lt;/li&gt;
  &lt;li&gt;Узнает загрузочный диск.&lt;/li&gt;
  &lt;li&gt;Копирует первый сектор диска (mbr - Master Boot Record) в ОЗУ.&lt;/li&gt;
  &lt;li&gt;Запускает MBR (там GRUB - GRand Unified Bootloader).&lt;/li&gt;
  &lt;li&gt;GRUB считывает с диска ядро и initrd (Initial Ram Disk - 
микроскопическая ФС с минимумом утилит и модулей).&lt;/li&gt;
  &lt;li&gt;Запускается ядро, которое самораспаковывается.&lt;/li&gt;
  &lt;li&gt;Ядро монтирует root FS и запускает /sbin/init (systemd).&lt;/li&gt;
  &lt;li&gt;init стартует все сервисы и, в конце, графическую оболочку.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;dmesg - посмотреть лог загрузки ядра.&lt;/p&gt;

&lt;h2 id=&quot;section-4&quot;&gt;Уровни запуска&lt;/h2&gt;
&lt;p&gt;Уровень запуска - состояние, в котором находится ОС. Характеризуется
набором запущенных программ.&lt;br /&gt;
/etc/rc[0-6].d&lt;/p&gt;

&lt;p&gt;0 - выключение компьютера&lt;br /&gt;
1 - однопользовательская система&lt;br /&gt;
2 - многопользовательская система (обычный уровень)&lt;br /&gt;
6 - перезагрузка&lt;/p&gt;

&lt;p&gt;скрипты init, начинающиеся с K убивают программы. S - запускают.
Числа после этих букв нужны для сортировки, т.к. запуск их идет
в алфавитном порядке.&lt;/p&gt;

&lt;p&gt;Все скрипты в rc?.d являются симлинками на /etc/init.d&lt;br /&gt;
Скрипты из init.d принимают аргументы start и stop.&lt;/p&gt;

&lt;p&gt;/etc/init.d/samba start - способ запускать (или останавливать - stop)
системные сервисы.&lt;/p&gt;

&lt;p&gt;Переход между уровнями запуска - telinit.&lt;/p&gt;

&lt;h1 id=&quot;section-5&quot;&gt;Практика.&lt;/h1&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Написать скрипт, следящий за появлением программ с повышенным приоритетом
и выводящий в консоль их названия.&lt;br /&gt;
man ps - как отлавливать приоритеты.&lt;br /&gt;
diff - сравнение текстовых файлов.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Добавить свой скрипт, выводящий Hello, world в /tmp/abc
в уровень запуска 3 и сделать его уровенем запуска по-умолчанию.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;</content><summary type="html">Процессы</summary></entry><entry><title type="html">Скрипты-II</title><link href="http://ais2016.github.io/Scripts-II/" rel="alternate" type="text/html" title="Скрипты-II" /><published>2016-10-10T00:00:00+00:00</published><updated>2016-10-10T00:00:00+00:00</updated><id>http://ais2016.github.io/Scripts-II</id><content type="html" xml:base="http://ais2016.github.io/Scripts-II/">&lt;h1 id=&quot;section&quot;&gt;Скрипты&lt;/h1&gt;

&lt;h2 id=&quot;section-1&quot;&gt;Функции&lt;/h2&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;#!/bin/bash&lt;/span&gt;
func&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$[$1&lt;/span&gt; + &lt;span class=&quot;nv&quot;&gt;$2&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

func 10 100
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;#!/bin/bash&lt;/span&gt;
multiply_by_2&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$[$1&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; 2]
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

multiply_by_2 11
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$?&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Вернуть можно только число 0..255.&lt;/p&gt;

&lt;h2 id=&quot;section-2&quot;&gt;Сигналы и их перехват в скриптах&lt;/h2&gt;
&lt;p&gt;Сигналы - события, которые ядро передает 
программам.&lt;/p&gt;

&lt;p&gt;SIGKILL (9) - шлем для убийства программы&lt;br /&gt;
SIGTERM (15) - “мягкая” просьба самоубиться&lt;br /&gt;
SIGINT (2) - ctrl+C, прерывание с клавиатуры&lt;br /&gt;
SIGHUP (1) - сигнал, обычно используемый
для того, чтобы заставить программу перечитать
свои конфиг. файлы.&lt;/p&gt;

&lt;p&gt;Перехват сигнала:
```
#!/bin/bash&lt;/p&gt;

&lt;p&gt;sig_int_handler()
{
	echo CTRL+C pressed!
}&lt;/p&gt;

&lt;p&gt;trap sig_int_handler 2
while true
do
done
```&lt;/p&gt;

&lt;p&gt;kill - команда для посылки сигналов
kill -9 &lt;PID&gt;
PID - идентификатор процесса, который можно
посмотреть в команде ps или top&lt;/PID&gt;&lt;/p&gt;

&lt;p&gt;CTRL+Z - остановить программу и отправить
её в background&lt;br /&gt;
bg - запуск такой программы в фоновом режиме&lt;br /&gt;
fg - запуск такой программы с захватом
 консоли&lt;br /&gt;
kill %1 - убить такую программу&lt;/p&gt;

&lt;p&gt;Запуск команды в фоновом режиме из консоли:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;find / -name '*.txt' &amp;amp; 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;SIGCONT - сигнал, который шлется при 
возобновлении&lt;br /&gt;
SIGSTOP - при остановке&lt;/p&gt;

&lt;h2 id=&quot;section-3&quot;&gt;Управляющие коды терминала&lt;/h2&gt;

&lt;h3 id=&quot;section-4&quot;&gt;Цвет&lt;/h3&gt;

&lt;p&gt;0x1B - 27 - код начала управляющей 
 последовательности&lt;/p&gt;

&lt;p&gt;echo -e ‘\x1B[36m;’
3x - цвет текста
4x - цвет фона&lt;/p&gt;

&lt;p&gt;Вывод Hello красным цветом&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;echo -e '\x1B[36m'Hello
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Красным по голубому с выключением в конце
&lt;code class=&quot;highlighter-rouge&quot;&gt;
echo -e '\x1B[36;41m'Hello'\x1B[0m'
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Вместо \x1B можно писать \E.&lt;/p&gt;

&lt;p&gt;Команда изменения позиции курсора H:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;echo -e '\E[0;0H'123
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;(вывод 123 в левый верхний угол (0,0))&lt;/p&gt;

&lt;p&gt;clear - команда для очистки экрана.&lt;/p&gt;

&lt;h2 id=&quot;section-5&quot;&gt;Управление от курсора&lt;/h2&gt;
&lt;p&gt;Пример опроса кнопок вверх-вниз:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;#!/bin/bash&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;read&lt;/span&gt; -s -n1 code
&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$code&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$'&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\x&lt;/span&gt;1B&lt;span class=&quot;s1&quot;&gt;' ]
then
  read -s -n2 cursor
  
  case &quot;$cursor&quot; in
    &quot;[A&quot; )
      echo Cursor up
    ;;
    
    &quot;[B&quot; )
      echo Cursor down
    ;;
  esac
fi
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h1 id=&quot;section-6&quot;&gt;Практика&lt;/h1&gt;

&lt;ol&gt;
  &lt;li&gt;Рекурсивный подсчет факториала&lt;/li&gt;
  &lt;li&gt;Рекурсивный подсчет факториала с 
  возможностью получения результата 
  более 255.&lt;/li&gt;
  &lt;li&gt;Крестики-нолики с управлением от курсора
для двух игроков.&lt;br /&gt;
Рисуется поле, опрашивается клавиатура,
ставится соответствующий ходу символ и
проверяется, кто выиграл.&lt;/li&gt;
&lt;/ol&gt;</content><summary type="html">Скрипты</summary></entry><entry><title type="html">Скрипты</title><link href="http://ais2016.github.io/Scripts/" rel="alternate" type="text/html" title="Скрипты" /><published>2016-10-03T00:00:00+00:00</published><updated>2016-10-03T00:00:00+00:00</updated><id>http://ais2016.github.io/Scripts</id><content type="html" xml:base="http://ais2016.github.io/Scripts/">&lt;h1 id=&quot;section&quot;&gt;Скрипты&lt;/h1&gt;

&lt;p&gt;Скрипт - текстовый файл, у которого есть права на
исполнение.&lt;/p&gt;

&lt;p&gt;Первая строка:
#!/bin/bash - указание, каким интерпретатором выполнять&lt;/p&gt;

&lt;p&gt;#!/usr/bin/python&lt;/p&gt;

&lt;p&gt;Создаём будущий скрипт и назначаем ему права&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;touch file.sh
chmod a+x file.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Простейший пример:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;#!/bin/bash&lt;/span&gt;

ls -a
cat /etc/passwd
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;./file.sh - запустить (обязательно с полным или 
относительным путём)&lt;/p&gt;

&lt;h2 id=&quot;section-1&quot;&gt;Переменные&lt;/h2&gt;
&lt;p&gt;### Встроенные
$0..$9 - аргументы командной строки&lt;br /&gt;
$0 - имя самого скрипта&lt;/p&gt;

&lt;p&gt;Если количества не хватает, то можно использовать
shift n:&lt;br /&gt;
$n становится $1,&lt;br /&gt;
$(n+1) становится $2 etc&lt;/p&gt;

&lt;p&gt;$* - полная командная строка&lt;br /&gt;
$# - количество аргументов командной строки&lt;/p&gt;

&lt;p&gt;$? - результат выполнения последней команды (аналог %errorlevel% в Windows)
Если не 0, то считается ошибочным.&lt;br /&gt;
Корректно завершившаяся программа возвращает 0.&lt;/p&gt;

&lt;h3 id=&quot;section-2&quot;&gt;Переменные пользователя&lt;/h3&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;abc=1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;ПРИЧЁМ БЕЗ ПРОБЕЛОВ!!!!!1111&lt;/p&gt;

&lt;p&gt;Объявление переменных всегда без знака $, обращение
к ним всегда с $&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;a=1
echo $a $$
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Получение значений от пользователя:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;read a
echo $a
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section-3&quot;&gt;Арифметические операции&lt;/h2&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;a=1
b=2
echo $((a+b))
echo $[a+b]
c=$[a+b]
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section-4&quot;&gt;Условия&lt;/h2&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;if &amp;lt;команда&amp;gt;
then
  echo True
else
  echo False
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;if смотрит на код возврата&lt;br /&gt;
если 0, то then, если нет, то else&lt;/p&gt;

&lt;p&gt;test - команда, проверяющая истинность логических выражений&lt;/p&gt;

&lt;p&gt;if test 1 == 1
then
…
fi&lt;/p&gt;

&lt;p&gt;[ - команда, почти аналогичная test, но более
красиво выглядящая&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;if [ 1 == 2 ]
then
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;ДО И ПОСЛЕ [ НУЖНЫ ПРОБЕЛЫ&lt;/p&gt;

&lt;h3 id=&quot;section-5&quot;&gt;Логические операторы для строк&lt;/h3&gt;
&lt;p&gt;== - равенство&lt;br /&gt;
!= - неравенство&lt;br /&gt;
&amp;lt; - сравнение ASCII-кодов &lt;br /&gt;
&amp;gt; - –/–/–/–/–/–/–/&lt;/p&gt;

&lt;p&gt;if [ “$a” == “hello” ] …&lt;/p&gt;

&lt;p&gt;-z - проверка, что строка пустая
-n - проверка, что строка не пустая&lt;/p&gt;

&lt;p&gt;if [ -z “$a” ] - true если $a - пустая строка&lt;/p&gt;

&lt;h3 id=&quot;section-6&quot;&gt;Логические операторы для чисел&lt;/h3&gt;
&lt;p&gt;-eq - равно
-ne - не равно
-lt - &amp;lt;
-gt - &amp;gt;
-le -ge - &amp;lt;= и &amp;gt;=&lt;/p&gt;

&lt;p&gt;if [ $a -eq $b ]
then
  echo a равно b
fi&lt;/p&gt;

&lt;h3 id=&quot;section-7&quot;&gt;Операторы для файлов&lt;/h3&gt;
&lt;p&gt;-e - файл существует
-f - обычный файл
-d - директория
-r / -w / -x - проверка прав на чтение / запись / выполнение&lt;/p&gt;

&lt;p&gt;if [ -f /etc/passwd ] - проверка, что /etc/passwd существует и
является файлом&lt;/p&gt;

&lt;h2 id=&quot;section-8&quot;&gt;Циклы&lt;/h2&gt;
&lt;p&gt;### while 
&lt;code class=&quot;highlighter-rouge&quot;&gt;
while &amp;lt;команда&amp;gt; - синтаксис как у if
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Ждем непустую строку от пользователя:
&lt;code class=&quot;highlighter-rouge&quot;&gt;
while [ -z &quot;$a&quot; ]
do
  read a
done
&lt;/code&gt;&lt;/p&gt;

&lt;h3 id=&quot;for&quot;&gt;for&lt;/h3&gt;
&lt;p&gt;for обходит списки&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;for i in a b c
do
  echo $i
done
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;for i in `seq 1 100`
do
  
done
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;команда&lt;/code&gt; - выполняет команду и подставляет в это место
её текстовый вывод.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;for (( i=0;i&amp;lt;10;i++ ))
do
  echo $i
done
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section-9&quot;&gt;Логические операции&lt;/h2&gt;
&lt;p&gt;&amp;amp;&amp;amp; - логическое И
|| - логическое ИЛИ&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ls &amp;amp;&amp;amp; echo 123
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;если код возврата ls - 0 (успех), то выполняется echo
иначе - не выполняется&lt;/p&gt;

&lt;p&gt;ls || echo 123 || cat /etc/passwd - выполняет команды,
 пока одна из них не завершится успешно&lt;/p&gt;

&lt;p&gt;Логической И двух сравнений:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;if [ 1 == 1] &amp;amp;&amp;amp; [ 2 == 3 ]
then
..
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Одной квадратной скобкой (быстрее):&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;if [ 1 == 1 -a 2 == 3 ]
then
...
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;-a - И&lt;br /&gt;
-o - ИЛИ&lt;/p&gt;

&lt;p&gt;Практика.&lt;br /&gt;
Игра угадайка.&lt;br /&gt;
Компьютер загадывает число от 0 до 100,
 пользователь угадывает&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;gt; Guess?
&amp;lt; 10
&amp;gt; Моё больше
&amp;lt; 100
&amp;gt; Моё меньше
&amp;lt; 70
&amp;gt; Угадал!
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;$RANDOM - случайное число&lt;/p&gt;</content><summary type="html">Скрипты</summary></entry><entry><title type="html">Работа с текстом</title><link href="http://ais2016.github.io/Text-operations/" rel="alternate" type="text/html" title="Работа с текстом" /><published>2016-09-19T00:00:00+00:00</published><updated>2016-09-19T00:00:00+00:00</updated><id>http://ais2016.github.io/Text-operations</id><content type="html" xml:base="http://ais2016.github.io/Text-operations/">&lt;h1 id=&quot;section&quot;&gt;Работа с текстом&lt;/h1&gt;

&lt;h2 id=&quot;section-1&quot;&gt;Простые команды&lt;/h2&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sort - сортировка строк из STDIN по алфавиту
sort -r - в обратном порядке
sort -n - числовая сортировка
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;tr - транслитерация (замена одних букв на другие)
tr ABC abc
cat /etc/passwd | tr [:lower:] [:upper:]  #  (заменить строчные на заглавные)
tr -d &quot;abcde&quot;
tr abcdefg Z
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wc - word count - считает количество слов
wc -l - количество строк
wc -c - количество символов
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;uniq - удаляет дубликаты строк
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;cut - выделяет (оставляет) отдельные поля из текста&lt;/p&gt;

&lt;p&gt;head - вывод нескольких строк с начала&lt;br /&gt;
head -n10 - вывести 10 строк&lt;/p&gt;

&lt;p&gt;tail - выводит N строк с конца&lt;br /&gt;
tail -n10 - последние 10 строк&lt;br /&gt;
tail -n+2 - вывести текст, начиная со второй строки&lt;/p&gt;

&lt;h2 id=&quot;section-2&quot;&gt;Команды, работающие с регулярными выражениями&lt;/h2&gt;

&lt;p&gt;grep - находит строки, содержащие текст&lt;br /&gt;
&lt;code class=&quot;highlighter-rouge&quot;&gt;
cat /etc/passwd | grep ftp  
&lt;/code&gt;
grep -o - оставляет в выводе только то, что нашел
grep -E - использовать расширенный синтаксис
  регулярных выражений&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cat /etc/passwd | grep -E '.*:.*:.*:[0-9]{3}:'
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;оставить только строки, содержащие трехзначный
 идентификатор группы&lt;/p&gt;

&lt;p&gt;sed - Stream EDitor&lt;br /&gt;
sed ‘s/что/на что/’&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cat /etc/passwd | sed 's/\([^:]*\):/Hello, \1:/'
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;заменяем имя пользователя на Hello, имя пользователя&lt;/p&gt;

&lt;p&gt;sed ‘y/ABC/abc/’ - Транслитерация (аналог tr)&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;echo 'Привет, мир' | sed 'y/ри/аа/'
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;корректно обрабатывает кириллицу&lt;/p&gt;

&lt;p&gt;awk - язык описания модификаций текста&lt;br /&gt;
echo “Hello world ha ha ha” | awk ‘{print $2;}’&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/выражение/ { действие }
BEGIN { действие }
END { действие }
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;cat /etc/passwd | awk ‘BEGIN {a=0} {a=a+1} END {print a}’&lt;br /&gt;
  (считаем количество строк)&lt;/p&gt;

&lt;p&gt;Пример операций с полями&lt;br /&gt;
&lt;code class=&quot;highlighter-rouge&quot;&gt;
echo 1 2 3 4 5 | awk 'BEGIN {a=0} 
                            {a=a + $2 + $3} 
                      END   {print a}'
&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;section-3&quot;&gt;Практика&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;Посчитать суммарный размер файлов в директории (через awk)&lt;/li&gt;
  &lt;li&gt;Посчитать словарный запас Шекспира https://www.gutenberg.org/cache/epub/100/pg100.txt&lt;/li&gt;
&lt;/ol&gt;</content><summary type="html">Работа с текстом</summary></entry><entry><title type="html">Работа в командной строке</title><link href="http://ais2016.github.io/Command-line/" rel="alternate" type="text/html" title="Работа в командной строке" /><published>2016-09-12T00:00:00+00:00</published><updated>2016-09-12T00:00:00+00:00</updated><id>http://ais2016.github.io/Command-line</id><content type="html" xml:base="http://ais2016.github.io/Command-line/">&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt-get install build-essential linux-headers
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h1 id=&quot;section&quot;&gt;Работа с пакетами&lt;/h1&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;apt-cache search &amp;lt;что за пакет хотим найти&amp;gt; - поиск
apt-get install - установка пакета
dpkg -i &amp;lt;file.deb&amp;gt; - установка скаченного откуда-нибудь пакета
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h1 id=&quot;section-1&quot;&gt;Справочная информация&lt;/h1&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Ключ -h / --help
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Ключи: короткие и длинные&lt;br /&gt;
Короткие - “-“(минус) + буква&lt;br /&gt;
Длинные “–” + слова, разделенные минусом
&lt;code class=&quot;highlighter-rouge&quot;&gt;
--help
--help-about-something
&lt;/code&gt;
&lt;code class=&quot;highlighter-rouge&quot;&gt;
ls --help 
&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;man ls - полная справка о команде
apropos &amp;lt;что-то&amp;gt; - поиск по ману
man man - справка по системе помощи
/ - поиск в листалке man, q - выход из листалки
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h1 id=&quot;section-2&quot;&gt;Поиск файлов&lt;/h1&gt;

&lt;p&gt;which - ищет по PATH&lt;br /&gt;
locate - ищет по периодически обновляемому индексу&lt;br /&gt;
find - поиск&lt;br /&gt;
find &lt;где&gt; &lt;что&gt; &lt;что сделать=&quot;&quot; с=&quot;&quot; найденным=&quot;&quot;&gt;  
где - путь (/etc)  
что - -name sources.list - поиск по имени  
что сделать с найденным - можно запустить найденный файл или удалить&lt;/что&gt;&lt;/что&gt;&lt;/где&gt;&lt;/p&gt;

&lt;h1 id=&quot;section-3&quot;&gt;Перенаправление ввода-вывода&lt;/h1&gt;
&lt;p&gt;У нас есть три потока&lt;br /&gt;
STDIN = 0, STDOUT = 1, STDERR = 2&lt;/p&gt;

&lt;p&gt;ls &amp;gt; file.txt - перезаписывает файл&lt;br /&gt;
ls » file.txt - дописывает в файл&lt;br /&gt;
fdisk &amp;lt; commands.txt - перенаправить ввод из файла в программу&lt;br /&gt;
| - pipe - перенаправление вывода одной команды во вход другой&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;apt-cache search game 3d | sort
sort - сортирует всё, что приходит ей на стандартный вход
apt-cache search game 3d | sort | less - можно присоединять пайпы один к другому
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section-4&quot;&gt;Перенаправление потока ошибок&lt;/h2&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;find / -name sources.list 2&amp;gt;/dev/null
find / -name sources.list &amp;gt;found.txt 2&amp;gt;&amp;amp;1 - перенаправляем поток ошибок туда же, куда 1 (STDOUT)
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Практическое задание:&lt;br /&gt;
1) Найти все файлы, измененные в последние 10 минут&lt;br /&gt;
2) –//– + вывести на экран их содержимое&lt;/p&gt;</content><summary type="html">sudo apt-get install build-essential linux-headers</summary></entry><entry><title type="html">Приложения HTML</title><link href="http://ais2016.github.io/HTML-Application/" rel="alternate" type="text/html" title="Приложения HTML" /><published>2016-05-25T00:00:00+00:00</published><updated>2016-05-25T00:00:00+00:00</updated><id>http://ais2016.github.io/HTML-Application</id><content type="html" xml:base="http://ais2016.github.io/HTML-Application/">&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;HTA:&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;APPLICATION&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;HTA&quot;&lt;/span&gt; 
			&lt;span class=&quot;na&quot;&gt;applicationName=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;TEST HTA&quot;&lt;/span&gt;
			&lt;span class=&quot;na&quot;&gt;border=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;thin&quot;&lt;/span&gt;
			&lt;span class=&quot;na&quot;&gt;borderStyle=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;normal&quot;&lt;/span&gt;
			&lt;span class=&quot;na&quot;&gt;caption=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;yes&quot;&lt;/span&gt;
			&lt;span class=&quot;na&quot;&gt;icon=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;С:/temp/favicon. ico&quot;&lt;/span&gt;
			&lt;span class=&quot;na&quot;&gt;maximizeButton=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;yes&quot;&lt;/span&gt;
			&lt;span class=&quot;na&quot;&gt;minimizeButton=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;yes&quot;&lt;/span&gt;
			&lt;span class=&quot;na&quot;&gt;showInTaskbar=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;no&quot;&lt;/span&gt;
			&lt;span class=&quot;na&quot;&gt;windowState=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;normal&quot;&lt;/span&gt;
			&lt;span class=&quot;na&quot;&gt;innerBorder=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;yes&quot;&lt;/span&gt;
			&lt;span class=&quot;na&quot;&gt;navigable=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;yes&quot;&lt;/span&gt;
			&lt;span class=&quot;na&quot;&gt;scroll=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;auto&quot;&lt;/span&gt;
			&lt;span class=&quot;na&quot;&gt;scrollFlat=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;yes&quot;&lt;/span&gt;
			&lt;span class=&quot;na&quot;&gt;singleInstance=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;yes&quot;&lt;/span&gt;
			&lt;span class=&quot;na&quot;&gt;sysMenu=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;no&quot;&lt;/span&gt;
			&lt;span class=&quot;na&quot;&gt;contextMenu=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;yes&quot;&lt;/span&gt;
			&lt;span class=&quot;na&quot;&gt;selection=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;yes&quot;&lt;/span&gt; 
			&lt;span class=&quot;na&quot;&gt;version=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;1.0&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;th&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;td&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
				&lt;span class=&quot;nl&quot;&gt;padding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;10px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;10px&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
			&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
		
			&lt;span class=&quot;nt&quot;&gt;table&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;td&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;tr&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;th&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; 
				&lt;span class=&quot;nl&quot;&gt;border&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;solid&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1px&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;black&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; 
				&lt;span class=&quot;nl&quot;&gt;border-collapse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;collapse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
			&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
			&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
				&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;table&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;processTable&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
				&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
				&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
					&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;child&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;createElement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;tr&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
					&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;td1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;createElement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;td&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
					&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;td2&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;createElement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;td&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
					&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;td3&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;createElement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;td&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
					&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;btn&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;createElement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;input&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
					
					&lt;span class=&quot;nx&quot;&gt;td1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;innerHTML&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;abc&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
					&lt;span class=&quot;nx&quot;&gt;td2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;innerHTML&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;cde&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
					&lt;span class=&quot;nx&quot;&gt;td2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;innerHTML&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;def&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
					
					&lt;span class=&quot;nx&quot;&gt;btn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;button&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
					&lt;span class=&quot;nx&quot;&gt;btn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Kill!&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
					&lt;span class=&quot;nx&quot;&gt;btn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onclick&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;alert&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Hello, world&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
					
					&lt;span class=&quot;nx&quot;&gt;child&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;appendChild&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;td1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
					&lt;span class=&quot;nx&quot;&gt;child&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;appendChild&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;td2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
					&lt;span class=&quot;nx&quot;&gt;child&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;appendChild&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;td3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
					&lt;span class=&quot;nx&quot;&gt;td3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;appendChild&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;btn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
					&lt;span class=&quot;nx&quot;&gt;table&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;appendChild&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;child&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
				&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
			&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;table&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;cellspacing=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;0&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;cellpadding=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;0&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;thead&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
					&lt;span class=&quot;nt&quot;&gt;&amp;lt;th&amp;gt;&lt;/span&gt;PID&lt;span class=&quot;nt&quot;&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
					&lt;span class=&quot;nt&quot;&gt;&amp;lt;th&amp;gt;&lt;/span&gt;Title&lt;span class=&quot;nt&quot;&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
					&lt;span class=&quot;nt&quot;&gt;&amp;lt;th&amp;gt;&lt;/span&gt;&lt;span class=&quot;ni&quot;&gt;&amp;amp;nbsp;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
				&lt;span class=&quot;nt&quot;&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;/thead&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;tbody&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;processTable&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;/tbody&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;/table&amp;gt;&lt;/span&gt;

	&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Практика.&lt;br /&gt;
1. Просмотрщик списка запущенных процессов с возможностью их закрытия (HTA, WMI)&lt;/p&gt;</content><summary type="html">```html

	
		
		
	
	
		
		
			
				
					PID
					Title
					&amp;nbsp;</summary></entry></feed>
