<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блоги: заметки с тегом linux</title>
<link>https://blogengine.ru/blogs/tags/linux/</link>
<description>Автоматически собираемая лента заметок, написанных в блогах на Эгее</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.0 (v4079e)</generator>

<itunes:subtitle>Автоматически собираемая лента заметок, написанных в блогах на Эгее</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit>no</itunes:explicit>

<item>
<title>Замена больших вложений в email на ссылку</title>
<guid isPermaLink="false">135414</guid>
<link>https://kini24.ru/all/zamena-bolshih-vlozheniy-v-email-na-ssylku/</link>
<pubDate>Mon, 31 Mar 2025 11:45:17 +0500</pubDate>
<author>Копытов Иван</author>
<comments>https://kini24.ru/all/zamena-bolshih-vlozheniy-v-email-na-ssylku/</comments>
<description>
&lt;p&gt;&lt;a href="https://kini24.ru/"&gt;Копытов Иван&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Устанавливаем MIMEDefang:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="bash"&gt;apt update
apt install mimedefang -y&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Правим файл&lt;i&gt; /etc/default/mimedefang&lt;/i&gt;:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="ini"&gt;SOCKET=/var/spool/postfix/mimedefang/mimedefang.sock
MD_ALLOW_GROUP_ACCESS=yes&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Добавляем пользователя &lt;i&gt;postfix&lt;/i&gt; в группу &lt;i&gt;defang&lt;/i&gt;:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="bash"&gt;usermod -aG defang postfix&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Так как postfix работает в chroot-окружении, создаем папку для сокета mimedefang:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="bash"&gt;mkdir /var/spool/postfix/mimedefang&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Правим&lt;i&gt; /etc/postfix/main.cf&lt;/i&gt;:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="ini"&gt;milter_default_action = accept
milter_protocol = 6
smtpd_milters = unix:mimedefang/mimedefang.sock
non_smtpd_milters = unix:mimedefang/mimedefang.sock&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Теперь нужно добавить следующее в конец функции &lt;i&gt;filter&lt;/i&gt; в файле&lt;i&gt; /etc/mail/mimedefang-filter&lt;/i&gt;:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="perl"&gt;# Если файл больше указанного размера, он удаляется из письма,
    # его копия остается на диске, а вместо него предоставляется ссылка, по которой его можно скачать.

    # Максимальный размер вложения (например, 10MB)
    my $MAX_ATTACHMENT_SIZE = 10 * 1024 * 1024;
    # Директория для сохранения вложений
    my $ATTACHMENTS_DIR = &amp;quot;/var/mail/attachments&amp;quot;;
    # URL, по которому будут доступны вложения
    my $ATTACHMENTS_URL = &amp;quot;https://mail.kini24.ru/attachments&amp;quot;;

    # Создаем директорию, если её нет
    mkdir $ATTACHMENTS_DIR unless -d $ATTACHMENTS_DIR;

    $size = (stat($entity-&amp;gt;bodyhandle-&amp;gt;path))[7];
    if ($size &amp;gt; $MAX_ATTACHMENT_SIZE) {
        md_graphdefang_log(&amp;quot;The attached file $fname is too big, replaced with a link&amp;quot;);
        return action_replace_with_url($entity,
            &amp;quot;$ATTACHMENTS_DIR&amp;quot;,
            &amp;quot;$ATTACHMENTS_URL&amp;quot;,
            &amp;quot;Размер вложения превысил ограничения сервера, поэтому оно было удалено.\n&amp;quot; .
            &amp;quot;Вы можете скачать его по следующей ссылке:\n\n&amp;quot; .
            &amp;quot;_URL_&amp;quot;);
    }&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;В результате аыполнения функции &lt;i&gt;action_replace_with_url&lt;/i&gt; в конец письма будет вставлен текст и ссылка для скачивания вложения, а сам файл бует сохранен в папку&lt;i&gt; /var/mail/attachments&lt;/i&gt;. Надо, кстати, покопаться и найти как вставлять ссылку в текст самого письма. Но пока что оставим как есть.&lt;/p&gt;
&lt;p&gt;У меня почтовый и веб-сервер находятся на разных виртуальных машинах, поэтому папку&lt;i&gt; /var/mail/attachments&lt;/i&gt; надо сделать общей. На почтовом сервере устанавливаем пакет сервера NFS:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="bash"&gt;apt install nfs-kernel-server -y&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Открываем файл&lt;i&gt; /etc/exports&lt;/i&gt; и вписываем в конец файла что-то вроде такого:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="plaintext"&gt;/var/mail/attachments 192.168.1.0/24(rw,sync,no_subtree_check)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;И выполняем в консоли команду:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="bash"&gt;exportfs -a&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Теперь переходим на веб-сервер и выполняем следующие команды:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="bash"&gt;apt update
apt install nfs-common -y&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Открываем файл&lt;i&gt; /etc/fstab&lt;/i&gt; и дописываем в конец:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="plaintext"&gt;192.168.1.12:/var/mail/attachments /var/www/mail/attachments nfs4 defaults 0 0&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;где 192.168.1.12 — IP-адрес почтового сервера.&lt;br /&gt;
Дальше выполняем команды:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="bash"&gt;mkdir -p /var/www/mail/attachments
chown -R www-data:www-data /var/www/mail/attachments
mount -a&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;И проверяем что папка смонтировалась:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="bash"&gt;ls -l /var/www/mail/attachments&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;После этого все вложения, которые были удалены из писем, должны стать доступны для скачивания.&lt;/p&gt;
</description>
</item>

<item>
<title>Тачскрин на Линуксе</title>
<guid isPermaLink="false">129149</guid>
<link>https://bolknote.ru/all/tachskrin-na-linukse/</link>
<pubDate>Thu, 04 Jul 2024 22:57:28 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/tachskrin-na-linukse/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Два последних дня ковырял по работе планшет фирмы «Дигма» — это китайское го… годное вполне за свои деньги изделие поставляется с ОС «Виндоуз». А наша задача была показать на нём один из отечественных дистрибутивов Линукса.&lt;/p&gt;
&lt;p&gt;Линукс встал довольно легко, но вот проблема — прикосновения к экрану не давали никакого эффекта. Вот этим я героически два дня и боролся.&lt;/p&gt;
&lt;p&gt;До конца не победил — тачскрин хоть и возвращает какое-то координаты, но драйвер явно работает неправильно — при движении пальца по оси абсцисс координаты сначала уменьшаются до нуля, потом палец попадает в какое-то «слепое пятно», где цифра не меняется, потом значение снова растёт.&lt;/p&gt;
&lt;p&gt;Зато узнал немало интересного о том как устроен опрос датчика нажатия на экран в Линуксе. Всё я ещё не переварил, поэтому описывать не буду, но один интересный факт расскажу.&lt;/p&gt;
&lt;p&gt;Представьте, что у вас есть готовый экран, на котором что-то отображается — в неких координатах пользователь видит кнопку, на которую он хочет нажать пальцем (речь о планшете). Сверху мы накладываем полупрозрачную плёнку, которая будет считывать нажатия и закрываем всё корпусом.&lt;/p&gt;
&lt;p&gt;Часть плёнки у нас оказалась под рамкой, так что ноль координат плёнки и экрана не совпадают, кроме того, разрешающая возможность тоже разная. Экран, например, 1366 пикселей шириной, а плёнка даёт 740. Как пересчитываются координаты нажатия на плёнку в экранные, чтобы операционная система поняла куда пользователь нажал?&lt;/p&gt;
&lt;p&gt;Для этого в Линуксе задаётся трансформационная матрица («&lt;a href="https://wiki.archlinux.org/title/Calibrating_Touchscreen"&gt;&lt;i&gt;Coordinate Transformation Matrix&lt;/i&gt;&lt;/a&gt;»), на которую умножаются абсолютные координаты, в которых датчик экрана уловил нажатие. С её помощью можно сдвигать координаты, сжимать их и растягивать, а так же поворачивать на 90°, если датчик стоит так, что у него перепутаны оси — это вполне стандартная математика, которую многие могут помнить по школе.&lt;/p&gt;
&lt;p&gt;Матрица эта, понятное дело, должна быть зашита внутри драйвера. Но когда у тебя Линукс, нельзя надеяться, что для всего оборудования найдётся драйвер.&lt;/p&gt;
&lt;p&gt;Для той «Дигмы», которую мы получили, драйвера нет. В некоторых случаях &lt;a href="https://wiki.archlinux.org/title/Calibrating_Touchscreen"&gt;есть способы&lt;/a&gt;, которые позволяют изготовить его на основе драйвера для «Виндоуза», но матрицу всё равно придётся вычислять самостоятельно.&lt;/p&gt;
&lt;p&gt;Правда в нашем случае она не помогла — компенсировать «слепое пятно» она не в состоянии, для этого нужно чудо или более подходящий драйвер.&lt;/p&gt;
</description>
</item>

<item>
<title>Linux 0.0.1</title>
<guid isPermaLink="false">122411</guid>
<link>https://bolknote.ru/all/linux-0-0-1/</link>
<pubDate>Wed, 16 Aug 2023 20:17:05 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/linux-0-0-1/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Оказывается совсем не сложно запустить первую функциональную версию Линукса под современной машиной, всё уже подготовлено энтузиастами. Надо только скачать &lt;a href="http://www.oldlinux.org/Linux.old/qemu-images/"&gt;образ&lt;/a&gt; и распаковать.&lt;/p&gt;
&lt;p&gt;В архиве всё готово для «Винды», для «Мака» я поставил &lt;i&gt;QEMU&lt;/i&gt; отдельно, для запуска сработала вот такая строчка:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="bash"&gt;qemu-system-i386 -nic none -L pc-bios -hda \
linux-0.11-devel-060625.qcow2 -no-reboot -m 16 -k en-us&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Стартует всё моментально, после запуска образа будет доступно меню выбора источника загрузки, там надо будет нажать &lt;tt&gt;1&lt;/tt&gt;, после чего появится командная строка.&lt;/p&gt;
&lt;p&gt;Удивительно, но несмотря на то, что это версия 0.0.1, очень многое из привычного работает — есть файловая система, компилятор, &lt;tt&gt;bash&lt;/tt&gt;, &lt;tt&gt;grep&lt;/tt&gt; и &lt;tt&gt;awk&lt;/tt&gt;. Правда у команд есть далеко не все ключи и я не обнаружил никакой справки ко внешним командам (для встроенных есть &lt;tt&gt;help&lt;/tt&gt;).&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2023.08.16@2x.jpg" width="1000" height="594" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;i&gt;Linux 0.0.1&lt;/i&gt;, запущенный в &lt;i&gt;QEMU&lt;/i&gt;, а жаба, потому что скриншот — это скучно&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;В &lt;a href="https://habr.com/ru/articles/754322/"&gt;статье&lt;/a&gt;, где я нашёл ссылку для скачивания образа первого Линукса, есть любопытный факт — Линукс когда-то назывался «&lt;i&gt;FREAX&lt;/i&gt;», как оказалось, в исходниках эта строка упоминается. Попытавшись найти её в бинарных файлах, споткнулся об отсутствие команды &lt;tt&gt;find&lt;/tt&gt;, пришлось городить вот такую конструкцию:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="bash"&gt;ls -R / | awk -F: &amp;#039;/:/{dir=$1} ! /:/ &amp;amp;&amp;amp; $1 {print dir&amp;quot;/&amp;quot;$1}&amp;#039; |
grep -v ^/dev | xargs -n1 strings | grep -i freax&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Строчка не нашлась, она и в исходниках-то упоминается только в комментариях.&lt;/p&gt;
&lt;p&gt;Я понимаю, что все эти утилиты писал не автор Линукса, но то, что это всё работает в операционной системе, код которой размером чуть больше восьми с половиной тысяч строк, меня лично восхищает.&lt;/p&gt;
</description>
</item>

<item>
<title>Настройка новой виртуальной машины</title>
<guid isPermaLink="false">119842</guid>
<link>https://stefaniuk.website/all/setup-new-ubuntu-vps/</link>
<pubDate>Sat, 26 Dec 2020 23:54:46 +0500</pubDate>
<author>Bohdan Stefaniuk</author>
<comments>https://stefaniuk.website/all/setup-new-ubuntu-vps/</comments>
<description>
&lt;p&gt;&lt;a href="https://stefaniuk.website/"&gt;Bohdan Stefaniuk&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Время от времени поднимаю виртуальные машины на убунту для своих проектов или экспериментов. Первое что я настраиваю — безопасность. Раньше у меня не было единого чек-листа и приходилось каждый раз гуглить. Поэтому решил сделать такой список и оставить у себя в блоге, чтобы обращаться к нему по мере необходимости.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Чеклист&lt;/b&gt;&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Создать нового пользователя вместо root.&lt;/li&gt;
&lt;li&gt;Настроить доступ по ssh ключам.&lt;/li&gt;
&lt;li&gt;Отключить доступ по паролю для ssh.&lt;/li&gt;
&lt;li&gt;Отключить доступ для root через ssh.&lt;/li&gt;
&lt;li&gt;Заблокировать все порты в ufw, кроме 80, 22 и 443.&lt;/li&gt;
&lt;li&gt;(необязательно) Поменять ssh порт с 22 любой другой&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;b&gt;Terminal&lt;/b&gt;&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;# Создаем нового пользователя и добавляем в группу sudo.
adduser bstefaniuk
usermod -aG sudo bstefaniuk

# Копируем свой публичный ключ для нового пользователя.
ssh-copy-id bstefaniuk@vps-ip

# Отключаем доступ по паролю и root для ssh.
nano /etc/ssh/sshd_config
## Установить значения:
PasswordAuthentication no
PermitRootLogin no
## Перезапустить службу
systemctl restart ssh

# Настройка ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow ssh
ufw allow 80
ufw allow 433
ufw enable
## Проверяем что все ОК
ufw status&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;В будущем хочу написать ansible-playbook скрипт, который будет все настраивать сам.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.webservertalk.com/ubuntu-firewall-how-to-configure-ufw"&gt;Хороший мануал по ufw&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://www.digitalocean.com/community/tools/nginx"&gt;Генератор конфигураций nginx&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://maxkuznetsov.ru/all/deployment-users/"&gt;Deployment: настраиваем пользователей&lt;/a&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Конспект: работа с командной строкой</title>
<guid isPermaLink="false">119844</guid>
<link>https://stefaniuk.website/all/work-with-cli/</link>
<pubDate>Sat, 16 Mar 2019 23:46:52 +0500</pubDate>
<author>Bohdan Stefaniuk</author>
<comments>https://stefaniuk.website/all/work-with-cli/</comments>
<description>
&lt;p&gt;&lt;a href="https://stefaniuk.website/"&gt;Bohdan Stefaniuk&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Данная статья это конспект по пройденному курсу: &lt;a href="https://ru.hexlet.io/courses/cli-basics"&gt;Основы командной строки&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Обозначения пути&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;/ — самый верхний уровень файловой системы&lt;/li&gt;
&lt;li&gt;~ — домашняя директория&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Сайт на котором можно посмотреть что делает та или иная команда. &lt;a href="https://explainshell.com/"&gt; Ссылка&lt;/a&gt;&lt;br /&gt;
Иформация о стандартных директориях *nix систем. &lt;a href="https://ru.wikipedia.org/wiki/FHS"&gt;FHS&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Работа в файловой системе&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;pwd&lt;/b&gt; — отображает путь рабочей (текущей) директории&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ls&lt;/b&gt; — показывает все файлы и директории в текущему или указанному пути&lt;/li&gt;
&lt;li&gt;&lt;b&gt;cd&lt;/b&gt; — служит для перемещения по директориям. Если выполнить без параметров — переместит нас в домашнюю директорию.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;stat&lt;/b&gt; — показывает дополнительную информацию о папке или файле&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Чтение файла&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;сat&lt;/b&gt; — Отображает содержимое файла&lt;/li&gt;
&lt;li&gt;&lt;b&gt;head&lt;/b&gt; — Отображает первые 10 строк файла, можно вывести больше с помощью флага -n 20&lt;/li&gt;
&lt;li&gt;&lt;b&gt;tail&lt;/b&gt; — Отображает последние 10 строк файла, можно вывести больше с помощью флага -n 20&lt;/li&gt;
&lt;li&gt;&lt;b&gt;less&lt;/b&gt; — Представляет из себя пейджер. С его помощью можно перемещайся и искать в файле. Также он может открыть файл любого размера, так как отображает только те строки, которые может поместить в окно консоли и при перемещении по файлу — дочитывать нужную информацию.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Может быть такая ситуация что файл очень интенсивно изменяется, например логи, и нужно постоянно выводить содержимое файла. Для этого у команд head и tail есть флаг -f. Данный файл сразу выводит на экран добавленные строки.&lt;/p&gt;
&lt;h2&gt;Grep&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;Grep&lt;/b&gt; — консольная утилита, которая производит поиск в файле или файлах по заданному шаблону.&lt;br /&gt;
Пример:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;grep services Startup.cs  # выведет по очередно строчки, которые содержат services.&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Иногда нужно посмотреть не только сами строчки содержащие текст, но и текст вокруг.&lt;br /&gt;
Для этого есть несколько дополнительных флагов:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;-B&lt;/b&gt; — количество строк до искомой строки&lt;/li&gt;
&lt;li&gt;&lt;b&gt;-A&lt;/b&gt; — после искомой строки&lt;/li&gt;
&lt;li&gt;&lt;b&gt;-C&lt;/b&gt; — до и после одновременно&lt;/li&gt;
&lt;li&gt;&lt;b&gt;-R&lt;/b&gt; — рекурсивный поиск по директориям и под директориям&lt;/li&gt;
&lt;li&gt;&lt;b&gt;-n&lt;/b&gt; — отобразит номер строки, возле каждого результата поиска&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Примеры:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;grep -R .getUsers() . - найдет все файлы в которых есть строчка .getUsers(), начиная с текущей.
grep -C 10 text file.txt - найдет строку text и отобразит ее и 10 соседних строк с каждой стороны&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;Текстовые редакторы&lt;/h2&gt;
&lt;p&gt;Для редактирования файлов в командной строке используют редакторы Nano, Vim и Emacs. Первые два, обычно, установлены по умолчанию.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nano&lt;/b&gt;&lt;br /&gt;
Самый простой текстовый редактор. Удобно редактировать небольшие файлы.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Vim&lt;/b&gt;&lt;br /&gt;
Данный редактор имеет очень много возможностей и особенностей.&lt;br /&gt;
Работа в Vim состоит из разных режимов.&lt;br /&gt;
Когда только открыли файл, редактор работает в режиме команд. Любое нажатие выполняет какую-то определенную команду.&lt;/p&gt;
&lt;p&gt;В Vim есть четыре основных режима работы:&lt;/p&gt;
&lt;ol start="1"&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;
&lt;p&gt;Для перехода в режим вставки — нажать i.&lt;br /&gt;
Для перехода в режим команд — нажать ESC.&lt;/p&gt;
&lt;p&gt;Как выйти с Vim? :-)&lt;br /&gt;
Для начала нужно перейти в режим команд.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;:q! — Закрывает файл без сохранения изменений&lt;/li&gt;
&lt;li&gt;:wq — Сохраняет и закрывает файл&lt;/li&gt;
&lt;li&gt;:w — Просто сохраняет файл&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Хороший гайд по Vim — &lt;a href="https://guides.hexlet.io/vim/"&gt;https://guides.hexlet.io/vim/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Перенаправление потоков&lt;/h2&gt;
&lt;p&gt;В *nix системах есть такое понятие как потоки. В начале работы программы ОС связывает ее с тремя потоками: STDIN, STDOUT и STDERR.&lt;br /&gt;
Для всех приложений они выглядят как обычные файлы.&lt;br /&gt;
Что же делает каждый из них?&lt;br /&gt;
* &lt;b&gt;STDIN&lt;/b&gt; — отвечает за ввод программы.&lt;br /&gt;
* &lt;b&gt;STDOUT&lt;/b&gt; — отвечает за вывод программы.&lt;br /&gt;
* &lt;b&gt;STDERR&lt;/b&gt; — отвечает за вывод ошибок.&lt;/p&gt;
&lt;p&gt;По умолчанию вывод всех команд отображается на экране. Но с мощью параметра &lt;b&gt;&gt;&lt;/b&gt; можно перенаправить вывод в указанный файл.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;ls -l &amp;gt; output.txt&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;На экране ничего не отобразится, но в текущей директории появится файл output со всем выводом команды ls -l. Данную операцию можно сделать с любой программой, которая что-либо выводит на экран. Но есть одна особенность данного оператора, он перезаписывает все данные в файле, для того чтобы дописать используйте &lt;b&gt;&gt;&gt;&lt;/b&gt;.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;echo Hello_World &amp;gt; output.txt
# Hello_World
echo Hello_World1 &amp;gt; output.txt
# Hello_World1
echo Hello_World2 &amp;gt;&amp;gt; output.txt
# Hello_World1
# Hello_World2&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Также можно перенаправлять в другую сторону поток. Например у нас есть файл и мы ходим посмотреть сколько в нем строк. Для этого существует команда wc. Она принимает на вход текст, но с помощью оператора &lt; мы можем передать в нее содержимое файла.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;wc -l &amp;lt; result.txt
# 2432&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Также можно как читать так и писать в файл:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;wc -l &amp;lt; result.txt &amp;gt; output.txt&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;Пайплайн (Конвейер)&lt;/h2&gt;
&lt;p&gt;Если у программы есть вход и выход, то их можно обьеденить, такое обьединение называется — конвейер.&lt;br /&gt;
С помощью данного подхода можно передавать данные сквозь приложения, как через цепочку функций.&lt;/p&gt;
&lt;p&gt;Например нам нужно найти строку в которой есть несколько слов и нам не важно как они расположены внутри, главное чтобы были на одной строчке.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;grep alias .bashrc | grep color&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Алгоритм такой команды очень прост:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Выбираем строки, которые содержат alias&lt;/li&gt;
&lt;li&gt;Потом в строчках, которые получили на выходе первой команды, ищем слово color&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;| — этот символ называется пайп, он указывает шелу взять STDOUT одного процесса и соединяет его с STDIN другого процесса. &lt;/p&gt;
&lt;p&gt;Также команду выше можно переписать на такую:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;cat .bashrc | grep alias | grep color&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;Манипулирование файловой структурой&lt;/h2&gt;
&lt;p&gt;Возможность модифицировать файловую систему завязана на права. Если у вас нету прав создавать файлы в текущей директории, вы получите ошибку.&lt;/p&gt;
&lt;p&gt;Команды:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;touch filename&lt;/b&gt; — изменяет время последнего доступа к файлу, если его нету — создает&lt;/li&gt;
&lt;li&gt;&lt;b&gt;rm&lt;/b&gt; — удалить файл
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;-r &lt;/b&gt; — удаляет папку&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;-f&lt;/b&gt; — не спрашивает подтверждение пользователя&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;mv&lt;/b&gt; — &lt;i&gt;переименовывает файл&lt;/i&gt;. В *nix системах не существует понятия «переименовать файл». Переименование всегда равносильно перемещению, которое выполняется командой mv.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;cp&lt;/b&gt; — копирует файл.
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;-r &lt;/b&gt;— позволяет скопировать директории&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;mkdir&lt;/b&gt; — создание директории
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;-p&lt;/b&gt; — позволяет создать вложенные директории. &lt;i&gt;mkdir /folder/subfolder&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Переменные окружения&lt;/h2&gt;
&lt;p&gt;Для просмотра переменных окружения используют команду &lt;b&gt;env&lt;/b&gt;.&lt;br /&gt;
Формат вывода очень простой: слева от знака равно имя переменной, справа — значение.&lt;/p&gt;
&lt;p&gt;Основное предназначение переменных окружения — конфигурация системы и программ. Их удобство заключается в универсальности и отвязке от способа появления этих значений в системе.&lt;/p&gt;
&lt;p&gt;Для вывода переменной используется echo, а перед самой переменной ставится знак $.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;echo $HOME&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Существует два способа задавать значение переменной окружения: локальный и глобальный.&lt;br /&gt;
Локальные переменные живут для конкретной программы:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;HOME=/var cd&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Другой способ установки изменяет значение глобально, для всей сессии и выполняется так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;export HOME=/var&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;i&gt;Обратите внимание на то, что изменение происходит в рамках текущей сессии, другими словами, если у вас открыто две вкладки терминала, и в каждой загружен баш, то изменение произойдет только в той вкладке, в которой будет выполнена команда.&lt;/i&gt;&lt;/p&gt;
&lt;h2&gt;История комнад&lt;/h2&gt;
&lt;p&gt;Для просмотра команд можно использовать клавиши вверх и вниз. Но все введенные команды хранятся в файле &lt;b&gt;.bash_history&lt;/b&gt;, который лежит в домашней директории пользователя.&lt;/p&gt;
&lt;p&gt;Посмотреть историю можно и более простым способом, достаточно выполнить команду &lt;b&gt;history&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;Последнее, и самое интересное — реверсивный поиск. Если нажать комбинацию Ctrl + r, то запустится специальный поиск по истории. Он ожидает ввода символов и сразу отображает ближайшую команду, в которой эти символы встречаются. Если найденное соответствие вас не устроило, то повторное нажатие Ctrl + r выберет следующее соответствие из истории.&lt;/p&gt;
&lt;h2&gt;Sudo&lt;/h2&gt;
&lt;p&gt;Ситуаций, в которых необходимо повышать привилегии и выполнять команды от рута (пользователя root), довольно много. С некоторыми мы уже столкнулись, с другими познакомимся в следующих уроках:&lt;/p&gt;
&lt;p&gt;Установка новых программ&lt;br /&gt;
Навигация по чужим директориям&lt;br /&gt;
Изменение прав доступа и владельцев файлов, не принадлежащих текущему пользователю&lt;br /&gt;
Создание, редактирование и удаление файлов в местах, где не хватает прав текущего пользователя&lt;br /&gt;
Запуск программ, требующих повышенные привилегии.&lt;/p&gt;
&lt;p&gt;Основной способ повышать привилегии в современных системах — утилита sudo.&lt;br /&gt;
По умолчанию она пытается повысить права до суперпользователя.&lt;/p&gt;
&lt;h2&gt;Пакетный менеджер&lt;/h2&gt;
&lt;p&gt;Пакетный менеджер служат для установки программ. В каждой операционной системе есть свой пакетный менеджер, но его надо устанавливать отдельно.&lt;/p&gt;
&lt;p&gt;Основной его частью является каталог. В нем содержится список всех приложений, которые можно установить.&lt;/p&gt;
</description>
</item>


</channel>
</rss>