<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Артем</title><author><name>Артем</name></author><id>https://teletype.in/atom/dark2k</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/dark2k?offset=0"></link><link rel="alternate" type="text/html" href="https://blog.provision12.ru/?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=dark2k"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/dark2k?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-09T07:15:47.862Z</updated><entry><id>dark2k:I5s_8D796bq</id><link rel="alternate" type="text/html" href="https://blog.provision12.ru/I5s_8D796bq?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=dark2k"></link><title>Передача файлов с scp и rsync: настройка и примеры</title><published>2026-02-26T12:34:43.915Z</published><updated>2026-02-26T12:39:26.258Z</updated><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/ae/e1/aee1cc52-de4b-4c87-8708-9bdb4d9d553c.png&quot;&gt;Передача файлов между серверами — задача настолько банальная, что о ней обычно не задумываешься… пока не столкнёшься с реальным проектом. Вот есть у тебя VPS, выделенный сервер или даже целый облачный кластер — и внезапно нужно быстро и надёжно перекинуть гигов десять логов, дампов или каких-нибудь картинок. FTP? Не смеши мои скрипты. Почта? Ну-ну. Вот тут и приходят на помощь старые добрые scp и rsync — инструменты, без которых не обходится ни один уважающий себя админ, DevOps или просто человек, который не любит таскать флешки.</summary><content type="html">
  &lt;figure id=&quot;JwVO&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ae/e1/aee1cc52-de4b-4c87-8708-9bdb4d9d553c.png&quot; width=&quot;480&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ytI6&quot;&gt;Передача файлов между серверами — задача настолько банальная, что о ней обычно не задумываешься… пока не столкнёшься с реальным проектом. Вот есть у тебя VPS, выделенный сервер или даже целый облачный кластер — и внезапно нужно быстро и надёжно перекинуть гигов десять логов, дампов или каких-нибудь картинок. FTP? Не смеши мои скрипты. Почта? Ну-ну. Вот тут и приходят на помощь старые добрые &lt;strong&gt;scp&lt;/strong&gt; и &lt;strong&gt;rsync&lt;/strong&gt; — инструменты, без которых не обходится ни один уважающий себя админ, DevOps или просто человек, который не любит таскать флешки.&lt;/p&gt;
  &lt;h2 id=&quot;mOvl&quot;&gt;О чём статья и зачем всё это нужно&lt;/h2&gt;
  &lt;p id=&quot;97hu&quot;&gt;Этот пост — не из серии «вот вам команды, копируйте и радуйтесь». Я расскажу, как работают &lt;strong&gt;scp&lt;/strong&gt; и &lt;strong&gt;rsync&lt;/strong&gt;, чем они реально отличаются, как быстро их настроить, какие грабли встречаются на пути и как их обойти. Будет много практики, примеры для реальных сценариев, советы по автоматизации и даже немного про нестандартные способы применения. Всё — чтобы вы могли не просто копировать файлы, а сделать это максимально быстро, безопасно и удобно, даже если у вас 20 серверов в разных дата-центрах.&lt;/p&gt;
  &lt;h2 id=&quot;I0vA&quot;&gt;Почему это важно: боль и значимость темы&lt;/h2&gt;
  &lt;ul id=&quot;01ns&quot;&gt;
    &lt;li id=&quot;rudo&quot;&gt;Вам надо мигрировать сайт или сервис — и нужно перекинуть всё, что не лежит в git.&lt;/li&gt;
    &lt;li id=&quot;Bw16&quot;&gt;Вы делаете бэкапы и хотите, чтобы они точно доехали до удалённого хранилища, а не потерялись по пути.&lt;/li&gt;
    &lt;li id=&quot;bXLu&quot;&gt;Нужно автоматизировать деплой, чтобы скрипт сам раскидывал файлы по разным серверам без лишних движений.&lt;/li&gt;
    &lt;li id=&quot;fH5q&quot;&gt;Вы хотите быть уверены, что никто не перехватит ваши данные в пути.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;loX2&quot;&gt;Всё это — про &lt;strong&gt;scp&lt;/strong&gt; и &lt;strong&gt;rsync&lt;/strong&gt;. Но если не знать нюансов, можно нарваться на кучу проблем: от медленной передачи до случайной потери данных или дыр в безопасности.&lt;/p&gt;
  &lt;h2 id=&quot;LOtN&quot;&gt;Как это работает: алгоритмы, структура, суть&lt;/h2&gt;
  &lt;h3 id=&quot;tprF&quot;&gt;scp — Secure Copy Protocol&lt;/h3&gt;
  &lt;p id=&quot;JDMF&quot;&gt;&lt;strong&gt;scp&lt;/strong&gt; — это такой «копипаст» по SSH. По сути, это обёртка над &lt;strong&gt;ssh&lt;/strong&gt;, которая просто берёт файл (или папку), соединяется с удалённой машиной и копирует туда (или обратно) через зашифрованный канал. Всё просто: никаких сложных протоколов, только SSH-ключи или пароли.&lt;/p&gt;
  &lt;ul id=&quot;Fo3G&quot;&gt;
    &lt;li id=&quot;uHED&quot;&gt;Работает практически на всех UNIX-подобных системах.&lt;/li&gt;
    &lt;li id=&quot;dGry&quot;&gt;Передача идёт по одному потоку, без сжатия (по умолчанию).&lt;/li&gt;
    &lt;li id=&quot;FitD&quot;&gt;Нет синхронизации — только «взял и скопировал».&lt;/li&gt;
    &lt;li id=&quot;oVj0&quot;&gt;Достаточно быстрый, но не оптимальный для больших объёмов или тысячи мелких файлов.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;00d1&quot;&gt;rsync — Remote Sync&lt;/h3&gt;
  &lt;p id=&quot;R8rf&quot;&gt;&lt;strong&gt;rsync&lt;/strong&gt; — это уже не просто копирование, а умная синхронизация. Он сравнивает файлы на исходной и целевой машине, копирует только изменённые части (или новые файлы), может сжимать данные на лету и даже работать по SSH (или по своему протоколу через rsyncd).&lt;/p&gt;
  &lt;ul id=&quot;VhXW&quot;&gt;
    &lt;li id=&quot;VKmO&quot;&gt;Очень экономит трафик — особенно если файлы почти не меняются.&lt;/li&gt;
    &lt;li id=&quot;IoWF&quot;&gt;Может работать как копия, так и синхронизация (двусторонняя или односторонняя).&lt;/li&gt;
    &lt;li id=&quot;PrQy&quot;&gt;Поддерживает инкрементальные копии, исключения, фильтры, сжатие, удаление лишнего на целевой стороне.&lt;/li&gt;
    &lt;li id=&quot;rYrt&quot;&gt;Идеально для бэкапов, деплоя, миграций.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;qkqs&quot;&gt;Как быстро и просто всё настроить: практика и примеры&lt;/h2&gt;
  &lt;h3 id=&quot;vtlp&quot;&gt;Базовая настройка scp&lt;/h3&gt;
  &lt;p id=&quot;13Fh&quot;&gt;Всё, что вам нужно — это рабочий SSH-доступ к серверу (по ключу или паролю). &lt;/p&gt;
  &lt;p id=&quot;0MCT&quot;&gt;Копировать файл на удалённый сервер:&lt;/p&gt;
  &lt;p id=&quot;ikYk&quot;&gt;&lt;code&gt;scp /home/user/file.txt user@remote_host:/home/user/&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;pzbY&quot;&gt;Копировать папку (рекурсивно):&lt;/p&gt;
  &lt;p id=&quot;bp7e&quot;&gt;&lt;code&gt;scp -r /home/user/folder user@remote_host:/home/user/&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;UZAX&quot;&gt;Скачать файл с удалённого сервера:&lt;/p&gt;
  &lt;p id=&quot;jtLZ&quot;&gt;&lt;code&gt;scp user@remote_host:/home/user/file.txt /home/user/&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;WhXj&quot;&gt;Копировать между двумя удалёнными серверами (через вашу машину):&lt;/p&gt;
  &lt;p id=&quot;bi8M&quot;&gt;&lt;code&gt;scp user1@host1:/path/file.txt user2@host2:/path/&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;SLFU&quot;&gt;Всё просто: указываете источник, цель и — если надо — порт (&lt;code&gt;-P&lt;/code&gt;), если SSH не на стандартном 22-м.&lt;/p&gt;
  &lt;h3 id=&quot;YVJp&quot;&gt;Базовая настройка rsync&lt;/h3&gt;
  &lt;p id=&quot;vieb&quot;&gt;&lt;strong&gt;rsync&lt;/strong&gt; обычно уже стоит в большинстве Linux-дистрибутивов. Если нет — ставим через &lt;code&gt;apt install rsync&lt;/code&gt; или &lt;code&gt;yum install rsync&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;LKqS&quot;&gt;Синхронизировать локальную папку с удалённой по SSH:&lt;/p&gt;
  &lt;p id=&quot;i9i8&quot;&gt;&lt;code&gt;rsync -avz /home/user/folder/ user@remote_host:/home/user/folder/&lt;/code&gt;&lt;/p&gt;
  &lt;ul id=&quot;KDw2&quot;&gt;
    &lt;li id=&quot;Ypr4&quot;&gt;&lt;strong&gt;-a&lt;/strong&gt; — архивный режим (сохраняет права, симлинки, рекурсивно)&lt;/li&gt;
    &lt;li id=&quot;rvZi&quot;&gt;&lt;strong&gt;-v&lt;/strong&gt; — подробный вывод&lt;/li&gt;
    &lt;li id=&quot;QFZN&quot;&gt;&lt;strong&gt;-z&lt;/strong&gt; — сжатие данных на лету&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;LW60&quot;&gt;Скачать с удалённого сервера:&lt;/p&gt;
  &lt;p id=&quot;RHzk&quot;&gt;&lt;code&gt;rsync -avz user@remote_host:/home/user/folder/ /home/user/folder/&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;YcA7&quot;&gt;Удалять файлы на целевой стороне, которых нет в источнике (полная синхронизация):&lt;/p&gt;
  &lt;p id=&quot;miIp&quot;&gt;&lt;code&gt;rsync -avz --delete /home/user/folder/ user@remote_host:/home/user/folder/&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;wjta&quot;&gt;Синхронизировать только новые или изменённые файлы:&lt;/p&gt;
  &lt;p id=&quot;wgox&quot;&gt;&lt;code&gt;rsync -avzu /home/user/folder/ user@remote_host:/home/user/folder/&lt;/code&gt;&lt;/p&gt;
  &lt;ul id=&quot;a8MH&quot;&gt;
    &lt;li id=&quot;yl5H&quot;&gt;&lt;strong&gt;-u&lt;/strong&gt; — не перезаписывать более новые файлы на целевой стороне&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;3FHX&quot;&gt;SSH-ключи для автоматизации&lt;/h3&gt;
  &lt;p id=&quot;Ah2B&quot;&gt;Чтобы не вводить пароль каждый раз (особенно в скриптах), используйте &lt;strong&gt;SSH-ключи&lt;/strong&gt;:&lt;/p&gt;
  &lt;p id=&quot;bB9W&quot;&gt;&lt;code&gt;ssh-keygen -t ed25519ssh-copy-id user@remote_host&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;VqHt&quot;&gt;Теперь &lt;strong&gt;scp&lt;/strong&gt; и &lt;strong&gt;rsync&lt;/strong&gt; будут работать без пароля.&lt;/p&gt;
  &lt;h2 id=&quot;4swd&quot;&gt;Примеры и кейсы: что работает, а что нет&lt;/h2&gt;
  &lt;figure id=&quot;h1Px&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c7/64/c76499f7-ebbd-49ee-9066-31a78b9cb46e.png&quot; width=&quot;775&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;0PiR&quot;&gt;Положительный кейс: бэкап сайта&lt;/h3&gt;
  &lt;p id=&quot;SkY5&quot;&gt;&lt;code&gt;rsync -avz --delete /var/www/ user@backup_host:/backup/www/&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;EDIm&quot;&gt;— только новые и изменённые файлы, права, симлинки, всё как надо. Можно запускать по cron — и забыть о проблеме.&lt;/p&gt;
  &lt;h3 id=&quot;S0yl&quot;&gt;Отрицательный кейс: «scp -r» на 100 000 мелких файлов&lt;/h3&gt;
  &lt;p id=&quot;8aLh&quot;&gt;Передаёт долго, нет докачки, если что-то упало — начинаем с нуля. Да и нагрузка на CPU не радует.&lt;/p&gt;
  &lt;h3 id=&quot;nH5M&quot;&gt;Кейс: автоматизация деплоя&lt;/h3&gt;
  &lt;p id=&quot;UIjG&quot;&gt;&lt;code&gt;rsync -avz --exclude=&amp;#x27;.git&amp;#x27; --exclude=&amp;#x27;node_modules&amp;#x27; ./ user@prod:/var/www/&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;JHBI&quot;&gt;— быстро, только нужные файлы, ничего лишнего не попадёт.&lt;/p&gt;
  &lt;h2 id=&quot;OcL8&quot;&gt;Ошибки новичков, мифы и похожие решения&lt;/h2&gt;
  &lt;ul id=&quot;ivDu&quot;&gt;
    &lt;li id=&quot;1TwF&quot;&gt;&lt;strong&gt;Миф:&lt;/strong&gt; scp быстрее. &lt;strong&gt;Факт:&lt;/strong&gt; На больших объёмах и множестве файлов rsync быстрее за счёт сжатия и дельты.&lt;/li&gt;
    &lt;li id=&quot;Mh6P&quot;&gt;&lt;strong&gt;Ошибка:&lt;/strong&gt; Копировать папки без &lt;code&gt;-r&lt;/code&gt; в scp — не сработает.&lt;/li&gt;
    &lt;li id=&quot;by8h&quot;&gt;&lt;strong&gt;Ошибка:&lt;/strong&gt; Забыли про пробелы в путях — экранируйте &lt;code&gt;&amp;#x27;/path with spaces/&amp;#x27;&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;98nj&quot;&gt;&lt;strong&gt;Миф:&lt;/strong&gt; rsync сложный. &lt;strong&gt;Факт:&lt;/strong&gt; Базовые команды просты, а дальше — только если нужно.&lt;/li&gt;
    &lt;li id=&quot;vZUu&quot;&gt;&lt;strong&gt;Похожее решение:&lt;/strong&gt; &lt;strong&gt;sftp&lt;/strong&gt; — удобно для ручной работы, но не для автоматизации/скриптов.&lt;/li&gt;
    &lt;li id=&quot;jep9&quot;&gt;&lt;strong&gt;Похожее решение:&lt;/strong&gt; &lt;strong&gt;mc&lt;/strong&gt; (Midnight Commander) — если любите TUI, но для скриптов не подходит.&lt;/li&gt;
    &lt;li id=&quot;0Gz5&quot;&gt;&lt;strong&gt;Похожее решение:&lt;/strong&gt; &lt;strong&gt;lftp&lt;/strong&gt; — умеет mirror, но требует отдельной настройки, не так прозрачен по SSH.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;8i08&quot;&gt;Статистика и сравнение: что и когда использовать&lt;/h2&gt;
  &lt;p id=&quot;URgI&quot;&gt;&lt;strong&gt;scp&lt;/strong&gt; — просто, быстро, но не оптимально для больших данных. &lt;strong&gt;rsync&lt;/strong&gt; — экономит трафик, ускоряет повторные передачи, надёжнее при обрывах. По тестам в сети (например, &lt;a href=&quot;https://wiki.archlinux.org/title/Rsync&quot; target=&quot;_blank&quot;&gt;ArchWiki&lt;/a&gt;), rsync на больших объёмах быстрее scp в 2-5 раз, особенно при повторных синхронизациях.&lt;/p&gt;
  &lt;p id=&quot;6g51&quot;&gt;&lt;strong&gt;rsync&lt;/strong&gt; умеет докачивать файлы, если соединение оборвалось — scp всё начнёт с нуля.&lt;/p&gt;
  &lt;p id=&quot;VIQK&quot;&gt;&lt;strong&gt;scp&lt;/strong&gt; не умеет фильтровать файлы, а rsync — да (&lt;code&gt;--exclude&lt;/code&gt;, &lt;code&gt;--include&lt;/code&gt;).&lt;/p&gt;
  &lt;h2 id=&quot;Nt5S&quot;&gt;Интересные факты и нестандартные применения&lt;/h2&gt;
  &lt;ul id=&quot;j4nF&quot;&gt;
    &lt;li id=&quot;kPOo&quot;&gt;&lt;strong&gt;rsync как сетевой бенчмарк:&lt;/strong&gt; &lt;code&gt;rsync --progress /dev/zero user@remote:/dev/null&lt;/code&gt; — показывает реальную скорость канала.&lt;/li&gt;
    &lt;li id=&quot;vhso&quot;&gt;&lt;strong&gt;rsync по локалке:&lt;/strong&gt; Можно синхронизировать папки на одном сервере — быстрее, чем cp, если много файлов.&lt;/li&gt;
    &lt;li id=&quot;Jbc4&quot;&gt;&lt;strong&gt;Передача через jump host (bastion):&lt;/strong&gt; &lt;code&gt;scp -o ProxyJump=user@jump_host file.txt user@target:/path/&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;DuYi&quot;&gt;&lt;strong&gt;rsyncd:&lt;/strong&gt; Можно поднять отдельный rsync-сервер для массовых бэкапов (см. &lt;a href=&quot;https://download.samba.org/pub/rsync/rsync.html&quot; target=&quot;_blank&quot;&gt;официальную документацию&lt;/a&gt;).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;jbWR&quot;&gt;Автоматизация и скрипты: новые возможности&lt;/h2&gt;
  &lt;ul id=&quot;J9nR&quot;&gt;
    &lt;li id=&quot;IUv9&quot;&gt;Скрипты бэкапа по cron — rsync с ключами, логированием и уведомлениями.&lt;/li&gt;
    &lt;li id=&quot;EUhC&quot;&gt;Деплой без downtime — rsync сначала, потом atomic swap симлинка.&lt;/li&gt;
    &lt;li id=&quot;6FIr&quot;&gt;Миграция между облаками — rsync с фильтрами, чтобы не тянуть мусор.&lt;/li&gt;
    &lt;li id=&quot;XESI&quot;&gt;Мониторинг скорости и ошибок передачи — парсить вывод rsync для алертов.&lt;/li&gt;
    &lt;li id=&quot;CLQv&quot;&gt;Интеграция с Ansible, Salt, Chef — rsync под капотом для копирования файлов на кластеры.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;RBoL&quot;&gt;Выводы и рекомендации: что выбрать и где использовать&lt;/h2&gt;
  &lt;ul id=&quot;64eR&quot;&gt;
    &lt;li id=&quot;c0z6&quot;&gt;&lt;strong&gt;scp&lt;/strong&gt; — если нужно быстро закинуть или скачать пару файлов, без заморочек, вручную или в простом скрипте.&lt;/li&gt;
    &lt;li id=&quot;6iaH&quot;&gt;&lt;strong&gt;rsync&lt;/strong&gt; — если нужно синхронизировать большие объёмы, делать бэкапы, деплой, миграции, автоматизацию. Экономит время, трафик и нервы.&lt;/li&gt;
    &lt;li id=&quot;lhCo&quot;&gt;Для автоматизации — только SSH-ключи, никаких паролей в скриптах!&lt;/li&gt;
    &lt;li id=&quot;nSjh&quot;&gt;Используйте &lt;strong&gt;rsync&lt;/strong&gt; с опциями &lt;code&gt;-avz&lt;/code&gt; и &lt;code&gt;--delete&lt;/code&gt; для полной синхронизации.&lt;/li&gt;
    &lt;li id=&quot;YyJa&quot;&gt;Для передачи по нестандартному порту: &lt;code&gt;scp -P порт&lt;/code&gt; или &lt;code&gt;rsync -e &amp;#x27;ssh -p порт&amp;#x27;&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;Vtbw&quot;&gt;Не забывайте про &lt;code&gt;--exclude&lt;/code&gt; и &lt;code&gt;--include&lt;/code&gt; в rsync — фильтруйте лишнее.&lt;/li&gt;
    &lt;li id=&quot;cSRX&quot;&gt;Если часто копируете между разными серверами — настройте alias-ы и используйте ssh-config для удобства.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;Lw9Y&quot;&gt;&lt;strong&gt;Итого:&lt;/strong&gt; scp и rsync — старые, надёжные, проверенные временем инструменты, которые отлично подходят для передачи файлов между серверами на Linux и не только. Освойте их — и ваши задачи по миграции, бэкапам и деплою станут проще и надёжнее. &lt;/p&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;lgRv&quot;&gt;Проверенный рецепт для надежной передачи больших файлов на Windows (виндовый клиент rsync - &lt;a href=&quot;https://github.com/rn7s2/rsync-win&quot; target=&quot;_blank&quot;&gt;https://github.com/rn7s2/rsync-win&lt;/a&gt;)&lt;/p&gt;
  &lt;p id=&quot;4SC7&quot;&gt;# Первый запуск&lt;br /&gt;rsync-win --progress --partial -s /cygdrive/d/archives.zip -d user@192.168.1.123:/home/user/1/&lt;/p&gt;
  &lt;p id=&quot;Qn4P&quot;&gt;# Если оборвалось - просто повторяем ту же команду&lt;br /&gt;rsync-win --progress --partial -s /cygdrive/d/archives.zip -d user@192.168.1.123:/home/user/1/&lt;br /&gt;&lt;/p&gt;
  &lt;p id=&quot;jSJK&quot;&gt;Дополнительно: проверка целостности после докачки&lt;br /&gt;Если хотите гарантировать, что файл передался без ошибок после докачки:&lt;/p&gt;
  &lt;p id=&quot;JZsR&quot;&gt;# После завершения передачи проверьте контрольную сумму&lt;br /&gt;rsync-win --checksum --partial -s /cygdrive/d/archives.zip -d user@192.168.1.123:/home/user/1/&lt;/p&gt;
  &lt;p id=&quot;vE9s&quot;&gt;Флаг --checksum заставит rsync сравнить содержимое, а не только размер и дату&lt;/p&gt;

</content></entry><entry><id>dark2k:linux_tutorial_part_1</id><link rel="alternate" type="text/html" href="https://blog.provision12.ru/linux_tutorial_part_1?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=dark2k"></link><title>Учим Linux: Файловая система</title><published>2026-02-26T10:34:03.874Z</published><updated>2026-02-26T10:34:03.874Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/8f/6d/8f6d09aa-db65-42c1-91d9-d16790bed17a.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/7f/b8/7fb8d0f3-72b1-4c50-89a4-20d30e9780ff.png&quot;&gt;Давайте не будем вдаваться в элементарные подробности терминологии - что такое файловая система и тому подобное. Скажу лишь, что статья подготовлена для новичков и специалистов, желающих обновить свои знания. Я постарался написать коротко и по сути. Всего частей будет 11.</summary><content type="html">
  &lt;figure id=&quot;z9dB&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7f/b8/7fb8d0f3-72b1-4c50-89a4-20d30e9780ff.png&quot; width=&quot;480&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;t6zN&quot;&gt;Введение&lt;/h3&gt;
  &lt;p id=&quot;8NOg&quot;&gt;Давайте не будем вдаваться в элементарные подробности терминологии - что такое файловая система и тому подобное. Скажу лишь, что статья подготовлена для новичков и специалистов, желающих обновить свои знания. Я постарался написать коротко и по сути. Всего частей будет 11.&lt;/p&gt;
  &lt;ol id=&quot;fTqT&quot;&gt;
    &lt;li id=&quot;CIaT&quot;&gt;📁 Файловая система&lt;/li&gt;
    &lt;li id=&quot;XqA9&quot;&gt;👤 Пользователи и группы&lt;/li&gt;
    &lt;li id=&quot;yzoR&quot;&gt;🔐 Права доступа&lt;/li&gt;
    &lt;li id=&quot;cM6m&quot;&gt;⚙️ Процессы и система&lt;/li&gt;
    &lt;li id=&quot;TWeh&quot;&gt;🌐 Сеть&lt;/li&gt;
    &lt;li id=&quot;K3ia&quot;&gt;📋 Логи и мониторинг&lt;/li&gt;
    &lt;li id=&quot;m4Zt&quot;&gt;🛡️ Hardening и безопасность&lt;/li&gt;
    &lt;li id=&quot;zl5r&quot;&gt;📦 Пакеты и обновления&lt;/li&gt;
    &lt;li id=&quot;mDWH&quot;&gt;🔧 Скриптинг и автоматизация&lt;/li&gt;
    &lt;li id=&quot;bT2e&quot;&gt;🔑 Криптография и сертификаты&lt;/li&gt;
    &lt;li id=&quot;vbf8&quot;&gt;🧩 Контейнеры (Linux-уровень)&lt;/li&gt;
  &lt;/ol&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;4Jrr&quot;&gt;Структура файловой системы&lt;/h3&gt;
  &lt;pre id=&quot;UFyi&quot;&gt;/
├── etc        # конфигурации системы и приложений
├── var        # переменные данные: логи, кэш, очереди
├── proc       # состояние ядра и процессов
├── sys        # устройства и драйверы
├── tmp        # временные файлы
├── home       # домашние директории пользователей
├── root       # домашняя директория суперпользователя
├── dev        # файлы устройств
├── usr        # программы и библиотеки
├── bin        # базовые утилиты (symlink на /usr/bin)
├── sbin       # команды администрирования (symlink на /usr/sbin)
├── opt        # сторонний софт
├── run        # runtime-данные процессов
├── mnt        # точки ручного монтирования
└── boot       # файлы загрузчика и ядро&lt;/pre&gt;
  &lt;p id=&quot;EyDM&quot;&gt;Корневой каталог &lt;code&gt;/&lt;/code&gt; - вершина всей иерархии. Всё остальное монтируется внутрь него. Рассмотрим ключевые каталоги подробнее.&lt;/p&gt;
  &lt;h4 id=&quot;yB42&quot;&gt;/etc&lt;/h4&gt;
  &lt;p id=&quot;mwKA&quot;&gt;От &lt;em&gt;et cetera&lt;/em&gt; или &lt;em&gt;Editable Text Configuration&lt;/em&gt; - здесь хранятся конфигурационные файлы всей системы. Настройки служб, сетевых параметров, пользователей - всё сюда. Важные файлы: &lt;code&gt;/etc/passwd&lt;/code&gt; (пользователи), &lt;code&gt;/etc/fstab&lt;/code&gt; (монтирование файловых систем), &lt;code&gt;/etc/hosts&lt;/code&gt; (локальный DNS), &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt; (настройки SSH-сервера).&lt;/p&gt;
  &lt;h4 id=&quot;qsLp&quot;&gt;/var&lt;/h4&gt;
  &lt;p id=&quot;C7Fg&quot;&gt;От &lt;em&gt;variable&lt;/em&gt; - данные, которые постоянно меняются в процессе работы: логи (&lt;code&gt;/var/log&lt;/code&gt;), почтовые очереди (&lt;code&gt;/var/mail&lt;/code&gt;), спулеры (&lt;code&gt;/var/spool&lt;/code&gt;), данные веб-серверов (&lt;code&gt;/var/www&lt;/code&gt;). Именно сюда смотреть в первую очередь при диагностике проблем.&lt;/p&gt;
  &lt;h4 id=&quot;QPIm&quot;&gt;/proc&lt;/h4&gt;
  &lt;p id=&quot;88LH&quot;&gt;Виртуальная файловая система - файлы здесь не хранятся на диске, а генерируются ядром в реальном времени. Предоставляет информацию о запущенных процессах и состоянии ядра. Примеры: &lt;code&gt;/proc/cpuinfo&lt;/code&gt; - информация о процессоре, &lt;code&gt;/proc/meminfo&lt;/code&gt; - память, &lt;code&gt;/proc/1/&lt;/code&gt; - данные процесса с PID 1.&lt;/p&gt;
  &lt;h4 id=&quot;aLQr&quot;&gt;/sys&lt;/h4&gt;
  &lt;p id=&quot;Hdk7&quot;&gt;Ещё одна виртуальная ФС - интерфейс к устройствам и драйверам ядра. Позволяет читать и изменять параметры ядра и оборудования на лету. Широко используется при работе с сетевыми интерфейсами, дисками и другим железом.&lt;/p&gt;
  &lt;h4 id=&quot;RhxG&quot;&gt;/tmp&lt;/h4&gt;
  &lt;p id=&quot;s2vl&quot;&gt;Временные файлы. Любой пользователь может создавать файлы здесь. Содержимое обычно очищается при перезагрузке или по таймеру (через &lt;code&gt;systemd-tmpfiles&lt;/code&gt;). Не храните здесь ничего важного.&lt;/p&gt;
  &lt;h4 id=&quot;sxCj&quot;&gt;/home&lt;/h4&gt;
  &lt;p id=&quot;DAXO&quot;&gt;Домашние каталоги обычных пользователей. Каждый пользователь получает свой подкаталог - &lt;code&gt;/home/username&lt;/code&gt;. Здесь хранятся личные файлы, конфиги программ (скрытые папки вида &lt;code&gt;.config&lt;/code&gt;, &lt;code&gt;.ssh&lt;/code&gt;), документы.&lt;/p&gt;
  &lt;h4 id=&quot;ytk0&quot;&gt;/root&lt;/h4&gt;
  &lt;p id=&quot;QVKE&quot;&gt;Домашний каталог суперпользователя. Намеренно вынесен отдельно от &lt;code&gt;/home&lt;/code&gt; - для безопасности и доступности даже при проблемах с монтированием &lt;code&gt;/home&lt;/code&gt;.&lt;/p&gt;
  &lt;h4 id=&quot;X9Oj&quot;&gt;/dev&lt;/h4&gt;
  &lt;p id=&quot;k3M0&quot;&gt;Файлы устройств - интерфейсы к аппаратному обеспечению. &lt;code&gt;/dev/sda&lt;/code&gt; - первый жёсткий диск, &lt;code&gt;/dev/sda1&lt;/code&gt; - его первый раздел, &lt;code&gt;/dev/null&lt;/code&gt; - «чёрная дыра» для ненужного вывода, &lt;code&gt;/dev/zero&lt;/code&gt; - источник нулевых байт, &lt;code&gt;/dev/random&lt;/code&gt; и &lt;code&gt;/dev/urandom&lt;/code&gt; - генераторы случайных данных.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;wnTa&quot;&gt;Навигация по файловой системе&lt;/h3&gt;
  &lt;h4 id=&quot;Xewq&quot;&gt;ls - просмотр содержимого каталога&lt;/h4&gt;
  &lt;p id=&quot;QvE8&quot;&gt;&lt;code&gt;ls&lt;/code&gt; (от &lt;em&gt;list&lt;/em&gt;) выводит список файлов и подкаталогов. Без аргументов показывает текущий каталог.&lt;/p&gt;
  &lt;pre id=&quot;9BZq&quot;&gt;ls                    # Содержимое текущего каталога
ls /etc               # Содержимое /etc
ls -l                 # Подробный список: права, владелец, размер, дата
ls -a                 # Все файлы, включая скрытые (начинающиеся с точки)
ls -lh                # Подробный список с читаемым размером (KB, MB, GB)
ls -lt                # Сортировка по времени изменения (новые сверху)
ls -lS                # Сортировка по размеру (большие сверху)
ls -R                 # Рекурсивный вывод всех вложенных каталогов
ls -ld /etc           # Информация о самом каталоге, а не его содержимом&lt;/pre&gt;
  &lt;p id=&quot;ngM9&quot;&gt;Флаги можно комбинировать. &lt;code&gt;ls -lah&lt;/code&gt; - пожалуй, самая частая комбинация в работе: подробный список, скрытые файлы, читаемые размеры.&lt;/p&gt;
  &lt;h4 id=&quot;sIYG&quot;&gt;cd - смена текущего каталога&lt;/h4&gt;
  &lt;p id=&quot;wuEi&quot;&gt;&lt;code&gt;cd&lt;/code&gt; (от &lt;em&gt;change directory&lt;/em&gt;) - основа навигации.&lt;/p&gt;
  &lt;pre id=&quot;owYO&quot;&gt;cd /etc               # Перейти в /etc (абсолютный путь)
cd logs               # Перейти в подкаталог logs (относительный путь)
cd ..                 # На уровень вверх
cd ../..              # На два уровня вверх
cd ~                  # В домашний каталог текущего пользователя
cd                    # То же самое, что cd ~
cd -                  # В предыдущий каталог (удобно для переключения между двумя)
cd /var/log           # Абсолютный путь от корня&lt;/pre&gt;
  &lt;blockquote id=&quot;4gSP&quot;&gt;&lt;code&gt;cd -&lt;/code&gt; - очень удобная команда когда нужно быстро переключаться между двумя каталогами.&lt;/blockquote&gt;
  &lt;h4 id=&quot;0dpj&quot;&gt;pwd - текущий рабочий каталог&lt;/h4&gt;
  &lt;p id=&quot;qF1T&quot;&gt;&lt;code&gt;pwd&lt;/code&gt; (от &lt;em&gt;print working directory&lt;/em&gt;) выводит абсолютный путь к тому месту, где вы сейчас находитесь.&lt;/p&gt;
  &lt;pre id=&quot;VgTK&quot;&gt;pwd# Вывод: /home/username/projects&lt;/pre&gt;
  &lt;pre id=&quot;XSia&quot;&gt;pwd -P    # Показать реальный путь без symlink&amp;#x27;ов
pwd -L    # Показать логический путь (по умолчанию)&lt;/pre&gt;
  &lt;h4 id=&quot;m1cn&quot;&gt;find - поиск файлов и каталогов&lt;/h4&gt;
  &lt;p id=&quot;gch9&quot;&gt;&lt;code&gt;find&lt;/code&gt; - мощный инструмент для поиска по имени, типу, размеру, правам, времени изменения и многому другому. Ищет рекурсивно в указанной директории.&lt;/p&gt;
  &lt;pre id=&quot;KIgt&quot;&gt;# Поиск по имени
find . -name &amp;quot;*.log&amp;quot;              # Все .log файлы в текущем каталоге
find /etc -name &amp;quot;hosts&amp;quot;           # Файл hosts в /etc
find / -name &amp;quot;*.conf&amp;quot; 2&amp;gt;/dev/null # Все .conf файлы на всей системе, без ошибок
# Поиск по типу
find /var -type f                 # Только файлы (не каталоги)
find /etc -type d                 # Только каталоги
find /dev -type l                 # Только символические ссылки
# Поиск по размеру
find / -size +100M                # Файлы больше 100 MB
find /tmp -size -1k               # Файлы меньше 1 KB
# Поиск по времени
find /var/log -mtime -1           # Изменялись за последние 24 часа
find /tmp -atime +7               # Не открывались более 7 дней
# Поиск по правам и владельцу
find / -perm 777                  # Файлы с правами 777
find /home -user username         # Файлы конкретного пользователя
# Поиск + действие
find /tmp -name &amp;quot;*.tmp&amp;quot; -delete                 # Найти и удалить
find /var/log -name &amp;quot;*.log&amp;quot; -exec ls -lh {} \;  # Найти и выполнить команду&lt;/pre&gt;
  &lt;h4 id=&quot;uYua&quot;&gt;locate - быстрый поиск по базе данных&lt;/h4&gt;
  &lt;p id=&quot;Gweh&quot;&gt;&lt;code&gt;locate&lt;/code&gt; ищет не на диске в реальном времени, а по заранее собранной базе данных - поэтому работает значительно быстрее &lt;code&gt;find&lt;/code&gt;. Минус: база не знает о файлах, созданных после последнего обновления.&lt;/p&gt;
  &lt;pre id=&quot;OB67&quot;&gt;locate passwd                  # Найти все пути, содержащие &amp;quot;passwd&amp;quot;
locate -i readme               # Поиск без учёта регистра
locate -c &amp;quot;*.conf&amp;quot;             # Подсчитать количество совпадений
locate -l 10 &amp;quot;*.log&amp;quot;           # Вывести максимум 10 результатов
sudo updatedb                  # Обновить базу данных вручную&lt;/pre&gt;
  &lt;blockquote id=&quot;C85L&quot;&gt;В Ubuntu/Debian locate устанавливается отдельно. Начиная с Ubuntu 22.04 рекомендуется plocate вместо устаревшего mlocate — он быстрее за счёт более эффективного формата индекса: sudo apt install plocate. Команда locate при этом остаётся той же. База обновляется автоматически через cron/systemd-timer, обычно раз в сутки.&lt;/blockquote&gt;
  &lt;h4 id=&quot;r7vt&quot;&gt;tree - дерево каталогов&lt;/h4&gt;
  &lt;p id=&quot;QFWF&quot;&gt;&lt;code&gt;tree&lt;/code&gt; визуализирует структуру каталогов в виде дерева - удобно для быстрого обзора проекта или системной директории.&lt;/p&gt;
  &lt;pre id=&quot;n709&quot;&gt;tree                      # Дерево текущего каталога
tree /etc                 # Дерево /etc
tree -L 2                 # Ограничить глубину 2 уровнями
tree -L 3 /var            # /var на 3 уровня вглубь
tree -a                   # Включая скрытые файлы
tree -d                   # Только каталоги, без файлов
tree -f                   # Показывать полные пути
tree -h                   # Показывать размер файлов
tree -I &amp;quot;node_modules&amp;quot;    # Исключить каталог из вывода&lt;/pre&gt;
  &lt;blockquote id=&quot;kuyh&quot;&gt;Установка: &lt;code&gt;sudo apt install tree&lt;/code&gt;&lt;/blockquote&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;9Frs&quot;&gt;Работа с файлами и каталогами&lt;/h3&gt;
  &lt;h4 id=&quot;mwSw&quot;&gt;cp - копирование&lt;/h4&gt;
  &lt;p id=&quot;6WpC&quot;&gt;&lt;code&gt;cp&lt;/code&gt; (от &lt;em&gt;copy&lt;/em&gt;) копирует файлы и каталоги.&lt;/p&gt;
  &lt;pre id=&quot;lPB3&quot;&gt;cp file.txt copy.txt              # Копировать файл
cp file.txt /tmp/                 # Скопировать в другой каталог
cp file1.txt file2.txt /tmp/      # Скопировать несколько файлов
cp -r dir1 dir2                   # Копировать каталог рекурсивно
cp -r dir1/ /backup/              # Копировать содержимое dir1 в /backup
cp -p file.txt copy.txt           # Сохранить права, владельца и временные метки
cp -u source.txt dest.txt         # Копировать только если source новее dest
cp -v file.txt /tmp/              # Подробный вывод (verbose)
cp -i file.txt existing.txt       # Спросить перед перезаписью&lt;/pre&gt;
  &lt;h4 id=&quot;NMqu&quot;&gt;mv - перемещение и переименование&lt;/h4&gt;
  &lt;p id=&quot;KJc6&quot;&gt;&lt;code&gt;mv&lt;/code&gt; (от &lt;em&gt;move&lt;/em&gt;) - и перемещение, и переименование делается одной командой.&lt;/p&gt;
  &lt;pre id=&quot;eK4s&quot;&gt;mv old.txt new.txt                # Переименовать файл
mv file.txt /tmp/                 # Переместить файл в /tmp
mv file.txt /tmp/newname.txt      # Переместить и переименовать одновременно
mv dir1 dir2                      # Переименовать каталог
mv *.log /var/archive/            # Переместить все .log файлы
mv -i file.txt existing.txt       # Спросить перед перезаписью
mv -u source.txt dest.txt         # Переместить только если source новее
mv -v file.txt /tmp/              # Verbose-режим&lt;/pre&gt;
  &lt;h4 id=&quot;x44M&quot;&gt;rm - удаление&lt;/h4&gt;
  &lt;p id=&quot;3DLU&quot;&gt;&lt;code&gt;rm&lt;/code&gt; (от &lt;em&gt;remove&lt;/em&gt;) удаляет файлы и каталоги.&lt;/p&gt;
  &lt;blockquote id=&quot;XO13&quot;&gt;Удалённые через &lt;code&gt;rm&lt;/code&gt; файлы не попадают в корзину. Восстановление возможно, но сложно и не гарантировано. &lt;code&gt;rm -rf&lt;/code&gt; - особо опасная команда, требует максимального внимания.&lt;/blockquote&gt;
  &lt;pre id=&quot;GItq&quot;&gt;rm file.txt                   # Удалить файл
rm file1.txt file2.txt        # Удалить несколько файлов
rm *.tmp                      # Удалить все .tmp файлы
rm -i file.txt                # Запросить подтверждение
rm -r directory/              # Удалить каталог рекурсивно
rm -rf directory/             # Принудительное рекурсивное удаление без запроса
rm -v file.txt                # Verbose-режим - показывать что удаляется&lt;/pre&gt;
  &lt;h4 id=&quot;WwxS&quot;&gt;mkdir - создание каталогов&lt;/h4&gt;
  &lt;p id=&quot;cp8Q&quot;&gt;&lt;code&gt;mkdir&lt;/code&gt; (от &lt;em&gt;make directory&lt;/em&gt;) создаёт новые каталоги.&lt;/p&gt;
  &lt;pre id=&quot;1Lrs&quot;&gt;mkdir new_dir                        # Создать каталог
mkdir dir1 dir2 dir3                 # Создать несколько каталогов
mkdir -p parent/child/grandchild     # Создать всю цепочку, если не существует
mkdir -m 755 secure_dir              # Создать с указанными правами
mkdir -v new_dir                     # Verbose-режим&lt;/pre&gt;
  &lt;blockquote id=&quot;0LdF&quot;&gt;mkdir -p незаменим в скриптах: без него команда упадёт с ошибкой при повторном запуске, если каталог уже существует. Флаг решает обе задачи сразу — «если каталог уже есть, всё в порядке; иначе создай его и все промежуточные».&lt;/blockquote&gt;
  &lt;h4 id=&quot;psVS&quot;&gt;touch - создание файлов и обновление временных меток&lt;/h4&gt;
  &lt;p id=&quot;CVOO&quot;&gt;&lt;code&gt;touch&lt;/code&gt; создаёт пустой файл, если он не существует, или обновляет временные метки у существующего.&lt;/p&gt;
  &lt;pre id=&quot;61UC&quot;&gt;touch file.txt                    # Создать пустой файл
touch file1.txt file2.txt         # Создать несколько файлов
touch -m file.txt                 # Обновить только время модификации
touch -a file.txt                 # Обновить только время доступа
touch -t 202501011200 file.txt    # Установить конкретное время (YYYYMMDDhhmm)&lt;/pre&gt;
  &lt;h4 id=&quot;Jsxg&quot;&gt;ln - создание ссылок&lt;/h4&gt;
  &lt;p id=&quot;n76k&quot;&gt;&lt;code&gt;ln&lt;/code&gt; (от &lt;em&gt;link&lt;/em&gt;) создаёт жёсткие или символические ссылки.&lt;/p&gt;
  &lt;p id=&quot;zLhU&quot;&gt;&lt;strong&gt;Жёсткая ссылка (hard link)&lt;/strong&gt; указывает на тот же inode, что и оригинал. Удаление исходного файла не уничтожает данные - они доступны через ссылку. Не работает между разными файловыми системами и не может ссылаться на каталоги.&lt;/p&gt;
  &lt;p id=&quot;UB7a&quot;&gt;&lt;strong&gt;Символическая ссылка (symlink)&lt;/strong&gt; - указатель на путь к файлу или каталогу. Аналог ярлыка в Windows. Работает между ФС и с каталогами. При удалении оригинала ссылка становится битой.&lt;/p&gt;
  &lt;pre id=&quot;50Mf&quot;&gt;ln file.txt hardlink.txt                  # Жёсткая ссылка
ln -s file.txt symlink.txt                # Символическая ссылка на файл
ln -s /etc/nginx/nginx.conf ~/nginx.conf  # Symlink с абсолютным путём
ln -s /var/www /srv/web                   # Символическая ссылка на каталог
ln -sf new_target.txt existing_link.txt   # Перезаписать существующий symlink
ls -la symlink.txt                        # Видно что это ссылка и куда ведёт&lt;/pre&gt;
  &lt;h4 id=&quot;toEy&quot;&gt;stat - подробная информация о файле&lt;/h4&gt;
  &lt;p id=&quot;GIlw&quot;&gt;&lt;code&gt;stat&lt;/code&gt; выводит полную информацию о файле: размер, тип, inode, права доступа, владелец, три временные метки.&lt;/p&gt;
  &lt;pre id=&quot;PUPb&quot;&gt;stat file.txt
# Вывод:
#   File: file.txt
#   Size: 1024       Blocks: 8    IO Block: 4096  regular file
#   Device: 8,1      Inode: 131074    Links: 1
#   Access: (0644/-rw-r--r--)  Uid: (1000/username)   Gid: (1000/username)
#   Access: 2026-02-25 10:00:00
#   Modify: 2026-02-24 15:30:00
#   Change: 2026-02-24 15:30:00
stat /etc                       # Информация о каталоге
stat -f file.txt                # Информация о файловой системе, на которой лежит файл
stat --format=&amp;quot;%n %s %U&amp;quot;        # Форматированный вывод: имя, размер, владелец&lt;/pre&gt;
  &lt;p id=&quot;XJt3&quot;&gt;Три временные метки:&lt;/p&gt;
  &lt;ul id=&quot;nmHk&quot;&gt;
    &lt;li id=&quot;okIE&quot;&gt;&lt;strong&gt;Access&lt;/strong&gt; - последнее чтение файла&lt;/li&gt;
    &lt;li id=&quot;xptA&quot;&gt;&lt;strong&gt;Modify&lt;/strong&gt; - последнее изменение содержимого&lt;/li&gt;
    &lt;li id=&quot;lNxH&quot;&gt;&lt;strong&gt;Change&lt;/strong&gt; - последнее изменение метаданных (права, владелец)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h4 id=&quot;oAZe&quot;&gt;file - определение типа файла&lt;/h4&gt;
  &lt;p id=&quot;cNWi&quot;&gt;&lt;code&gt;file&lt;/code&gt; анализирует содержимое файла и определяет его тип - независимо от расширения.&lt;/p&gt;
  &lt;pre id=&quot;pnuj&quot;&gt;file document.pdf          # Выведет: PDF document, version 1.6
file /bin/bash             # Выведет: ELF 64-bit LSB executable...
file archive.tar.gz        # Выведет: gzip compressed data...
file image.png             # Выведет: PNG image data, 1920 x 1080...
file script.sh             # Выведет: Bourne-Again shell script...
file unknown_file          # Полезно когда расширение неизвестно или отсутствует
file *                     # Определить тип всех файлов в текущем каталоге
file -i document.pdf       # MIME-тип вместо текстового описания&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;89cE&quot;&gt;Просмотр содержимого файлов&lt;/h3&gt;
  &lt;h4 id=&quot;fP7H&quot;&gt;cat - вывод содержимого файла&lt;/h4&gt;
  &lt;p id=&quot;ViKa&quot;&gt;&lt;code&gt;cat&lt;/code&gt; (от &lt;em&gt;concatenate&lt;/em&gt;) выводит содержимое одного или нескольких файлов. Лучше всего подходит для коротких файлов.&lt;/p&gt;
  &lt;pre id=&quot;CUQg&quot;&gt;cat file.txt                      # Вывести содержимое файла
cat file1.txt file2.txt           # Объединить и вывести два файла
cat -n file.txt                   # С номерами строк
cat -A file.txt                   # Показать спецсимволы ($ в конце строк, ^I для табуляции)
cat -s file.txt                   # Сжать несколько пустых строк в одну
cat /dev/null &amp;gt; file.txt          # Очистить файл (обнулить)
cat &amp;gt; newfile.txt                 # Создать файл и писать в него вручную (Ctrl+D для завершения)&lt;/pre&gt;
  &lt;h4 id=&quot;Jd8W&quot;&gt;less - постраничный просмотр&lt;/h4&gt;
  &lt;p id=&quot;sqPq&quot;&gt;&lt;code&gt;less&lt;/code&gt; - интерактивный просмотрщик для больших файлов. Не загружает весь файл в память, поэтому отлично работает с гигантскими логами.&lt;/p&gt;
  &lt;pre id=&quot;ZcoP&quot;&gt;less /var/log/syslog
less +F /var/log/syslog          # Открыть в режиме отслеживания (как tail -f)
less -N file.txt                 # С номерами строк
less -S file.txt                 # Без переноса длинных строк&lt;/pre&gt;
  &lt;p id=&quot;kMP7&quot;&gt;Управление внутри &lt;code&gt;less&lt;/code&gt;:&lt;/p&gt;
  &lt;figure id=&quot;ggKP&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/ba/81/ba81f7b9-a2dd-4e53-b424-88afb87477a9.png&quot; width=&quot;758&quot; /&gt;
  &lt;/figure&gt;
  &lt;h4 id=&quot;UQsv&quot;&gt;more - упрощённый постраничный просмотр&lt;/h4&gt;
  &lt;p id=&quot;i875&quot;&gt;&lt;code&gt;more&lt;/code&gt; - предшественник &lt;code&gt;less&lt;/code&gt;, умеет только прокручивать вперёд. Использовать &lt;code&gt;less&lt;/code&gt; предпочтительнее, но &lt;code&gt;more&lt;/code&gt; гарантированно есть на любой Unix-системе.&lt;/p&gt;
  &lt;pre id=&quot;dNNo&quot;&gt;more /etc/passwd
more -5 file.txt         # Показывать по 5 строк&lt;/pre&gt;
  &lt;h4 id=&quot;ZbmK&quot;&gt;head - первые строки файла&lt;/h4&gt;
  &lt;p id=&quot;bgVP&quot;&gt;&lt;code&gt;head&lt;/code&gt; по умолчанию выводит первые 10 строк файла.&lt;/p&gt;
  &lt;pre id=&quot;Vjqe&quot;&gt;head file.txt                # Первые 10 строк
head -n 20 file.txt          # Первые 20 строк
head -n -5 file.txt          # Все строки, кроме последних 5
head -c 100 file.txt         # Первые 100 байт
head -q file1.txt file2.txt  # Несколько файлов без заголовков&lt;/pre&gt;
  &lt;h4 id=&quot;lGd6&quot;&gt;tail - последние строки файла&lt;/h4&gt;
  &lt;p id=&quot;Jp1U&quot;&gt;&lt;code&gt;tail&lt;/code&gt; по умолчанию выводит последние 10 строк.&lt;/p&gt;
  &lt;pre id=&quot;4Y7q&quot;&gt;tail file.txt                # Последние 10 строк
tail -n 20 file.txt          # Последние 20 строк
tail -n +5 file.txt          # Все строки, начиная с 5-й
tail -c 200 file.txt         # Последние 200 байт&lt;/pre&gt;
  &lt;h4 id=&quot;m112&quot;&gt;tail -f - отслеживание файла в реальном времени&lt;/h4&gt;
  &lt;p id=&quot;jew0&quot;&gt;Флаг &lt;code&gt;-f&lt;/code&gt; (от &lt;em&gt;follow&lt;/em&gt;) держит файл открытым и выводит новые строки по мере их появления. Незаменим для мониторинга логов.&lt;/p&gt;
  &lt;pre id=&quot;jkUk&quot;&gt;tail -f /var/log/syslog                  # Следить за системным логом
tail -f /var/log/nginx/access.log        # Следить за логом nginx
tail -fn 50 /var/log/auth.log            # Последние 50 строк + слежение
tail -f file1.log file2.log              # Следить за несколькими файлами&lt;/pre&gt;
  &lt;blockquote id=&quot;pDUl&quot;&gt;&lt;code&gt;Ctrl+C&lt;/code&gt; для выхода из режима слежения. Если хотите следить за файлом даже после его ротации (пересоздания) - используйте &lt;code&gt;tail -F&lt;/code&gt; (заглавная F).&lt;/blockquote&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;Lmh8&quot;&gt;Поиск внутри файлов&lt;/h3&gt;
  &lt;h4 id=&quot;0nj5&quot;&gt;grep - поиск текста по шаблону&lt;/h4&gt;
  &lt;p id=&quot;aRqJ&quot;&gt;&lt;code&gt;grep&lt;/code&gt; (от &lt;em&gt;global regular expression print&lt;/em&gt;) ищет строки по шаблону в файлах или потоке данных. Одна из самых используемых команд в Linux.&lt;/p&gt;
  &lt;pre id=&quot;L2T6&quot;&gt;grep &amp;quot;error&amp;quot; /var/log/syslog             # Строки содержащие &amp;quot;error&amp;quot;
grep -i &amp;quot;warning&amp;quot; file.txt               # Без учёта регистра
grep -n &amp;quot;root&amp;quot; /etc/passwd               # С номерами строк
grep -c &amp;quot;error&amp;quot; /var/log/syslog          # Подсчитать количество совпадений
grep -v &amp;quot;debug&amp;quot; app.log                  # Инвертировать: строки БЕЗ &amp;quot;debug&amp;quot;
grep -l &amp;quot;TODO&amp;quot; *.py                      # Только имена файлов с совпадениями
grep -w &amp;quot;root&amp;quot; /etc/passwd               # Только целые слова (не &amp;quot;rootdir&amp;quot;)
grep -A 3 &amp;quot;error&amp;quot; file.log               # 3 строки после совпадения (After)
grep -B 2 &amp;quot;error&amp;quot; file.log               # 2 строки до совпадения (Before)
grep -C 2 &amp;quot;error&amp;quot; file.log               # По 2 строки до и после (Context)&lt;/pre&gt;
  &lt;h4 id=&quot;9Nvg&quot;&gt;grep -r - рекурсивный поиск&lt;/h4&gt;
  &lt;pre id=&quot;t0Xa&quot;&gt;grep -r &amp;quot;function_name&amp;quot; .              # Во всех файлах текущего каталога
grep -r &amp;quot;TODO&amp;quot; /home/user/project      # В конкретном проекте
grep -rl &amp;quot;api_key&amp;quot; .                   # Только имена файлов рекурсивно
grep -r --include=&amp;quot;*.py&amp;quot; &amp;quot;import&amp;quot; .    # Только в .py файлах
grep -r --exclude=&amp;quot;*.log&amp;quot; &amp;quot;error&amp;quot; .    # Исключить .log файлы
grep -r --exclude-dir=&amp;quot;.git&amp;quot; &amp;quot;fix&amp;quot; .   # Исключить каталог&lt;/pre&gt;
  &lt;h4 id=&quot;VkhR&quot;&gt;grep -E - расширенные регулярные выражения&lt;/h4&gt;
  &lt;p id=&quot;U8zK&quot;&gt;&lt;code&gt;-E&lt;/code&gt; (или &lt;code&gt;egrep&lt;/code&gt;) включает поддержку расширенного синтаксиса регулярных выражений.&lt;/p&gt;
  &lt;pre id=&quot;VuwP&quot;&gt;grep -E &amp;quot;(error|fail|critical)&amp;quot; /var/log/syslog   # ИЛИ
grep -E &amp;quot;^root&amp;quot; /etc/passwd                       # Строки, начинающиеся с &amp;quot;root&amp;quot;
grep -E &amp;quot;bash$&amp;quot; /etc/passwd                       # Строки, заканчивающиеся на &amp;quot;bash&amp;quot;
grep -E &amp;quot;[0-9]{1,3}\.[0-9]{1,3}&amp;quot; file.txt         # IP-адреса (упрощённо)
grep -E &amp;quot;^$&amp;quot; file.txt                             # Пустые строки
grep -E &amp;quot;https?://&amp;quot; file.txt                      # http или https ссылки&lt;/pre&gt;
  &lt;h4 id=&quot;bIKj&quot;&gt;awk - обработка и извлечение полей&lt;/h4&gt;
  &lt;p id=&quot;yvgs&quot;&gt;&lt;code&gt;awk&lt;/code&gt; - язык для построчной обработки текста. Особенно силён при работе с табличными данными, логами и файлами с разделителями.&lt;/p&gt;
  &lt;p id=&quot;gZTa&quot;&gt;Базовая модель: &lt;code&gt;awk &amp;#x27;условие { действие }&amp;#x27; файл&lt;/code&gt;. По умолчанию разделитель - пробел/tab, поля: &lt;code&gt;$1&lt;/code&gt;, &lt;code&gt;$2&lt;/code&gt;, ..., &lt;code&gt;$NF&lt;/code&gt; (последнее поле), &lt;code&gt;$0&lt;/code&gt; - вся строка.&lt;/p&gt;
  &lt;pre id=&quot;EWZw&quot;&gt;# /etc/passwd: user:x:uid:gid:info:home:shell
awk -F: &amp;#x27;{print $1}&amp;#x27; /etc/passwd                     # Имена всех пользователей
awk -F: &amp;#x27;{print $1, $3}&amp;#x27; /etc/passwd                 # Имя и UID
awk -F: &amp;#x27;$3 &amp;gt;= 1000 {print $1}&amp;#x27; /etc/passwd          # Только обычные пользователи (UID ≥ 1000)
awk -F: &amp;#x27;{print $1&amp;quot;: &amp;quot;$7}&amp;#x27; /etc/passwd               # Форматированный вывод

# Работа с пробельным разделителем
awk &amp;#x27;{print $1}&amp;#x27; access.log                          # Первое поле (напр. IP в логе nginx)
awk &amp;#x27;NR==5&amp;#x27; file.txt                                 # Вывести только 5-ю строку
awk &amp;#x27;NR&amp;gt;=5 &amp;amp;&amp;amp; NR&amp;lt;=10&amp;#x27; file.txt                       # Строки с 5 по 10# Встроенные переменные
awk &amp;#x27;{print NR&amp;quot;: &amp;quot;$0}&amp;#x27; file.txt                      # Добавить номера строк
awk &amp;#x27;END{print NR}&amp;#x27; file.txt                         # Подсчитать количество строк
awk &amp;#x27;{sum += $1} END {print &amp;quot;Сумма:&amp;quot;, sum}&amp;#x27; numbers.txt  # Сложить числа из первого столбца

# BEGIN и END блоки
awk &amp;#x27;BEGIN{print &amp;quot;=== Пользователи ===&amp;quot;} -F: {print $1} END{print &amp;quot;=== Конец ===&amp;quot;}&amp;#x27; /etc/passwd&lt;/pre&gt;
  &lt;h4 id=&quot;uj54&quot;&gt;sed - потоковый редактор&lt;/h4&gt;
  &lt;p id=&quot;GEJy&quot;&gt;&lt;code&gt;sed&lt;/code&gt; (от &lt;em&gt;stream editor&lt;/em&gt;) обрабатывает текст построчно - заменяет, удаляет, вставляет, фильтрует. По умолчанию не изменяет исходный файл, а выводит результат в stdout.&lt;/p&gt;
  &lt;pre id=&quot;9K4a&quot;&gt;# Замена
sed &amp;#x27;s/old/new/&amp;#x27; file.txt              # Заменить первое вхождение в каждой строке
sed &amp;#x27;s/old/new/g&amp;#x27; file.txt             # Заменить все вхождения (global)
sed &amp;#x27;s/old/new/gi&amp;#x27; file.txt            # Без учёта регистра
sed &amp;#x27;s/root/admin/g&amp;#x27; /etc/passwd       # Пример с реальным файлом

# Редактирование файла &amp;quot;на месте&amp;quot;
sed -i &amp;#x27;s/old/new/g&amp;#x27; file.txt          # Изменить файл (осторожно!)
sed -i.bak &amp;#x27;s/old/new/g&amp;#x27; file.txt      # Изменить файл, сохранив backup .bak

# Удаление строк
sed &amp;#x27;/^#/d&amp;#x27; config.txt                 # Удалить все комментарии (строки с #)
sed &amp;#x27;/^$/d&amp;#x27; file.txt                   # Удалить пустые строки
sed &amp;#x27;5d&amp;#x27; file.txt                      # Удалить 5-ю строку
sed &amp;#x27;2,4d&amp;#x27; file.txt                    # Удалить строки 2-4# Вывод конкретных строк
sed -n &amp;#x27;5p&amp;#x27; file.txt                   # Вывести только 5-ю строку
sed -n &amp;#x27;5,10p&amp;#x27; file.txt                # Строки 5-10
sed -n &amp;#x27;/error/p&amp;#x27; file.txt             # Строки содержащие &amp;quot;error&amp;quot;

# Добавление строк
sed &amp;#x27;3a\Новая строка после 3-й&amp;#x27; file.txt    # Добавить после строки 3
sed &amp;#x27;1i\Заголовок&amp;#x27; file.txt                 # Добавить перед строкой 1&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;nzWs&quot;&gt;В следующей части - &lt;strong&gt;пользователи и группы&lt;/strong&gt;: создание, управление, &lt;code&gt;/etc/passwd&lt;/code&gt;, &lt;code&gt;/etc/shadow&lt;/code&gt;, &lt;code&gt;sudo&lt;/code&gt; и всё что с этим связано. а пока держите Linux Cheatsheet — Файловая система&lt;/p&gt;
  &lt;h3 id=&quot;24vZ&quot;&gt;Навигация&lt;/h3&gt;
  &lt;figure id=&quot;yRmx&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/32/d8/32d87b02-783e-4087-8b0f-a331580ad4cf.png&quot; width=&quot;754&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;kB7e&quot;&gt;Поиск файлов&lt;/h3&gt;
  &lt;figure id=&quot;rUpP&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8d/ed/8dedec7d-9b11-4ca6-8425-ae38a9aaf0fb.png&quot; width=&quot;758&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;vRLR&quot;&gt;Работа с файлами и каталогами&lt;/h3&gt;
  &lt;figure id=&quot;kCFg&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/4d/57/4d57e3ad-ce2c-4593-9aa5-5ea9d39a1410.png&quot; width=&quot;757&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;09vG&quot;&gt;Просмотр содержимого&lt;/h3&gt;
  &lt;figure id=&quot;6XCT&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/31/06/31069673-2be4-4a50-abba-c4f266e2f291.png&quot; width=&quot;758&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;3oQn&quot;&gt;Поиск внутри файлов&lt;/h3&gt;
  &lt;figure id=&quot;9dOL&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6b/b1/6bb19944-4b74-4dda-8ed5-8eec9ae6a790.png&quot; width=&quot;759&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;VzUb&quot;&gt;Базовые команды терминала&lt;/h3&gt;
  &lt;figure id=&quot;EIc9&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6d/cb/6dcbbde4-e83d-41b9-9603-b565fe5c68c9.png&quot; width=&quot;753&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Qe6X&quot;&gt;Статья доступна на Хабе opensophy: &lt;a href=&quot;https://hub.opensophy.com/docs/linux-filesystem/&quot; target=&quot;_blank&quot;&gt;https://hub.opensophy.com/docs/linux-filesystem/&lt;/a&gt;&lt;br /&gt;Статьи, блоги и документации в первую очередь выходят и обновляются на Хабе с указанием автора и соавторов.&lt;/p&gt;
  &lt;p id=&quot;kE52&quot;&gt;автор: &lt;a href=&quot;https://habr.com/ru/users/opensophy/&quot; target=&quot;_blank&quot;&gt;@opensophy&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>dark2k:nginx_simple_site</id><link rel="alternate" type="text/html" href="https://blog.provision12.ru/nginx_simple_site?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=dark2k"></link><title>Простой сайт на nginx</title><published>2026-02-17T06:53:59.859Z</published><updated>2026-02-17T06:53:59.859Z</updated><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/28/1c/281cdd67-185c-4090-adc1-bc68b99cccf1.png&quot;&gt;Вот пошаговая инструкция по настройке сайта (виртуального хоста) на nginx.</summary><content type="html">
  &lt;figure id=&quot;ZHPl&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/28/1c/281cdd67-185c-4090-adc1-bc68b99cccf1.png&quot; width=&quot;480&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;M0LQ&quot;&gt;Вот пошаговая инструкция по настройке сайта (виртуального хоста) на &lt;strong&gt;nginx&lt;/strong&gt;.&lt;/p&gt;
  &lt;h3 id=&quot;hams&quot;&gt;Предварительные требования&lt;/h3&gt;
  &lt;ul id=&quot;cjzo&quot;&gt;
    &lt;li id=&quot;LKQk&quot;&gt;Установленный nginx (&lt;code&gt;sudo apt install nginx&lt;/code&gt; для Ubuntu/Debian).&lt;/li&gt;
    &lt;li id=&quot;a43t&quot;&gt;Ваш домен (например, &lt;code&gt;example.com&lt;/code&gt;) указывает на IP-адрес сервера.&lt;/li&gt;
    &lt;li id=&quot;vA8s&quot;&gt;Файлы вашего сайта лежат на сервере (например, в &lt;code&gt;/var/www/example.com&lt;/code&gt;).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;Wo1d&quot;&gt;Шаг 1. Структура файлов&lt;/h3&gt;
  &lt;p id=&quot;OaRX&quot;&gt;Рекомендуется хранить каждый сайт в отдельной папке. Создайте директорию для вашего проекта:&lt;/p&gt;
  &lt;p id=&quot;ZuR8&quot;&gt;bash&lt;/p&gt;
  &lt;pre id=&quot;nL4M&quot;&gt;sudo mkdir -p /var/www/example.com/html&lt;/pre&gt;
  &lt;p id=&quot;udl8&quot;&gt;Поместите туда файлы &lt;code&gt;index.html&lt;/code&gt; или &lt;code&gt;index.php&lt;/code&gt;.&lt;/p&gt;
  &lt;h3 id=&quot;5jBd&quot;&gt;Шаг 2. Права доступа&lt;/h3&gt;
  &lt;p id=&quot;fwCu&quot;&gt;Чтобы nginx мог читать файлы, нужно выдать права пользователю &lt;code&gt;www-data&lt;/code&gt; (от которого работает nginx) или просто сделать вас владельцем, а группу &lt;code&gt;www-data&lt;/code&gt; — владельцем группы.&lt;/p&gt;
  &lt;p id=&quot;iiWx&quot;&gt;bash&lt;/p&gt;
  &lt;pre id=&quot;O41O&quot;&gt;sudo chown -R $USER:$USER /var/www/example.com/html&lt;/pre&gt;
  &lt;h3 id=&quot;BHpe&quot;&gt;Шаг 3. Создание конфигурационного файла (Server Block)&lt;/h3&gt;
  &lt;p id=&quot;aGz2&quot;&gt;В nginx конфигурации сайтов (виртуальные хосты) лежат в &lt;code&gt;/etc/nginx/sites-available/&lt;/code&gt;, а ссылки на включенные сайты — в &lt;code&gt;/etc/nginx/sites-enabled/&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;n24j&quot;&gt;Создайте файл конфигурации:&lt;/p&gt;
  &lt;p id=&quot;E9EA&quot;&gt;bash&lt;/p&gt;
  &lt;pre id=&quot;LgYe&quot;&gt;sudo nano /etc/nginx/sites-available/example.com&lt;/pre&gt;
  &lt;p id=&quot;4yIO&quot;&gt;&lt;strong&gt;Пример для статического сайта (HTML):&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;Yo6y&quot;&gt;nginx&lt;/p&gt;
  &lt;pre id=&quot;eYxD&quot;&gt;server {
    listen 80;
    listen [::]:80;

    # Имя вашего сайта
    server_name example.com www.example.com;

    # Корневая папка с файлами сайта
    root /var/www/example.com/html;

    # Главный файл, который будет открываться по умолчанию
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}&lt;/pre&gt;
  &lt;p id=&quot;Qjkr&quot;&gt;&lt;strong&gt;Пример для сайта на PHP (PHP-FPM):&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;ypDF&quot;&gt;nginx&lt;/p&gt;
  &lt;pre id=&quot;fSpM&quot;&gt;server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

    root /var/www/example.com/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    # Передача запросов PHP скриптов в PHP-FPM
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # Версия PHP может отличаться
    }

    # Запрет доступа к скрытым файлам (.htaccess, .git и т.д.)
    location ~ /\.ht {
        deny all;
    }
}&lt;/pre&gt;
  &lt;h3 id=&quot;FltB&quot;&gt;Шаг 4. Активация сайта&lt;/h3&gt;
  &lt;p id=&quot;55zS&quot;&gt;Нужно создать символическую ссылку из &lt;code&gt;sites-available&lt;/code&gt; в &lt;code&gt;sites-enabled&lt;/code&gt;:&lt;/p&gt;
  &lt;p id=&quot;bqRP&quot;&gt;bash&lt;/p&gt;
  &lt;pre id=&quot;sQmZ&quot;&gt;sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/&lt;/pre&gt;
  &lt;h3 id=&quot;G075&quot;&gt;Шаг 5. Проверка конфигурации и перезапуск&lt;/h3&gt;
  &lt;p id=&quot;kYA9&quot;&gt;Всегда проверяйте конфигурацию на ошибки:&lt;/p&gt;
  &lt;p id=&quot;i833&quot;&gt;bash&lt;/p&gt;
  &lt;pre id=&quot;BYOG&quot;&gt;sudo nginx -t&lt;/pre&gt;
  &lt;p id=&quot;4Us5&quot;&gt;Если все хорошо (вывод &lt;code&gt;test is successful&lt;/code&gt;), перезапустите nginx:&lt;/p&gt;
  &lt;p id=&quot;ur9V&quot;&gt;bash&lt;/p&gt;
  &lt;pre id=&quot;uOmr&quot;&gt;sudo systemctl restart nginx&lt;/pre&gt;
  &lt;p id=&quot;wsc8&quot;&gt;Или перезагрузите конфигурацию без разрыва соединений:&lt;/p&gt;
  &lt;p id=&quot;YE8S&quot;&gt;bash&lt;/p&gt;
  &lt;pre id=&quot;x9Of&quot;&gt;sudo systemctl reload nginx&lt;/pre&gt;
  &lt;h3 id=&quot;KS18&quot;&gt;Шаг 6. Настройка HTTPS (SSL) с помощью Certbot&lt;/h3&gt;
  &lt;p id=&quot;Boa4&quot;&gt;Сейчас почти обязательно иметь SSL-сертификат. Самый простой способ — использовать &lt;strong&gt;Certbot&lt;/strong&gt;.&lt;/p&gt;
  &lt;ol id=&quot;Sn3d&quot;&gt;
    &lt;li id=&quot;EaF5&quot;&gt;Установите Certbot:bashsudo apt install certbot python3-certbot-nginx&lt;/li&gt;
    &lt;li id=&quot;eY45&quot;&gt;Запустите автоматическую настройку:bashsudo certbot --nginx -d example.com -d www.example.com&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;aQoB&quot;&gt;Certbot сам изменит вашу конфигурацию, включив HTTPS, и настроит автоматическое продление сертификата.&lt;/p&gt;
  &lt;h3 id=&quot;w7o9&quot;&gt;Где проверить результат?&lt;/h3&gt;
  &lt;p id=&quot;4l9Y&quot;&gt;Откройте браузер и перейдите по адресу &lt;code&gt;http://example.com&lt;/code&gt; (или &lt;code&gt;https://&lt;/code&gt;, если настроили SSL).&lt;/p&gt;
  &lt;p id=&quot;MAUM&quot;&gt;Если не работает, смотрите логи:&lt;/p&gt;
  &lt;p id=&quot;7JjR&quot;&gt;bash&lt;/p&gt;
  &lt;pre id=&quot;sqM7&quot;&gt;sudo tail -f /var/log/nginx/error.log&lt;/pre&gt;

</content></entry><entry><id>dark2k:h_jm4v3ZVli</id><link rel="alternate" type="text/html" href="https://blog.provision12.ru/h_jm4v3ZVli?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=dark2k"></link><title>Отключение IPv6 в Ubuntu</title><published>2026-02-16T07:12:43.694Z</published><updated>2026-02-16T07:12:43.694Z</updated><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/81/ea/81eade28-7328-4a62-ae9d-c05d18a889c8.png&quot;&gt;Первый способ решения нашей задачи, это редактирование параметров ядра во время выполнения с помощью sysctl. Для отключения IPv6 выполните:</summary><content type="html">
  &lt;figure id=&quot;j4VR&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/81/ea/81eade28-7328-4a62-ae9d-c05d18a889c8.png&quot; width=&quot;480&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Fj6k&quot;&gt;Первый способ решения нашей задачи, это редактирование параметров ядра во время выполнения с помощью sysctl. Для отключения IPv6 выполните:&lt;/p&gt;
  &lt;p id=&quot;ZEtr&quot;&gt;&lt;code&gt;sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1&lt;/code&gt;&lt;br /&gt;&lt;code&gt;sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1&lt;/code&gt;&lt;br /&gt;&lt;code&gt;sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=1&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;rMU4&quot;&gt;Вы можете также пойти другим путем и записать все эти значения в файл настройки, чтобы они применялись по умолчанию при старте системы:&lt;/p&gt;
  &lt;p id=&quot;3HyB&quot;&gt;&lt;code&gt;sudo vi /etc/sysctl.conf&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;Ny7n&quot;&gt;&lt;code&gt;net.ipv6.conf.all.disable_ipv6 = 1net.ipv6.conf.default.disable_ipv6 = 1net.ipv6.conf.lo.disable_ipv6 = 1&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;WQGD&quot;&gt;Сохраните файл, закройте его и перезапустите sysctl для обновления конфигурации:&lt;/p&gt;
  &lt;p id=&quot;jBJ8&quot;&gt;&lt;code&gt;sudo sysctl -p&lt;/code&gt;&lt;/p&gt;

</content></entry><entry><id>dark2k:ctop</id><link rel="alternate" type="text/html" href="https://blog.provision12.ru/ctop?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=dark2k"></link><title>TOP для контейнеров</title><published>2025-12-19T06:51:19.234Z</published><updated>2025-12-19T07:11:48.814Z</updated><tt:hashtag>docker</tt:hashtag><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/eb/ed/ebedc9d3-d90c-4945-8390-bf85fd526cc0.png&quot;&gt;Очень удобная программа для просмотра используемых ресурсов контейнерами - Сtop. Это прям то, что мне очень не хватало при работе с контейнерами. Я за ними всегда через htop смотрел и другие инструменты общего назначение. А в ctop все метрики собраны в одно место для каждого контейнера. Очень удобно.</summary><content type="html">
  &lt;figure id=&quot;rTD7&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/eb/ed/ebedc9d3-d90c-4945-8390-bf85fd526cc0.png&quot; width=&quot;808&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Bmyh&quot;&gt;  Очень удобная программа для просмотра используемых ресурсов контейнерами - &lt;strong&gt;Сtop&lt;/strong&gt;. Это прям то, что мне очень не хватало при работе с контейнерами. Я за ними всегда через htop смотрел и другие инструменты общего назначение. А в ctop все метрики собраны в одно место для каждого контейнера. Очень удобно.&lt;/p&gt;
  &lt;p id=&quot;SyOr&quot;&gt; Можно вообще ничего не устанавливать локально, а запустить ctop в docker, пробросив ему docker.sock.&lt;/p&gt;
  &lt;pre id=&quot;FGkH&quot;&gt;sudo docker run --rm -ti --name=ctop --volume /var/run/docker.sock:/var/run/docker.sock:ro quay.io/vektorlab/ctop:latest&lt;/pre&gt;
  &lt;p id=&quot;e0nm&quot;&gt;  Помимо непосредственно отображения используемых ресурсов, можно выбрать контейнер и быстро посмотреть его логи, остановить/перезапустить или провалиться внутрь через exec shell. Если постоянно работаете с контейнерами, то программа must have, особенно для разработчиков, которые постоянно эти контейнеры гоняют. Посоветуйте им, спасибо скажут. &lt;/p&gt;
  &lt;h2 id=&quot;PBht&quot;&gt;Альтернативные варианты запуска ctop:&lt;/h2&gt;
  &lt;ol id=&quot;OyuX&quot;&gt;
    &lt;li id=&quot;2jKK&quot;&gt;&lt;strong&gt;Как бинарный файл&lt;/strong&gt; (без Docker):&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;TITE&quot;&gt;bash&lt;/p&gt;
  &lt;pre id=&quot;lv2H&quot;&gt;sudo wget https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-linux-amd64 -O /usr/local/bin/ctop
sudo chmod +x /usr/local/bin/ctop
ctop&lt;/pre&gt;
  &lt;ol id=&quot;8HL2&quot;&gt;
    &lt;li id=&quot;n4ib&quot;&gt;&lt;strong&gt;С использованием Docker Compose&lt;/strong&gt;:&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;69s1&quot;&gt;yaml&lt;/p&gt;
  &lt;pre id=&quot;GOtI&quot;&gt;version: &amp;#x27;3&amp;#x27;
services:
  ctop:
    image: quay.io/vektorlab/ctop:latest
    container_name: ctop
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    stdin_open: true
    tty: true&lt;/pre&gt;
  &lt;p id=&quot;Qj8X&quot;&gt;Запуск: &lt;code&gt;docker-compose run --rm ctop&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;Exi9&quot;&gt;Репозиторий - https://github.com/bcicen/ctop&lt;/p&gt;
  &lt;tt-tags id=&quot;9H4m&quot;&gt;
    &lt;tt-tag name=&quot;docker&quot;&gt;#docker&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>dark2k:s3_backup</id><link rel="alternate" type="text/html" href="https://blog.provision12.ru/s3_backup?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=dark2k"></link><title>Бэкап бакета S3 YandexCloud в локальное хранилище с помощью Veeam + PowerShell скриптов</title><published>2025-12-05T14:06:01.806Z</published><updated>2025-12-05T14:06:01.806Z</updated><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/5a/c6/5ac69748-cc29-4d27-8708-5ce63c3a3222.png&quot;&gt;Этот метод обходит ограничения Veeam, создавая локальную копию S3 данных, которую Veeam уже может бэкапить.</summary><content type="html">
  &lt;figure id=&quot;EyiH&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5a/c6/5ac69748-cc29-4d27-8708-5ce63c3a3222.png&quot; width=&quot;800&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;KAU0&quot;&gt;Этот метод обходит ограничения Veeam, создавая локальную копию S3 данных, которую Veeam уже может бэкапить.&lt;/p&gt;
  &lt;h2 id=&quot;2iL4&quot;&gt;&lt;strong&gt;Полная архитектура решения&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;y9bW&quot;&gt;text&lt;/p&gt;
  &lt;pre id=&quot;gcLJ&quot;&gt;┌─────────────┐  скачивание  ┌─────────────┐  бэкап  ┌─────────────┐
│ Yandex S3   │─────────────▶│ Локальная   │─────────▶│ Veeam       │
│   бакет     │    AWS CLI   │  папка      │  Veeam  │  Repository │
└─────────────┘              └─────────────┘         └─────────────┘
       │                            │                       │
       └────────────────────────────┼───────────────────────┘
                                 PowerShell
                                 Pre-job Script&lt;/pre&gt;
  &lt;h2 id=&quot;v9OY&quot;&gt;&lt;strong&gt;Шаг 1: Подготовка окружения&lt;/strong&gt;&lt;/h2&gt;
  &lt;h3 id=&quot;t0mY&quot;&gt;&lt;strong&gt;1.1 Установка AWS CLI на Windows&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;sVPX&quot;&gt;powershell&lt;/p&gt;
  &lt;pre id=&quot;sQHH&quot;&gt;# Скачать и установить AWS CLI
# https://aws.amazon.com/cli/

# Проверить установку
aws --version

# Настройка профиля Yandex Cloud
aws configure set aws_access_key_id YOUR_KEY --profile yandex
aws configure set aws_secret_access_key YOUR_SECRET --profile yandex
aws configure set region ru-central1 --profile yandex
aws configure set s3.endpoint_url https://storage.yandexcloud.net --profile yandex&lt;/pre&gt;
  &lt;h3 id=&quot;MZjh&quot;&gt;&lt;strong&gt;1.2 Создание структуры папок&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;HotQ&quot;&gt;powershell&lt;/p&gt;
  &lt;pre id=&quot;sxJc&quot;&gt;# PowerShell - создать папки
New-Item -Path &amp;quot;C:\Backup\S3-Temp&amp;quot; -ItemType Directory -Force
New-Item -Path &amp;quot;C:\Backup\S3-Logs&amp;quot; -ItemType Directory -Force
New-Item -Path &amp;quot;C:\Scripts\Veeam&amp;quot; -ItemType Directory -Force&lt;/pre&gt;
  &lt;h2 id=&quot;sfUN&quot;&gt;&lt;strong&gt;Шаг 2: Создание PowerShell скрипта&lt;/strong&gt;&lt;/h2&gt;
  &lt;h3 id=&quot;0LZ9&quot;&gt;&lt;strong&gt;Полный скрипт с обработкой ошибок и логированием&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;YmBZ&quot;&gt;powershell&lt;/p&gt;
  &lt;pre id=&quot;e2lx&quot;&gt;# S3-Download-PreScript.ps1
# Сохранить в: C:\Scripts\Veeam\S3-Download-PreScript.ps1

param(
    [string]$JobName = $(throw &amp;quot;Job name is required&amp;quot;),
    [string]$BackupSource = $(throw &amp;quot;Backup source is required&amp;quot;)
)

# Конфигурация
$Config = @{
    BucketName = &amp;quot;ваш-бакет&amp;quot;
    LocalPath = &amp;quot;C:\Backup\S3-Temp&amp;quot;
    LogPath = &amp;quot;C:\Backup\S3-Logs\$(Get-Date -Format &amp;#x27;yyyy-MM-dd&amp;#x27;)-sync.log&amp;quot;
    MaxRetries = 3
    RetryDelay = 30 # секунды
    AWSProfile = &amp;quot;yandex&amp;quot;
    ExcludePatterns = @(&amp;quot;*.tmp&amp;quot;, &amp;quot;*.temp&amp;quot;, &amp;quot;*.log&amp;quot;, &amp;quot;Thumbs.db&amp;quot;)
}

# Функция логирования
function Write-Log {
    param([string]$Message, [string]$Level = &amp;quot;INFO&amp;quot;)
    $Timestamp = Get-Date -Format &amp;quot;yyyy-MM-dd HH:mm:ss&amp;quot;
    $LogMessage = &amp;quot;$Timestamp [$Level] $Message&amp;quot;
    Add-Content -Path $Config.LogPath -Value $LogMessage
    Write-Host $LogMessage
}

# Функция скачивания с повторами
function Sync-S3Bucket {
    param([int]$RetryCount = 0)
    
    try {
        Write-Log &amp;quot;Начало синхронизации S3 бакета: $($Config.BucketName)&amp;quot;
        Write-Log &amp;quot;Целевая папка: $($Config.LocalPath)&amp;quot;
        
        # Формирование команды AWS CLI
        $ExcludeArgs = $Config.ExcludePatterns | ForEach-Object { &amp;quot;--exclude &amp;#x60;&amp;quot;$_&amp;#x60;&amp;quot;&amp;quot; }
        $ExcludeString = $ExcludeArgs -join &amp;quot; &amp;quot;
        
        $Command = &amp;quot;aws s3 sync s3://$($Config.BucketName) &amp;#x60;&amp;quot;$($Config.LocalPath)&amp;#x60;&amp;quot; &amp;quot; +
                   &amp;quot;--endpoint-url https://storage.yandexcloud.net &amp;quot; +
                   &amp;quot;--profile $($Config.AWSProfile) &amp;quot; +
                   &amp;quot;--no-progress &amp;quot; +
                   $ExcludeString
        
        Write-Log &amp;quot;Выполнение команды: $Command&amp;quot;
        
        # Выполнение команды
        $Result = Invoke-Expression $Command
        
        # Проверка результата
        if ($LASTEXITCODE -eq 0) {
            Write-Log &amp;quot;Синхронизация успешно завершена&amp;quot;
            
            # Сбор статистики
            $FileCount = (Get-ChildItem -Path $Config.LocalPath -Recurse -File | Measure-Object).Count
            $TotalSize = (Get-ChildItem -Path $Config.LocalPath -Recurse -File | Measure-Object -Property Length -Sum).Sum
            $SizeMB = [math]::Round($TotalSize / 1MB, 2)
            
            Write-Log &amp;quot;Статистика: $FileCount файлов, $SizeMB MB&amp;quot;
            return $true
        } else {
            throw &amp;quot;AWS CLI вернул ошибку: $LASTEXITCODE&amp;quot;
        }
    }
    catch {
        Write-Log &amp;quot;Ошибка при синхронизации: $_&amp;quot; -Level &amp;quot;ERROR&amp;quot;
        
        if ($RetryCount -lt $Config.MaxRetries) {
            Write-Log &amp;quot;Повторная попытка через $($Config.RetryDelay) секунд (попытка $($RetryCount + 1) из $($Config.MaxRetries))&amp;quot;
            Start-Sleep -Seconds $Config.RetryDelay
            return Sync-S3Bucket -RetryCount ($RetryCount + 1)
        } else {
            Write-Log &amp;quot;Превышено максимальное количество попыток&amp;quot; -Level &amp;quot;ERROR&amp;quot;
            return $false
        }
    }
}

# Функция очистки старых файлов
function Cleanup-OldFiles {
    param([int]$DaysToKeep = 7)
    
    try {
        Write-Log &amp;quot;Очистка файлов старше $DaysToKeep дней&amp;quot;
        
        $CutoffDate = (Get-Date).AddDays(-$DaysToKeep)
        $OldFiles = Get-ChildItem -Path $Config.LocalPath -Recurse -File | 
                    Where-Object { $_.LastWriteTime -lt $CutoffDate }
        
        $DeletedCount = 0
        foreach ($File in $OldFiles) {
            try {
                Remove-Item -Path $File.FullName -Force
                $DeletedCount++
            }
            catch {
                Write-Log &amp;quot;Не удалось удалить файл $($File.FullName): $_&amp;quot; -Level &amp;quot;WARNING&amp;quot;
            }
        }
        
        Write-Log &amp;quot;Удалено файлов: $DeletedCount&amp;quot;
        return $true
    }
    catch {
        Write-Log &amp;quot;Ошибка при очистке: $_&amp;quot; -Level &amp;quot;ERROR&amp;quot;
        return $false
    }
}

# Функция проверки свободного места
function Check-DiskSpace {
    param([string]$Path, [long]$RequiredSpaceMB = 1024)
    
    try {
        $Drive = (Get-Item $Path).Root.Name
        $DriveInfo = Get-PSDrive -Name $Drive.Substring(0,1)
        
        $FreeSpaceMB = [math]::Round($DriveInfo.Free / 1MB, 2)
        $RequiredSpaceFormatted = [math]::Round($RequiredSpaceMB, 2)
        
        Write-Log &amp;quot;Свободное место на диске $Drive : $FreeSpaceMB MB&amp;quot;
        
        if ($FreeSpaceMB -lt $RequiredSpaceMB) {
            Write-Log &amp;quot;ВНИМАНИЕ: Свободного места ($FreeSpaceMB MB) меньше требуемого ($RequiredSpaceFormatted MB)&amp;quot; -Level &amp;quot;WARNING&amp;quot;
            return $false
        }
        
        return $true
    }
    catch {
        Write-Log &amp;quot;Ошибка при проверке места на диске: $_&amp;quot; -Level &amp;quot;ERROR&amp;quot;
        return $false
    }
}

# Основной поток выполнения
try {
    Write-Log &amp;quot;========================================&amp;quot;
    Write-Log &amp;quot;Начало выполнения pre-job скрипта&amp;quot;
    Write-Log &amp;quot;Job Name: $JobName&amp;quot;
    Write-Log &amp;quot;Backup Source: $BackupSource&amp;quot;
    Write-Log &amp;quot;========================================&amp;quot;
    
    # 1. Проверка свободного места (минимум 10GB)
    if (-not (Check-DiskSpace -Path $Config.LocalPath -RequiredSpaceMB 10240)) {
        throw &amp;quot;Недостаточно свободного места на диске&amp;quot;
    }
    
    # 2. Синхронизация S3 бакета
    $SyncResult = Sync-S3Bucket
    if (-not $SyncResult) {
        throw &amp;quot;Синхронизация S3 не удалась&amp;quot;
    }
    
    # 3. Очистка старых файлов
    Cleanup-OldFiles -DaysToKeep 7
    
    # 4. Проверка, что файлы доступны для Veeam
    $TestFileCount = (Get-ChildItem -Path $Config.LocalPath -File -Recurse | Select-Object -First 10).Count
    if ($TestFileCount -eq 0) {
        Write-Log &amp;quot;ВНИМАНИЕ: В целевой папке нет файлов&amp;quot; -Level &amp;quot;WARNING&amp;quot;
    }
    
    Write-Log &amp;quot;Pre-job скрипт успешно завершен&amp;quot;
    exit 0
}
catch {
    Write-Log &amp;quot;Критическая ошибка в pre-job скрипте: $_&amp;quot; -Level &amp;quot;ERROR&amp;quot;
    exit 1
}&lt;/pre&gt;
  &lt;h2 id=&quot;uiT2&quot;&gt;&lt;strong&gt;Шаг 3: Создание задания Veeam Backup Job&lt;/strong&gt;&lt;/h2&gt;
  &lt;h3 id=&quot;bdB8&quot;&gt;&lt;strong&gt;3.1 Настройка через Veeam Backup &amp;amp; Replication Console&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;ggrl&quot;&gt;text&lt;/p&gt;
  &lt;pre id=&quot;95cX&quot;&gt;1. Открыть Veeam Console
2. Backup Job → File Share → Microsoft Windows
3. Имя задания: &amp;quot;Yandex-S3-Backup&amp;quot;
4. На вкладке &amp;quot;Files and Folders&amp;quot;:
   - Добавить → C:\Backup\S3-Temp
   - Исключить: *.tmp, *.log (дополнительно к скрипту)
5. На вкладке &amp;quot;Storage&amp;quot;:
   - Repository: выберите локальный репозиторий
   - Retention policy: 30 restore points
   - Compression: Optimal
   - Deduplication: Enable (если есть)
6. На вкладке &amp;quot;Advanced&amp;quot;:
   - Ссылка на скрипты → Scripts
   - Add pre-job script
   - Путь: C:\Scripts\Veeam\S3-Download-PreScript.ps1
   - Аргументы: -JobName &amp;quot;{JobName}&amp;quot; -BackupSource &amp;quot;{Source}&amp;quot;
7. На вкладке &amp;quot;Schedule&amp;quot;:
   - Enable schedule
   - Daily at 02:00 AM
   - Days: Monday-Friday&lt;/pre&gt;
  &lt;h3 id=&quot;KuTl&quot;&gt;&lt;strong&gt;3.2 Параметры скрипта в Veeam&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;TuPT&quot;&gt;powershell&lt;/p&gt;
  &lt;pre id=&quot;fmn2&quot;&gt;# Veeam передает параметры в скрипт:
# {JobName} - имя задания Veeam
# {Source} - источник бэкапа
# {Target} - целевой репозиторий
# {ResultDir} - директория с результатами

# В нашем скрипте используем:
- JobName &amp;quot;{JobName}&amp;quot; 
- BackupSource &amp;quot;{Source}&amp;quot;&lt;/pre&gt;
  &lt;h2 id=&quot;TeM4&quot;&gt;&lt;strong&gt;Шаг 4: Дополнительные скрипты&lt;/strong&gt;&lt;/h2&gt;
  &lt;h3 id=&quot;Fyje&quot;&gt;&lt;strong&gt;Post-job скрипт для очистки&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;HuH9&quot;&gt;powershell&lt;/p&gt;
  &lt;pre id=&quot;ZUTo&quot;&gt;# S3-Cleanup-PostScript.ps1
# Выполняется ПОСЛЕ успешного бэкапа Veeam

param(
    [string]$JobName,
    [string]$BackupSource,
    [string]$ResultDir
)

$Config = @{
    LocalPath = &amp;quot;C:\Backup\S3-Temp&amp;quot;
    LogPath = &amp;quot;C:\Backup\S3-Logs\$(Get-Date -Format &amp;#x27;yyyy-MM-dd&amp;#x27;)-cleanup.log&amp;quot;
    DaysToKeepInTemp = 3
}

function Write-Log {
    param([string]$Message, [string]$Level = &amp;quot;INFO&amp;quot;)
    $Timestamp = Get-Date -Format &amp;quot;yyyy-MM-dd HH:mm:ss&amp;quot;
    $LogMessage = &amp;quot;$Timestamp [$Level] $Message&amp;quot;
    Add-Content -Path $Config.LogPath -Value $LogMessage
}

try {
    Write-Log &amp;quot;Начало post-job очистки&amp;quot;
    Write-Log &amp;quot;Задание: $JobName&amp;quot;
    
    # Очистка временных файлов старше N дней
    $CutoffDate = (Get-Date).AddDays(-$Config.DaysToKeepInTemp)
    $FilesToDelete = Get-ChildItem -Path $Config.LocalPath -Recurse -File | 
                     Where-Object { $_.LastWriteTime -lt $CutoffDate }
    
    $DeletedCount = 0
    $FailedCount = 0
    
    foreach ($File in $FilesToDelete) {
        try {
            Remove-Item -Path $File.FullName -Force
            $DeletedCount++
        }
        catch {
            Write-Log &amp;quot;Не удалось удалить $($File.FullName): $_&amp;quot; -Level &amp;quot;WARNING&amp;quot;
            $FailedCount++
        }
    }
    
    Write-Log &amp;quot;Удалено файлов: $DeletedCount, не удалось: $FailedCount&amp;quot;
    
    # Отправка отчета (опционально)
    if (Test-Path &amp;quot;$PSScriptRoot\Send-EmailReport.ps1&amp;quot;) {
        &amp;amp; &amp;quot;$PSScriptRoot\Send-EmailReport.ps1&amp;quot; -JobName $JobName -Deleted $DeletedCount
    }
    
    Write-Log &amp;quot;Post-job скрипт завершен&amp;quot;
    exit 0
}
catch {
    Write-Log &amp;quot;Ошибка в post-job скрипте: $_&amp;quot; -Level &amp;quot;ERROR&amp;quot;
    exit 1
}&lt;/pre&gt;
  &lt;h3 id=&quot;hTPb&quot;&gt;&lt;strong&gt;Скрипт для уведомлений&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;vkFD&quot;&gt;powershell&lt;/p&gt;
  &lt;pre id=&quot;jeX5&quot;&gt;# Send-EmailReport.ps1
param(
    [string]$JobName,
    [int]$FilesDownloaded = 0,
    [int]$FilesDeleted = 0
)

$SmtpServer = &amp;quot;smtp.yandex.ru&amp;quot;
$SmtpPort = 587
$From = &amp;quot;backup@yourdomain.com&amp;quot;
$To = &amp;quot;admin@yourdomain.com&amp;quot;
$Credential = Get-Credential

$Body = @&amp;quot;
Отчет о бэкапе S3 бакета

Задание: $JobName
Время: $(Get-Date -Format &amp;#x27;yyyy-MM-dd HH:mm:ss&amp;#x27;)
Статус: УСПЕШНО

Статистика:
- Файлов скачано из S3: $FilesDownloaded
- Файлов очищено: $FilesDeleted
- Дисковое пространство: $((Get-PSDrive C).Free / 1GB) GB свободно

Лог файл: C:\Backup\S3-Logs\$(Get-Date -Format &amp;#x27;yyyy-MM-dd&amp;#x27;)-sync.log
&amp;quot;@

Send-MailMessage &amp;#x60;
    -From $From &amp;#x60;
    -To $To &amp;#x60;
    -Subject &amp;quot;[Backup] S3 Backup Report - $JobName&amp;quot; &amp;#x60;
    -Body $Body &amp;#x60;
    -SmtpServer $SmtpServer &amp;#x60;
    -Port $SmtpPort &amp;#x60;
    -UseSsl &amp;#x60;
    -Credential $Credential&lt;/pre&gt;
  &lt;h2 id=&quot;yM3M&quot;&gt;&lt;strong&gt;Шаг 5: Настройка прав и безопасности&lt;/strong&gt;&lt;/h2&gt;
  &lt;h3 id=&quot;gs9x&quot;&gt;&lt;strong&gt;5.1 Сервисная учетная запись&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;shlz&quot;&gt;powershell&lt;/p&gt;
  &lt;pre id=&quot;28NM&quot;&gt;# Создание учетной записи для Veeam
$Password = ConvertTo-SecureString &amp;quot;ComplexPassword123!&amp;quot; -AsPlainText -Force
New-LocalUser -Name &amp;quot;VeeamS3Backup&amp;quot; -Password $Password -FullName &amp;quot;Veeam S3 Backup Service&amp;quot; -Description &amp;quot;Service account for S3 backups&amp;quot;

# Добавление в группу
Add-LocalGroupMember -Group &amp;quot;Administrators&amp;quot; -Member &amp;quot;VeeamS3Backup&amp;quot;

# Настройка Veeam для использования этой учетной записи
# В свойствах задания Veeam → Advanced → Account&lt;/pre&gt;
  &lt;h3 id=&quot;dbuZ&quot;&gt;&lt;strong&gt;5.2 Безопасное хранение credentials&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;HKjW&quot;&gt;powershell&lt;/p&gt;
  &lt;pre id=&quot;FeIh&quot;&gt;# Вариант 1: Windows Credential Manager
cmdkey /add:storage.yandexcloud.net /user:access_key /pass:secret_key

# Вариант 2: Зашифрованный файл
$Credential = Get-Credential
$Credential | Export-Clixml -Path &amp;quot;C:\Secure\aws-creds.xml&amp;quot;

# В скрипте используем:
$Credential = Import-Clixml -Path &amp;quot;C:\Secure\aws-creds.xml&amp;quot;&lt;/pre&gt;
  &lt;h2 id=&quot;fVJC&quot;&gt;&lt;strong&gt;Шаг 6: Мониторинг и отчетность&lt;/strong&gt;&lt;/h2&gt;
  &lt;h3 id=&quot;BpSK&quot;&gt;&lt;strong&gt;Скрипт для проверки статуса&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;7xpM&quot;&gt;powershell&lt;/p&gt;
  &lt;pre id=&quot;CU1X&quot;&gt;# Check-BackupStatus.ps1
$VeeamServer = &amp;quot;localhost&amp;quot;
$JobName = &amp;quot;Yandex-S3-Backup&amp;quot;

# Получение статуса из Veeam
# (Требуется Veeam PowerShell Module)
Import-Module Veeam.Backup.PowerShell

$Job = Get-VBRJob -Name $JobName
$LastSession = $Job.FindLastSession()

$Status = @{
    JobName = $Job.Name
    LastRun = $LastSession.CreationTime
    Result = $LastSession.Result
    ProcessedFiles = $LastSession.GetTaskSessions().Progress.ProcessedObjects
    ReadBytes = [math]::Round($LastSession.Progress.ReadSize / 1GB, 2)
    TransferredBytes = [math]::Round($LastSession.Progress.TransferedSize / 1GB, 2)
}

ConvertTo-Json $Status&lt;/pre&gt;
  &lt;h3 id=&quot;d523&quot;&gt;&lt;strong&gt;Интеграция с системным мониторингом&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;TW6v&quot;&gt;powershell&lt;/p&gt;
  &lt;pre id=&quot;wX7Q&quot;&gt;# Для Zabbix/PRTG
$HealthFile = &amp;quot;C:\Backup\S3-Temp\.health&amp;quot;
$LastSync = (Get-ChildItem $HealthFile -ErrorAction SilentlyContinue).LastWriteTime

if ((Get-Date) - $LastSync -gt [TimeSpan]::FromHours(24)) {
    Write-Host &amp;quot;0&amp;quot;  # Проблема
} else {
    Write-Host &amp;quot;1&amp;quot;  # OK
}&lt;/pre&gt;
  &lt;h2 id=&quot;cE0F&quot;&gt;&lt;strong&gt;Шаг 7: Оптимизация производительности&lt;/strong&gt;&lt;/h2&gt;
  &lt;h3 id=&quot;o3Sv&quot;&gt;&lt;strong&gt;7.1 Настройка AWS CLI&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;wuvs&quot;&gt;ini&lt;/p&gt;
  &lt;pre id=&quot;wh3X&quot;&gt;# C:\Users\Username\.aws\config
[profile yandex]
region = ru-central1
s3 =
    max_concurrent_requests = 20
    max_queue_size = 10000
    multipart_threshold = 64MB
    multipart_chunksize = 16MB&lt;/pre&gt;
  &lt;h3 id=&quot;tWCL&quot;&gt;&lt;strong&gt;7.2 Оптимизация Veeam&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;NUDg&quot;&gt;text&lt;/p&gt;
  &lt;pre id=&quot;DwZi&quot;&gt;В настройках задания Veeam:
- Storage → Advanced → Performance:
  * Compression level: Optimal
  * Storage optimization: LAN target
  * Enable inline deduplication: Yes
  
- Processing → Advanced → Advanced settings:
  * Enable CBT: Yes
  * Changed block tracking: Enable
  
- Maintenance:
  * Perform backup files health check: Monthly
  * Defragment and compact full backup file: Weekly&lt;/pre&gt;
  &lt;h2 id=&quot;cB6M&quot;&gt;&lt;strong&gt;Проблемы и решения&lt;/strong&gt;&lt;/h2&gt;
  &lt;h3 id=&quot;0tVY&quot;&gt;&lt;strong&gt;Проблема 1: Таймауты при скачивании&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;ubyn&quot;&gt;powershell&lt;/p&gt;
  &lt;pre id=&quot;M8lV&quot;&gt;# В скрипте добавляем параметры:
$Command = &amp;quot;aws s3 sync ... &amp;quot; +
           &amp;quot;--cli-read-timeout 600 &amp;quot; +
           &amp;quot;--cli-connect-timeout 300 &amp;quot; +
           &amp;quot;--cli-read-timeout 0 &amp;quot;&lt;/pre&gt;
  &lt;h3 id=&quot;5xw1&quot;&gt;&lt;strong&gt;Проблема 2: Нехватка места на диске&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;J9EY&quot;&gt;powershell&lt;/p&gt;
  &lt;pre id=&quot;wxVy&quot;&gt;# Автоматическая очистка по квоте
$QuotaGB = 100
$CurrentSizeGB = [math]::Round((Get-ChildItem $Config.LocalPath -Recurse | Measure-Object -Property Length -Sum).Sum / 1GB, 2)

if ($CurrentSizeGB -gt $QuotaGB) {
    # Удаляем самые старые файлы
    Get-ChildItem $Config.LocalPath -Recurse -File | 
        Sort-Object LastWriteTime |
        Select-Object -First 100 |
        Remove-Item -Force
}&lt;/pre&gt;
  &lt;h3 id=&quot;Xm0E&quot;&gt;&lt;strong&gt;Проблема 3: Конфликты блокировок файлов&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;PbfZ&quot;&gt;powershell&lt;/p&gt;
  &lt;pre id=&quot;yMJj&quot;&gt;# Проверка на заблокированные файлы
$LockedFiles = Get-ChildItem $Config.LocalPath -Recurse -File | 
               Where-Object { 
                   try { [IO.File]::Open($_.FullName, &amp;#x27;Open&amp;#x27;, &amp;#x27;Read&amp;#x27;, &amp;#x27;None&amp;#x27;) } 
                   catch { $true } 
               }

if ($LockedFiles) {
    Write-Log &amp;quot;Найдены заблокированные файлы: $($LockedFiles.Count)&amp;quot; -Level &amp;quot;WARNING&amp;quot;
}&lt;/pre&gt;
  &lt;h2 id=&quot;GhE1&quot;&gt;&lt;strong&gt;Полная автоматизация через Task Scheduler&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;cquo&quot;&gt;Если нужно независимое от Veeam расписание:&lt;/p&gt;
  &lt;p id=&quot;NJkN&quot;&gt;powershell&lt;/p&gt;
  &lt;pre id=&quot;jeOX&quot;&gt;# Создание задачи в планировщике
$Action = New-ScheduledTaskAction -Execute &amp;quot;PowerShell.exe&amp;quot; &amp;#x60;
    -Argument &amp;quot;-NoProfile -ExecutionPolicy Bypass -File &amp;#x60;&amp;quot;C:\Scripts\Veeam\S3-Sync-Standalone.ps1&amp;#x60;&amp;quot;&amp;quot;

$Trigger = New-ScheduledTaskTrigger -Daily -At 1:30AM
$Principal = New-ScheduledTaskPrincipal -UserId &amp;quot;VeeamS3Backup&amp;quot; -LogonType Password -RunLevel Highest
$Settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries

Register-ScheduledTask -TaskName &amp;quot;S3-Sync-PreVeeam&amp;quot; &amp;#x60;
    -Action $Action &amp;#x60;
    -Trigger $Trigger &amp;#x60;
    -Principal $Principal &amp;#x60;
    -Settings $Settings&lt;/pre&gt;
  &lt;h2 id=&quot;ANnD&quot;&gt;&lt;strong&gt;Итоговая структура файлов&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;Q4uw&quot;&gt;text&lt;/p&gt;
  &lt;pre id=&quot;XqcZ&quot;&gt;C:\
├── Scripts\
│   └── Veeam\
│       ├── S3-Download-PreScript.ps1      # Основной скрипт
│       ├── S3-Cleanup-PostScript.ps1      # Скрипт очистки
│       ├── Send-EmailReport.ps1           # Уведомления
│       └── Check-BackupStatus.ps1         # Мониторинг
├── Backup\
│   ├── S3-Temp\                           # Временная копия S3
│   │   ├── file1.jpg
│   │   └── folder\
│   ├── S3-Logs\                           # Логи синхронизации
│   │   ├── 2024-01-15-sync.log
│   │   └── 2024-01-15-cleanup.log
│   └── VeeamRepository\                   # Репозиторий Veeam
└── Secure\
    └── aws-creds.xml                      # Зашифрованные ключи&lt;/pre&gt;
  &lt;h2 id=&quot;1tqD&quot;&gt;&lt;strong&gt;Преимущества и недостатки этого подхода&lt;/strong&gt;&lt;/h2&gt;
  &lt;h3 id=&quot;muGc&quot;&gt;&lt;strong&gt;✅ Преимущества:&lt;/strong&gt;&lt;/h3&gt;
  &lt;ul id=&quot;mGn5&quot;&gt;
    &lt;li id=&quot;N6Hf&quot;&gt;Использует существующие инвестиции в Veeam&lt;/li&gt;
    &lt;li id=&quot;DEm1&quot;&gt;Централизованное управление и мониторинг&lt;/li&gt;
    &lt;li id=&quot;ZCVN&quot;&gt;Дедупликация и компрессия Veeam&lt;/li&gt;
    &lt;li id=&quot;u35Z&quot;&gt;Retention policies Veeam&lt;/li&gt;
    &lt;li id=&quot;zFRU&quot;&gt;Интеграция с другими системами бэкапа&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;c8RV&quot;&gt;&lt;strong&gt;❌ Недостатки:&lt;/strong&gt;&lt;/h3&gt;
  &lt;ul id=&quot;VUAD&quot;&gt;
    &lt;li id=&quot;3dNp&quot;&gt;Двойное хранение данных (временная копия)&lt;/li&gt;
    &lt;li id=&quot;bewO&quot;&gt;Сложность настройки&lt;/li&gt;
    &lt;li id=&quot;amie&quot;&gt;Зависимость от AWS CLI&lt;/li&gt;
    &lt;li id=&quot;hzAm&quot;&gt;Нет инкрементального скачивания S3→Local&lt;/li&gt;
    &lt;li id=&quot;m0N5&quot;&gt;Требует места для временной копии&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;4aFj&quot;&gt;&lt;strong&gt;📊 Когда использовать:&lt;/strong&gt;&lt;/h3&gt;
  &lt;ul id=&quot;vbDu&quot;&gt;
    &lt;li id=&quot;8muB&quot;&gt;Уже есть Veeam Enterprise Plus&lt;/li&gt;
    &lt;li id=&quot;ytc8&quot;&gt;Нужна интеграция с существующей инфраструктурой&lt;/li&gt;
    &lt;li id=&quot;1cbU&quot;&gt;Требуется дедупликация для экономии места&lt;/li&gt;
    &lt;li id=&quot;MErl&quot;&gt;Важен централизованный мониторинг&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;7kXW&quot;&gt;&lt;strong&gt;🚫 Когда НЕ использовать:&lt;/strong&gt;&lt;/h3&gt;
  &lt;ul id=&quot;ee1V&quot;&gt;
    &lt;li id=&quot;xjPK&quot;&gt;Только задача S3→Local (overkill)&lt;/li&gt;
    &lt;li id=&quot;3kgx&quot;&gt;Мало места для временной копии&lt;/li&gt;
    &lt;li id=&quot;xN6f&quot;&gt;Нет навыков PowerShell&lt;/li&gt;
    &lt;li id=&quot;9cue&quot;&gt;Нужна реальная синхронизация (не по расписанию)&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>dark2k:ideco_cert_trouble</id><link rel="alternate" type="text/html" href="https://blog.provision12.ru/ideco_cert_trouble?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=dark2k"></link><title>Перезапуск службы ideco-cert-backend на Ideco, если вдруг выдает неверные сертификаты</title><published>2025-12-03T09:53:19.479Z</published><updated>2025-12-30T06:54:50.257Z</updated><summary type="html">В терминале Ideco запустить:</summary><content type="html">
  &lt;p id=&quot;q9Os&quot;&gt;В Фаерволе отключить правило Input на запрет не Российских IP (видимо мешеат работе службы Let’s Encrypt).&lt;/p&gt;
  &lt;p id=&quot;N6Q0&quot;&gt;В терминале Ideco запустить:&lt;/p&gt;
  &lt;pre id=&quot;8Gil&quot;&gt;systemctl restart ideco-cert-backend.service&lt;/pre&gt;
  &lt;p id=&quot;Z9t3&quot;&gt;далее в оснастке Сертификаты - перевыпустить сертификат, выпустится рабочий серт от Let’s Encrypt&lt;/p&gt;
  &lt;p id=&quot;C7Nq&quot;&gt;После этого обратно включить правило в Фаерволе.&lt;/p&gt;

</content></entry><entry><id>dark2k:node_exporter</id><link rel="alternate" type="text/html" href="https://blog.provision12.ru/node_exporter?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=dark2k"></link><title>Установка Node Exporter и интеграция с Prometheus для мониторинга сервера</title><published>2025-12-03T09:16:04.113Z</published><updated>2025-12-03T09:48:41.707Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/32/f1/32f10086-5cf5-4e06-8874-4b6eb36ad544.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://adminvps.ru/blog/wp-content/uploads/2025/05/ustanovka-node-exporter-i-integraciya-s-prometheus-dlya-monitoringa-servera-scaled.webp&quot;&gt;Содержание</summary><content type="html">
  &lt;figure id=&quot;7LdH&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://adminvps.ru/blog/wp-content/uploads/2025/05/ustanovka-node-exporter-i-integraciya-s-prometheus-dlya-monitoringa-servera-scaled.webp&quot; width=&quot;1125&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Vf1L&quot;&gt;Содержание&lt;/p&gt;
  &lt;ul id=&quot;23yO&quot;&gt;
    &lt;li id=&quot;g45a&quot;&gt;&lt;a href=&quot;https://adminvps.ru/blog/ustanovka-node-exporter-i-integracziya-s-prometheus-dlya-monitoringa-servera/#%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_Node_Exporter_%D0%B8_%D0%BF%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0_%D1%81%D1%80%D0%B5%D0%B4%D1%8B&quot; target=&quot;_blank&quot;&gt;Установка Node Exporter и подготовка среды&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;w1tS&quot;&gt;&lt;a href=&quot;https://adminvps.ru/blog/ustanovka-node-exporter-i-integracziya-s-prometheus-dlya-monitoringa-servera/#%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F_%D0%B8_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BF%D1%80%D0%B0%D0%B2&quot; target=&quot;_blank&quot;&gt;Создание системного пользователя и настройка прав &lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;GKA9&quot;&gt;&lt;a href=&quot;https://adminvps.ru/blog/ustanovka-node-exporter-i-integracziya-s-prometheus-dlya-monitoringa-servera/#%D0%97%D0%B0%D0%BF%D1%83%D1%81%D0%BA_Node_Exporter&quot; target=&quot;_blank&quot;&gt;Запуск Node Exporter&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;ubAk&quot;&gt;&lt;a href=&quot;https://adminvps.ru/blog/ustanovka-node-exporter-i-integracziya-s-prometheus-dlya-monitoringa-servera/#%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B&quot; target=&quot;_blank&quot;&gt;Проверка работы&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;8k5c&quot;&gt;&lt;a href=&quot;https://adminvps.ru/blog/ustanovka-node-exporter-i-integracziya-s-prometheus-dlya-monitoringa-servera/#%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D1%81_Prometheus&quot; target=&quot;_blank&quot;&gt;Интеграция с Prometheus&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;ki2z&quot;&gt;&lt;a href=&quot;https://adminvps.ru/blog/ustanovka-node-exporter-i-integracziya-s-prometheus-dlya-monitoringa-servera/#%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8&quot; target=&quot;_blank&quot;&gt;Дополнительные настройки&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;loV3&quot;&gt;&lt;a href=&quot;https://adminvps.ru/blog/ustanovka-node-exporter-i-integracziya-s-prometheus-dlya-monitoringa-servera/#%D0%97%D0%B0%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&quot; target=&quot;_blank&quot;&gt;Заключение&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;Zzle&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://adminvps.ru/blog/wp-content/uploads/2025/05/prometheus-logo.webp&quot; width=&quot;320&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;VtGf&quot;&gt;Хотите узнать, как ваш VPS расходует ресурсы? Вам поможет связка &lt;strong&gt;Node Exporter&lt;/strong&gt; + &lt;strong&gt;Prometheus&lt;/strong&gt; + &lt;strong&gt;Grafana&lt;/strong&gt;. В этой статье рассказываем, как установить Node Exporter, настроить сбор метрик CPU, памяти и дисков, а также как интегрировать его с Prometheus.&lt;/p&gt;
  &lt;p id=&quot;9Cdz&quot;&gt;&lt;strong&gt;Node Exporter&lt;/strong&gt; — ключевой компонент в экосистеме Prometheus, которая преобразует показатели работы сервера в наглядные метрики. Без него невозможно получить данные о загрузке процессора, оперативной памяти, состоянии дисков или сетевых интерфейсов. Мы разберём, как развернуть Node Exporter на VPS, подключить его к Prometheus и начать сбор данных для последующего анализа.&lt;/p&gt;
  &lt;p id=&quot;j2TT&quot;&gt;Мониторинг ресурсов особенно важен на серверах, где объём доступной оперативной памяти, процессорное время и дисковая нагрузка жёстко ограничены. Даже незначительный всплеск активности одного из сервисов может повлиять на стабильность всей системы. Поэтому своевременный мониторинг VPS — это обязательное условие стабильной работы для любого, кто хочет держать сервер под контролем.&lt;/p&gt;
  &lt;p id=&quot;XTAn&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;qgcs&quot;&gt;Установка Node Exporter и подготовка среды&lt;/h2&gt;
  &lt;p id=&quot;rQtN&quot;&gt;Node Exporter распространяется в виде готового бинарника, что упрощает установку. Начнём с загрузки архива с &lt;a href=&quot;https://github.com/prometheus/node_exporter&quot; target=&quot;_blank&quot;&gt;официального GitHub-репозитория&lt;/a&gt;. На момент написания статьи актуальной является версия 1.9.1, но перед началом работы проверьте страницу релизов, чтобы выбрать свежую сборку.&lt;/p&gt;
  &lt;p id=&quot;nBVm&quot;&gt;Откройте терминал и скачайте архив с помощью &lt;strong&gt;wget &amp;lt;ссылка&amp;gt;&lt;/strong&gt; или &lt;strong&gt;curl -LO &amp;lt;ссылка&amp;gt;&lt;/strong&gt;, затем распакуйте его:&lt;/p&gt;
  &lt;pre id=&quot;clhf&quot;&gt;tar xvf node_exporter-*.tar.gz  &lt;/pre&gt;
  &lt;p id=&quot;HM1u&quot;&gt;Флаг &lt;strong&gt;-x&lt;/strong&gt; активирует извлечение файлов, &lt;strong&gt;-v&lt;/strong&gt; выводит список всех файлов, которые обрабатываются, &lt;strong&gt;-f&lt;/strong&gt; указывает на архив. После выполнения появится папка &lt;strong&gt;node_exporter-*&lt;/strong&gt; с бинарным файлом приложения внутри (в названии папки будет версия, которую вы скачали).&lt;/p&gt;
  &lt;p id=&quot;89ln&quot;&gt;Перенесите папку с бинарником в &lt;strong&gt;/usr/local/bin&lt;/strong&gt; — стандартный каталог для пользовательских программ. Файлы в этой директории доступны всем пользователям системы, а путь &lt;strong&gt;/usr/local/bin&lt;/strong&gt; присутствует в переменной окружения &lt;strong&gt;$PATH&lt;/strong&gt; по умолчанию, что позволяет запускать Node Exporter из любого места.&lt;/p&gt;
  &lt;h2 id=&quot;sdpL&quot;&gt;Создание системного пользователя и настройка прав&lt;/h2&gt;
  &lt;p id=&quot;YgAy&quot;&gt;Запускать Node Exporter от имени &lt;strong&gt;root &lt;/strong&gt;нельзя, это может привести к уязвимостям в системе безопасности. Поэтому создадим изолированного пользователя без права входить в систему:&lt;/p&gt;
  &lt;pre id=&quot;1S93&quot;&gt;sudo useradd --no-create-home --shell /bin/false &amp;lt;имя_пользователя&amp;gt;  &lt;/pre&gt;
  &lt;p id=&quot;8HTo&quot;&gt;Эта команда также отключит создание домашней директории, которая не требуется для фоновой службы, и заблокирует вход под этим пользователем через SSH или консоль.&lt;/p&gt;
  &lt;p id=&quot;ZIb0&quot;&gt;Назначьте права на бинарный файл:&lt;/p&gt;
  &lt;pre id=&quot;94v2&quot;&gt;sudo chown &amp;lt;имя_пользователя&amp;gt;:&amp;lt;группа&amp;gt; /usr/local/bin/node_exporter  &lt;/pre&gt;
  &lt;p id=&quot;x8rn&quot;&gt;В данном случае группа будет называться так же, как и пользователь (она была создана для него по умолчанию). Теперь только указанный пользователь и &lt;strong&gt;root &lt;/strong&gt;могут запускать исполняемый файл.&lt;/p&gt;
  &lt;h2 id=&quot;24rh&quot;&gt;Запуск Node Exporter&lt;/h2&gt;
  &lt;p id=&quot;upzf&quot;&gt;Создадим юнит в &lt;strong&gt;/etc/systemd/system/&lt;/strong&gt; для управления службой.&lt;/p&gt;
  &lt;p id=&quot;eoei&quot;&gt;Создайте файл &lt;strong&gt;node_exporter.service&lt;/strong&gt; и откройте его для редактирования. Добавьте в него:&lt;/p&gt;
  &lt;pre id=&quot;p7US&quot;&gt;[Unit] Description=Node Exporter After=network.target [Service] User=&amp;lt;имя_пользователя&amp;gt; Group=&amp;lt;группа&amp;gt; ExecStart=путь к исполняемому файлу Restart=always RestartSec=30 [Install] WantedBy=multi-user.target  &lt;/pre&gt;
  &lt;p id=&quot;21b8&quot;&gt;Разберём параметры:&lt;/p&gt;
  &lt;ul id=&quot;yQFT&quot;&gt;
    &lt;li id=&quot;Ghs8&quot;&gt;&lt;strong&gt;After=network.target&lt;/strong&gt; — служба запустится только после полной инициализации сети.&lt;/li&gt;
    &lt;li id=&quot;vYpF&quot;&gt;&lt;strong&gt;User &lt;/strong&gt;и &lt;strong&gt;Group &lt;/strong&gt;— ограничение прав процесса.&lt;/li&gt;
    &lt;li id=&quot;1g79&quot;&gt;&lt;strong&gt;Restart=always&lt;/strong&gt; — автоматический перезапуск при любом завершении (включая ручную остановку).&lt;/li&gt;
    &lt;li id=&quot;CzHy&quot;&gt;&lt;strong&gt;RestartSec=30&lt;/strong&gt; — пауза в 30 секунд перед перезапуском.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;Udjh&quot;&gt;Выполните последовательно &lt;strong&gt;daemon-reload&lt;/strong&gt;, &lt;strong&gt;start node_exporter&lt;/strong&gt; и &lt;strong&gt;enable node_exporter&lt;/strong&gt;. Это перезагрузит конфигурацию &lt;strong&gt;systemd &lt;/strong&gt;(обязательно после создания юнита), запустит и добавит службу в автозагрузку при старте системы.&lt;/p&gt;
  &lt;p id=&quot;JC8R&quot;&gt;После этого проверьте статус службы (&lt;strong&gt;status node_exporter&lt;/strong&gt;).В выводе должна быть строка &lt;strong&gt;Active: active (running)&lt;/strong&gt;. Если статус &lt;strong&gt;failed&lt;/strong&gt;, изучите логи за предыдущие 5-10 минут:&lt;/p&gt;
  &lt;pre id=&quot;145b&quot;&gt;sudo journalctl -u node_exporter --since &amp;quot;5 minutes ago&amp;quot;  &lt;/pre&gt;
  &lt;h2 id=&quot;Zry1&quot;&gt;Проверка работы&lt;/h2&gt;
  &lt;p id=&quot;HyX2&quot;&gt;Node Exporter по умолчанию слушает порт 9100. Чтобы убедиться, что метрики собираются, выполните запрос через &lt;strong&gt;curl&lt;/strong&gt;:&lt;/p&gt;
  &lt;pre id=&quot;Zgno&quot;&gt;curl http://localhost:9100/metrics  &lt;/pre&gt;
  &lt;p id=&quot;hXij&quot;&gt;В ответе вы увидите список метрик. Вот некоторые из них:&lt;/p&gt;
  &lt;ul id=&quot;K251&quot;&gt;
    &lt;li id=&quot;QlMP&quot;&gt;&lt;strong&gt;node_cpu_seconds_total&lt;/strong&gt; — время работы CPU в разных режимах (&lt;strong&gt;idle&lt;/strong&gt;, &lt;strong&gt;user&lt;/strong&gt;, &lt;strong&gt;system&lt;/strong&gt;).&lt;/li&gt;
    &lt;li id=&quot;lQEn&quot;&gt;&lt;strong&gt;node_memory_MemAvailable&lt;/strong&gt; — доступная оперативная память в байтах.&lt;/li&gt;
    &lt;li id=&quot;9MDB&quot;&gt;&lt;strong&gt;node_filesystem_avail&lt;/strong&gt; — свободное место на смонтированных файловых системах.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;K6GQ&quot;&gt;Интеграция с Prometheus&lt;/h2&gt;
  &lt;p id=&quot;Umkv&quot;&gt;Теперь дадим знать Prometheus, откуда брать метрики. Откройте &lt;strong&gt;prometheus.yml&lt;/strong&gt; (файл находится в &lt;strong&gt;/opt/prometheus/&lt;/strong&gt;) и добавьте новое задание:&lt;/p&gt;
  &lt;pre id=&quot;VfTE&quot;&gt;scrape_configs:   - job_name: &amp;#x27;node&amp;#x27;     static_configs:       - targets: [&amp;#x27;localhost:9100&amp;#x27;]     scrape_interval: 15s  &lt;/pre&gt;
  &lt;p id=&quot;40Ff&quot;&gt;Разберём параметры:&lt;/p&gt;
  &lt;ul id=&quot;YcAb&quot;&gt;
    &lt;li id=&quot;3OQQ&quot;&gt;&lt;strong&gt;job_name: &amp;#x27;node&amp;#x27;&lt;/strong&gt; — произвольное имя задания. Нужно для фильтрации метрик в PromQL.&lt;/li&gt;
    &lt;li id=&quot;Pjj8&quot;&gt;&lt;strong&gt;targets: [&amp;#x27;localhost:9100&amp;#x27;]&lt;/strong&gt; — адрес и порт Node Exporter. Если нужно мониторить удалённые серверы, укажите их IP через запятую: &lt;strong&gt;[&amp;#x27;192.168.1.5:9100&amp;#x27;, &amp;#x27;192.168.1.6:9100&amp;#x27;]&lt;/strong&gt;.&lt;/li&gt;
    &lt;li id=&quot;u5Ww&quot;&gt;&lt;strong&gt;scrape_interval: 15s&lt;/strong&gt; — переопределение глобального интервала сбора метрик для этого конкретного job.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;7RWr&quot;&gt;Примените изменения и перезапустите Prometheus (&lt;strong&gt;restart&lt;/strong&gt;).&lt;/p&gt;
  &lt;p id=&quot;QtP8&quot;&gt;Проверьте, получилось ли связать Node Exporter и Prometheus. Перейдите по адресу &lt;strong&gt;http://ваш_сервер:9090&lt;/strong&gt; в браузере. Зайдите в &lt;strong&gt;Status → Targets&lt;/strong&gt;: у цели &lt;strong&gt;node &lt;/strong&gt;должен быть статус UP. Если статус DOWN, проверьте, активен ли Node Exporter и открыт ли порт 9100 в файрволе.&lt;/p&gt;
  &lt;h2 id=&quot;fyJ9&quot;&gt;Дополнительные настройки&lt;/h2&gt;
  &lt;p id=&quot;4hjI&quot;&gt;По умолчанию Node Exporter доступен на всех сетевых интерфейсах, что небезопасно для продакшена. Примите меры:&lt;/p&gt;
  &lt;p id=&quot;dkG7&quot;&gt;&lt;strong&gt;Ограничьте доступ по IP.&lt;/strong&gt; Разрешите подключение к порту 9100 только для Prometheus:&lt;/p&gt;
  &lt;pre id=&quot;FA87&quot;&gt;sudo ufw allow proto tcp from 192.168.1.10 to any port 9100  &lt;/pre&gt;
  &lt;p id=&quot;656A&quot;&gt;Замените 192.168.1.10 на IP-адрес вашего сервера Prometheus.&lt;/p&gt;
  &lt;p id=&quot;2uDY&quot;&gt;&lt;strong&gt;Используйте обратный прокси&lt;/strong&gt;, который будет выступать промежуточным звеном между Node Exporter и Prometheus, скрывая прямой доступ к порту 9100. Это также добавит проверку логина и пароля перед доступом к метрикам. Например, для проксирования можно использовать Nginx, если он установлен.&lt;/p&gt;
  &lt;p id=&quot;wfMi&quot;&gt;&lt;strong&gt;Запуск на отдельном интерфейсе.&lt;/strong&gt; Если оба приложения установлены на одном сервере, ограничьте прослушивание &lt;strong&gt;localhost&lt;/strong&gt;. Для этого в файле &lt;strong&gt;node_exporter.service&lt;/strong&gt; измените строку ExecStart:&lt;/p&gt;
  &lt;pre id=&quot;HfTv&quot;&gt;ExecStart=/usr/local/bin/node_exporter --web.listen-address=127.0.0.1:9100  &lt;/pre&gt;
  &lt;p id=&quot;TAOx&quot;&gt;&lt;strong&gt;Фильтрация собираемых метрик.&lt;/strong&gt; Node Exporter собирает все доступные данные, но иногда это избыточно. Используйте флаги для отключения ненужных коллекторов:&lt;/p&gt;
  &lt;pre id=&quot;0l2S&quot;&gt;ExecStart=/usr/local/bin/node_exporter \--collector.disable-defaults \--collector.cpu \--collector.meminfo \--collector.filesystem  &lt;/pre&gt;
  &lt;p id=&quot;IBN7&quot;&gt;Где:&lt;/p&gt;
  &lt;ul id=&quot;glwg&quot;&gt;
    &lt;li id=&quot;4rZA&quot;&gt;&lt;strong&gt;--collector.disable-defaults&lt;/strong&gt; отключает все коллекторы, активные по умолчанию;&lt;/li&gt;
    &lt;li id=&quot;TmKd&quot;&gt;&lt;strong&gt;--collector.cpu&lt;/strong&gt; включает сбор метрик CPU, остальные два флага включают сбор информации о состоянии памяти и файловой системы.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;Vgdi&quot;&gt;Заключение&lt;/h2&gt;
  &lt;p id=&quot;fKEO&quot;&gt;Теперь ваш сервер отправляет метрики в Prometheus, и вы можете отслеживать его состояние в реальном времени. Чтобы визуализировать данные, установите Grafana и импортируйте готовый дашборд Node Exporter Full.&lt;/p&gt;

</content></entry><entry><id>dark2k:multiOTP</id><link rel="alternate" type="text/html" href="https://blog.provision12.ru/multiOTP?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=dark2k"></link><title>Бесплатная двухфакторная аутентификация пользователей на терминальных серверах c LDAP Active Directory</title><published>2025-11-14T12:40:17.020Z</published><updated>2025-11-14T12:40:17.020Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/b5/0f/b50fa223-71ed-4ee0-9da2-08ee9c9e9387.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/77/7e/777e4aee-68ac-4a92-91f2-eb41f4db6df9.png&quot;&gt;В связи с нестабильной работой VPN в России в одной из компаний решили совсем отказаться от последнего в пользу Remote Desktop Gateway (RDG), дополнительными плюсами выступает отсутствие необходимости установки дополнительного ВПН клиента пользователю, можно обойтись лишь штатными средствами Windows, мультиплатформенность (приложение Microsoft Remote Desktop есть под все популярные ОС), вполне надежное SSL шифрование, значительное снижение нагрузки на маршрутизатор и т.д.</summary><content type="html">
  &lt;figure id=&quot;cydT&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/77/7e/777e4aee-68ac-4a92-91f2-eb41f4db6df9.png&quot; width=&quot;1140&quot; /&gt;
  &lt;/figure&gt;
  &lt;section&gt;
    &lt;p id=&quot;QRWV&quot;&gt;В связи с нестабильной работой VPN в России в одной из компаний решили совсем отказаться от последнего в пользу Remote Desktop Gateway (RDG), дополнительными плюсами выступает отсутствие необходимости установки дополнительного ВПН клиента пользователю, можно обойтись лишь штатными средствами Windows, мультиплатформенность (приложение Microsoft Remote Desktop есть под все популярные ОС), вполне надежное SSL шифрование, значительное снижение нагрузки на маршрутизатор и т.д.&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;bkE3&quot;&gt;Однако банальный bruteforce (перебор пароля) и утечка ярлыка с сохраненными учетными данными юзера открывают хорошую брешь для взлома. И если от брутфорс можно защититься средствами маршрутизатора (даже на микротик довольно топорно, но реализовано, если кому интересно, могу написать как), то учетки юзеров остаются на совести последних. Отсюда родилась идея применения многофакторной аутентификации.&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;sRes&quot;&gt;Мониторинг предложений на рынке услуг 2FA привел в расстройство, зарубежные предложения по типу Eset Secure Authentification, Microsoft MFA и т.д. отсутствием возможности приобретения продукта, а отечественные решения поражают ценой использования, хотя стоит отметить простоту внедрения и удобство использования и администрирования, например, топ 1 в поиске 2FA в яндексе дает бесплатно 3 учетных записи и неплохую инструкцию по применению.&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;gE6j&quot;&gt;Задумка следующая — пользователь подключается к RDG использую учетную запись из Active Directory, а на этапе подключения к терминальному серверу ему потребуется ввести код второго фактора из приложения.&lt;/p&gt;
    &lt;p id=&quot;qW39&quot;&gt;В этой схеме нам придется установить агента на каждый терминальный сервер, поскольку используемый нами MultiOTP не работает с RDG.&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;GmM0&quot;&gt;Итак, начнем:&lt;/p&gt;
    &lt;p id=&quot;2hS5&quot;&gt;Сначала развернем централизованный MultiOTP сервер (сервер многофакторной авторизации), для этого качаем с официального сайта образ для виртуальной машины &lt;a href=&quot;https://download.multiotp.net/hyper-v/&quot; target=&quot;_blank&quot;&gt;Hyper-V&lt;/a&gt; или &lt;a href=&quot;https://download.multiotp.net/ova/&quot; target=&quot;_blank&quot;&gt;VMWare&lt;/a&gt; и разворачиваем в своей инфраструктуре&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;TRvP&quot;&gt;Первое что необходимо сделать — поменять ip-адрес с предустановленного 192.168.1.44 на наш, подключаемся к машине пользователь/пароль root/root, переходим к файлу&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;CNBH&quot;&gt;&lt;strong&gt;nano /etc/network/interfaces&lt;/strong&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;49qZ&quot;&gt;Если у нас DHCP, то закомментируем все что есть и ниже вставим:&lt;/p&gt;
    &lt;p id=&quot;pXDY&quot;&gt;auto lo&lt;/p&gt;
    &lt;p id=&quot;dVSP&quot;&gt;iface lo inet loopback&lt;/p&gt;
    &lt;p id=&quot;sqhA&quot;&gt;auto eth0&lt;/p&gt;
    &lt;p id=&quot;2joM&quot;&gt;iface eth0 inet dhcp&lt;/p&gt;
    &lt;p id=&quot;iHYf&quot;&gt;Если адрес назначаем статический, то:&lt;/p&gt;
    &lt;p id=&quot;WZiS&quot;&gt;auto lo&lt;/p&gt;
    &lt;p id=&quot;YNq5&quot;&gt;iface lo inet loopback&lt;/p&gt;
    &lt;p id=&quot;3kf7&quot;&gt;auto eth0&lt;/p&gt;
    &lt;p id=&quot;PKzZ&quot;&gt;iface eth0 inet static&lt;/p&gt;
    &lt;p id=&quot;DgIQ&quot;&gt;address 10.0.0.XXX&lt;/p&gt;
    &lt;p id=&quot;189u&quot;&gt;netmask 255.255.255.XXX&lt;/p&gt;
    &lt;p id=&quot;MSKL&quot;&gt;network 10.0.0.XXX&lt;/p&gt;
    &lt;p id=&quot;Gvrf&quot;&gt;gateway 10.0.0.XXX&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;4nAP&quot;&gt;Далее, чтобы в дальнейшем подцепить учетки по LDAP из Active Directory сразу проверим доступность DNS сервера адэхи&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;vAJb&quot;&gt;&lt;strong&gt;nslookup myADdomain.local&lt;/strong&gt;&lt;/p&gt;
    &lt;p id=&quot;tQN1&quot;&gt;Если возвращается ip-адрес адэхи, пропускаем следующий пункт, если нет, то исправляем&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;OOfq&quot;&gt;&lt;strong&gt;nano /etc/resolv.conf&lt;/strong&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;YVU3&quot;&gt;nameserver ipDNS_AD #биваем ip адэхи&lt;/p&gt;
    &lt;p id=&quot;zQsQ&quot;&gt;nameserver 8.8.8.8&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;BSg6&quot;&gt;Далее перезагрузим службу сети&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;Qb20&quot;&gt;&lt;strong&gt; service networking restart&lt;/strong&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;EvAM&quot;&gt;Подготовка закончена, подключим пользователей из AD:&lt;/p&gt;
    &lt;p id=&quot;aSBS&quot;&gt;Переходим в директорию  &lt;br /&gt;&lt;strong&gt;&lt;em&gt;cd /usr/local/bin/multiotp/&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
    &lt;p id=&quot;WHCo&quot;&gt;и по очереди выполняем следующие команды:&lt;/p&gt;
    &lt;pre id=&quot;DxnF&quot;&gt;./multiotp.php -config default-request-prefix-pin=0&lt;/pre&gt;
    &lt;p id=&quot;BcMj&quot;&gt;Определяет, требуется ли наличие дополнительного (постоянного) пина при вводе одноразового пина (0 или 1)&lt;/p&gt;
    &lt;pre id=&quot;1geF&quot;&gt;./multiotp.php -config default-request-ldap-pwd=0&lt;/pre&gt;
    &lt;p id=&quot;YjLd&quot;&gt;Определяет, требуется ли ввод доменного пароля при вводе одноразового пина (0 или 1)&lt;/p&gt;
    &lt;pre id=&quot;QRJh&quot;&gt;./multiotp.php -config ldap-server-type=1&lt;/pre&gt;
    &lt;p id=&quot;0HbZ&quot;&gt;Указывается тип LDAP-сервер (0 = обычный LDAP-сервер, в нашем случае 1 = Active Directory)&lt;/p&gt;
    &lt;pre id=&quot;kdeE&quot;&gt;./multiotp.php -config ldap-cn-identifier=&amp;quot;sAMAccountName&amp;quot;&lt;/pre&gt;
    &lt;p id=&quot;airj&quot;&gt;Указывает, в каком формате представлять имя пользователя (данное значение выведет только имя, без домена)&lt;/p&gt;
    &lt;pre id=&quot;7oxV&quot;&gt;./multiotp.php -config ldap-group-cn-identifier=&amp;quot;sAMAccountName&amp;quot;&lt;/pre&gt;
    &lt;p id=&quot;XqzK&quot;&gt;То же самое, только для группы&lt;/p&gt;
    &lt;pre id=&quot;kb3F&quot;&gt;./multiotp.php -config ldap-group-attribute=&amp;quot;memberOf&amp;quot;&lt;/pre&gt;
    &lt;p id=&quot;tgAp&quot;&gt;Указывает метод определения принадлежности пользователя к группе&lt;/p&gt;
    &lt;pre id=&quot;rmxq&quot;&gt;./multiotp.php -config ldap-ssl=0&lt;/pre&gt;
    &lt;p id=&quot;CpRW&quot;&gt;Использовать ли безопасное подключение к LDAP-серверу (значение 1,если хотим)&lt;/p&gt;
    &lt;pre id=&quot;1awe&quot;&gt;./multiotp.php -config ldap-port=389&lt;/pre&gt;
    &lt;p id=&quot;gL6y&quot;&gt;Порт для подключения к LDAP-серверу (636, если в предыдущем ставили 1)&lt;/p&gt;
    &lt;pre id=&quot;a5Ts&quot;&gt;./multiotp.php -config ldap-domain-controllers=mydomain.local&lt;/pre&gt;
    &lt;p id=&quot;MfBM&quot;&gt;Адрес вашего сервера Active Directory&lt;/p&gt;
    &lt;pre id=&quot;rdqS&quot;&gt;./multiotp.php -config ldap-base-dn=&amp;quot;CN=Users,DC=mydomain,DC=local&amp;quot;&lt;/pre&gt;
    &lt;p id=&quot;8TWV&quot;&gt;Указываем, откуда начинать поиск пользователей в домене&lt;/p&gt;
    &lt;pre id=&quot;3Otz&quot;&gt;./multiotp.php -config ldap-bind-dn=&amp;quot;2fa@mydomain.local&amp;quot;&lt;/pre&gt;
    &lt;p id=&quot;co8a&quot;&gt;Указываем пользователя, у которого есть права поиска в Active Directory (предварительно создаем в AD или используем любой имеющийся)&lt;/p&gt;
    &lt;pre id=&quot;m9hP&quot;&gt;./multiotp.php -config ldap-server-password=&amp;quot;Пароль от юзера 2fa&amp;quot;&lt;/pre&gt;
    &lt;p id=&quot;X2r2&quot;&gt;Указываем пароль пользователя, для подключения к Active Directory&lt;/p&gt;
    &lt;pre id=&quot;wwCU&quot;&gt;./multiotp.php -config ldap-network-timeout=10&lt;/pre&gt;
    &lt;p id=&quot;JLC6&quot;&gt;Выставляем таймаут для подключения к Active Directory&lt;/p&gt;
    &lt;pre id=&quot;lmzF&quot;&gt;./multiotp.php -config ldap-time-limit=30&lt;/pre&gt;
    &lt;p id=&quot;Rmwa&quot;&gt;Выставляем ограничение по времени, на операцию импорта пользователей&lt;/p&gt;
    &lt;pre id=&quot;xOtN&quot;&gt;./multiotp.php -config ldap-activated=1&lt;/pre&gt;
    &lt;p id=&quot;9MBs&quot;&gt;Активируем конфигурацию подключения к Active Directory&lt;/p&gt;
    &lt;pre id=&quot;ZCCX&quot;&gt;./multiotp.php -debug -display-log -ldap-users-sync&lt;/pre&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;figure id=&quot;S4Rf&quot; class=&quot;m_custom&quot;&gt;
      &lt;img src=&quot;https://imaxis.ru/wp-content/uploads/2023/08/sync2fa.jpg&quot; width=&quot;640&quot; /&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;FSCK&quot;&gt;В конце должны увидеть сообщение об успешной синхронизации, если нет, смотрим ошибку и исправляем.&lt;/p&gt;
    &lt;p id=&quot;Wwkn&quot;&gt;Можно также зайти на веб-интрефейс этой виртуальной машины и проверить засинхронизированных пользователей https://10.0.0.XXX&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;x9sx&quot;&gt;Возвращаемся к виртуальной машине и правим клиента в уже предустановленном FreeRadius&lt;/p&gt;
    &lt;p id=&quot;5PBv&quot;&gt;&lt;strong&gt;nano /etc/freeradius/3.0/clients.conf&lt;/strong&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;Wedn&quot;&gt;В самом низу файла уже есть предустановленный клиент, если он вам подходит, можно использовать его, у меня адресация другая, поэтому закоментируем дефолтный и вставим следующие&lt;/p&gt;
    &lt;p id=&quot;VxWD&quot;&gt;client 10.0.0.0/8 {&lt;/p&gt;
    &lt;p id=&quot;luZ6&quot;&gt;ipaddr = 10.0.0.0/8&lt;/p&gt;
    &lt;p id=&quot;w9lN&quot;&gt;shortname = RDP&lt;/p&gt;
    &lt;p id=&quot;Tgjw&quot;&gt;secret = testing123&lt;/p&gt;
    &lt;p id=&quot;Stpp&quot;&gt;}&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;F50q&quot;&gt;В качестве имени клиента можно указать что угодно, ipaddr = можно указывать как подстети, так и айпи наших терминальных серверов (естественно второе предпочтительно), secret очень важен, он нам понадобится в дальнейшем — ставим любое значение&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;aIfs&quot;&gt;Далее перезапустим фрирадиус&lt;/p&gt;
    &lt;p id=&quot;fWFs&quot;&gt;&lt;strong&gt;service freeradius restart&lt;/strong&gt;&lt;/p&gt;
    &lt;p id=&quot;WMAC&quot;&gt;и попробуем локально затестить настроенное.&lt;/p&gt;
    &lt;p id=&quot;wKWo&quot;&gt;Для начала надо создать второй фактор, для этого переходим в браузере по айпи нашего MultiOTP сервера (узнать айпи можно набрав «ip a» в консоле)&lt;/p&gt;
    &lt;p id=&quot;450o&quot;&gt;Нажимаем Login (default login/password admin/1234)&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;figure id=&quot;gthv&quot; class=&quot;m_custom&quot;&gt;
      &lt;img src=&quot;https://imaxis.ru/wp-content/uploads/2023/08/multiotp.jpg&quot; width=&quot;640&quot; /&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;fqMr&quot;&gt;Панель управления довольно проста, можем сразу поменять пароль для входа, создать пользователя вручную и т.д., нас интересует кнопка Print и Scratchlist нашего юзера из АД, в последней написаны аварийные коды для доступа, нажав Print окажемся в инструкции для пользователя&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;figure id=&quot;LXEw&quot; class=&quot;m_custom&quot;&gt;
      &lt;img src=&quot;https://imaxis.ru/wp-content/uploads/2023/08/multiotpuser-1024x490.jpg&quot; width=&quot;640&quot; /&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;4Jjj&quot;&gt;Где по первому QR-коду можно скачать приложение для аутентификации, использовать его не обязательно, можно использовать любой TOTP (Google Autentificator, Microsoft Autentificator и т.д.).&lt;/p&gt;
    &lt;p id=&quot;FumO&quot;&gt;Второй QR-код сканируем удобным TOTP приложением в телефоне и видим что теперь генерируется новый 6тизначный код каждые 30 секунд&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;rqsj&quot;&gt;Возвращаемся в консоль MultiOTP&lt;/p&gt;
    &lt;p id=&quot;AaoM&quot;&gt;вводим для проверки&lt;/p&gt;
    &lt;p id=&quot;St8J&quot;&gt;radtest admin 891419 10.0.0.XXX 1812 testing123&lt;/p&gt;
    &lt;p id=&quot;fu5m&quot;&gt;где admin — ваш пользователь&lt;/p&gt;
    &lt;p id=&quot;YCBl&quot;&gt;891419 — код из приложения&lt;/p&gt;
    &lt;p id=&quot;bYaN&quot;&gt;10.0.0.ХХХ — ip адрес MultiOTP сервера&lt;/p&gt;
    &lt;p id=&quot;lUFN&quot;&gt;testing123 — секрет, который мы создавали в файле ранее&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;H9cK&quot;&gt;Ответ должен быть такой&lt;/p&gt;
    &lt;p id=&quot;89TN&quot;&gt;Sent Access-Request Id 122 from 0.0.0.0:43055 to 10.0.0.XXX:1812 length 76&lt;/p&gt;
    &lt;p id=&quot;tFQb&quot;&gt;User-Name = «admin»&lt;/p&gt;
    &lt;p id=&quot;i1hZ&quot;&gt;User-Password = «891419»&lt;/p&gt;
    &lt;p id=&quot;SeId&quot;&gt;NAS-IP-Address = 127.0.1.1&lt;/p&gt;
    &lt;p id=&quot;OkkR&quot;&gt;NAS-Port = 1812&lt;/p&gt;
    &lt;p id=&quot;G99I&quot;&gt;Message-Authenticator = 0x00&lt;/p&gt;
    &lt;p id=&quot;eJA1&quot;&gt;Cleartext-Password = «891419»&lt;/p&gt;
    &lt;p id=&quot;kP5S&quot;&gt;Received Access-Accept Id 122 from 10.0.0.XXX:1812 to 10.0.0.XXX:43055 length 20&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;fs8p&quot;&gt;Если что-то пошло не так, ищем ответ в логах&lt;/p&gt;
    &lt;p id=&quot;f1HP&quot;&gt;FreeRadius: nano /var/log/freeradius/radius.log&lt;/p&gt;
    &lt;p id=&quot;n86b&quot;&gt;MultiOTP: nano /var/log/multiotp/multiotp.log&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;jGmL&quot;&gt;На этом в целом настройка сервера закончена, переходим к установке клиентской части на терминальный сервер.&lt;/p&gt;
    &lt;p id=&quot;MSvo&quot;&gt;Скачиваем необходимые дистрибутивы:&lt;/p&gt;
    &lt;p id=&quot;E8rV&quot;&gt;&lt;a href=&quot;https://imaxis.ru/downloads/multiOTPCredentialProvider-5.9.5.6.zip&quot; target=&quot;_blank&quot;&gt;multiOTPCredentialProvider-5.9.5.6.zip&lt;/a&gt;&lt;/p&gt;
    &lt;p id=&quot;rmlZ&quot;&gt;&lt;a href=&quot;https://imaxis.ru/downloads/VC_redist.x64.exe&quot; target=&quot;_blank&quot;&gt;Microsoft Visual C++ 2015-2022&lt;/a&gt; x64&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;OeoZ&quot;&gt;Устанавливаем сначала Microsoft VisualC++, затем самого клинта&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;h6 id=&quot;SIya&quot;&gt;&lt;em&gt;Некоторые важные моменты! &lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;После установки клиента необходимо будет обязательно вводить двухфактор, если что-то пойдет не так, рекомендую к этому подготовиться заранее, чтоб не потерять доступ к терминалке&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;1. Проверить доступность по порту 443/tcp и 1812/udp с терминала до сервера MultiOTP и обратно (только 1812)&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;2. Устанавливать клиента с настройками Требовать ввод пароля только при удаленном подключении и для новых Logon, заранее войти под учетной записью Админа, чтоб была возможность удалить клиента или исправить его настройки&lt;/em&gt;&lt;/h6&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;figure id=&quot;OjzE&quot; class=&quot;m_custom&quot;&gt;
      &lt;img src=&quot;https://imaxis.ru/wp-content/uploads/2023/08/mce.jpg&quot; width=&quot;495&quot; /&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;yaHZ&quot;&gt;Заполняем айпи до сервера MultiOTP и секретный ключ который задавали ранее&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;figure id=&quot;YeVF&quot; class=&quot;m_custom&quot;&gt;
      &lt;img src=&quot;https://imaxis.ru/wp-content/uploads/2023/08/mce1.jpg&quot; width=&quot;491&quot; /&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;vr4L&quot;&gt;Галочки расставляем по своему усмотрению, в целом все подписано&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;figure id=&quot;HBgV&quot; class=&quot;m_custom&quot;&gt;
      &lt;img src=&quot;https://imaxis.ru/wp-content/uploads/2023/08/mce2.jpg&quot; width=&quot;493&quot; /&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;D52g&quot;&gt;Галками можно задать когда требовать ввод второго фактора&lt;/p&gt;
    &lt;p id=&quot;Euxs&quot;&gt;На первый раз рекомендую ставить только при новой авторизации и только при подключении удаленно, в дальнейшем это можно поменять или переустановить с новыми настройками&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;fZGD&quot;&gt;На этом настройка завершена, подключаемся по RDP успешно вводим все учетные данные включая второй фактор, если все ок, ставим клиента на другие терминалки, если нет, смотрим логи, расположение написаны выше&lt;/p&gt;
    &lt;p id=&quot;02Wa&quot;&gt;Поменять настройки клиента можно в реестре HKEY_CLASSES_ROOT\CLSID\{FCEFDFAB-B0A1-4C4D-8B2B-4FF4E0A3D978} или переустановить&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;q2lR&quot;&gt;P.S. У меня была ошибка несовпадения секрета&lt;/p&gt;
    &lt;p id=&quot;K9dj&quot;&gt;debug Server-Client Info: *CheckUserExists server request for admin with challenge | 0 multiotp&lt;/p&gt;
    &lt;p id=&quot;AWAo&quot;&gt;2023-08-18 16:14:20 debug Server-Client Info: *CheckUserExists intermediate error code: 70 0 multiotp&lt;/p&gt;
    &lt;p id=&quot;v2Im&quot;&gt;2023-08-18 16:14:20 debug Server-Client Info: *Server secret used for command CheckUserExists with error code result 70: ClientServerSecret 0 multiotp&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;xzKD&quot;&gt;Исправил следующим способом, заходим на терминалке в реестр HKEY_CLASSES_ROOT\CLSID\{FCEFDFAB-B0A1-4C4D-8B2B-4FF4E0A3D978}&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;figure id=&quot;6wJc&quot; class=&quot;m_custom&quot;&gt;
      &lt;img src=&quot;https://imaxis.ru/wp-content/uploads/2023/08/reg.jpg&quot; width=&quot;378&quot; /&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;Rdpd&quot;&gt;Убеждаемся, что верно ввели ключ, переходим в консоль MultiOTP и вводим&lt;/p&gt;
    &lt;p id=&quot;eHfx&quot;&gt;multiotp -config server-secret=testing123&lt;/p&gt;
    &lt;p id=&quot;HGdM&quot;&gt;Вместо testing123 естественно ваш секрет&lt;/p&gt;
  &lt;/section&gt;
  &lt;section&gt;
    &lt;p id=&quot;kYIb&quot;&gt;В этой инструкции не описывается роль RDG, поскольку в ней относительно двухфактора не вносится каких — то изменений&lt;/p&gt;
  &lt;/section&gt;

</content></entry><entry><id>dark2k:win_hot_keys</id><link rel="alternate" type="text/html" href="https://blog.provision12.ru/win_hot_keys?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=dark2k"></link><title>Все горячие клавиши Windows 10</title><published>2025-10-29T07:54:17.378Z</published><updated>2025-10-29T07:54:17.378Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/4e/75/4e753494-2288-40f6-8723-6155197cfa20.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/9a/d8/9ad8fdf5-3d8e-4cb5-ad3d-66fc6095c7a6.png&quot;&gt;В данной статье будут рассмотрены большая часть горячих клавиш для ОС Windows 10 для разных нужд, которые сделают работу с компьютером более продуктивной. Если, конечно, научиться ими пользоваться</summary><content type="html">
  &lt;h1 id=&quot;P0fc&quot;&gt;Все горячие клавиши Windows 10. Ускоряем работу с компьютером.&lt;/h1&gt;
  &lt;p id=&quot;GDLS&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;YxML&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9a/d8/9ad8fdf5-3d8e-4cb5-ad3d-66fc6095c7a6.png&quot; width=&quot;1200&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;vjS4&quot;&gt;В данной статье будут рассмотрены большая часть горячих клавиш для ОС Windows 10 для разных нужд, которые сделают работу с компьютером более продуктивной. Если, конечно, научиться ими пользоваться&lt;/p&gt;
  &lt;h2 id=&quot;goryachie_klavishi_dlya_kopirovaniya_vstavki&quot;&gt;Горячие клавиши для копирования, вставки и прочих основных действий&lt;/h2&gt;
  &lt;p id=&quot;J1fJ&quot;&gt;Во многих случаях лучше всего обратиться к горячим клавишам, вместо того, чтобы делать вручную рутинные действия, скопировать, вставить, вырезать. Проще всего лишь нажать нужную комбинацию клавиш:&lt;/p&gt;
  &lt;ul id=&quot;px6A&quot;&gt;
    &lt;li id=&quot;xEHs&quot;&gt;CTRL+X — вырезать в буфер обмена выбранный элемент.&lt;/li&gt;
    &lt;li id=&quot;iTDK&quot;&gt;CTRL+C либо CTRL+INSERT — скопировать в буфер обмена выбранный элемент.&lt;/li&gt;
    &lt;li id=&quot;74Ov&quot;&gt;CTRL+V либо SHIFT+INSERT — вставить из буфера обмена выбранный элемент.&lt;/li&gt;
    &lt;li id=&quot;Utjh&quot;&gt;CTRL+Z — отменить предыдущее действие.&lt;/li&gt;
    &lt;li id=&quot;OIAp&quot;&gt;ALT+TAB — перемещение между открытыми окнами.&lt;/li&gt;
    &lt;li id=&quot;RL2H&quot;&gt;ALT+F4 — закрыть активное окно.&lt;/li&gt;
    &lt;li id=&quot;PziN&quot;&gt;Windows+L — заблокировать устройство(появится окно входа в систему где надо ввести пароль или же выполнить другое действие для входа на рабочий стол, как при включении компьютера).&lt;/li&gt;
    &lt;li id=&quot;BOK1&quot;&gt;Windows+D — показать или скрыть рабочий стол.&lt;/li&gt;
    &lt;li id=&quot;4EPI&quot;&gt;F2 — переименовать выбранный элемент.&lt;/li&gt;
    &lt;li id=&quot;i9mx&quot;&gt;F3 — найти в &amp;quot;Проводнике&amp;quot;.&lt;/li&gt;
    &lt;li id=&quot;01pS&quot;&gt;F4 — показать список адресной строки в &amp;quot;Проводнике&amp;quot;.&lt;/li&gt;
    &lt;li id=&quot;A952&quot;&gt;F5 — обновление содержимого окна.&lt;/li&gt;
    &lt;li id=&quot;jI51&quot;&gt;F6 — переключение между размещенными на рабочем столе или на экране элементами.&lt;/li&gt;
    &lt;li id=&quot;guDl&quot;&gt;F10 — активировать строку меню, если приложение активно.&lt;/li&gt;
    &lt;li id=&quot;Y778&quot;&gt;ALT+F8 — показать пароль в окне входа в систему.&lt;/li&gt;
    &lt;li id=&quot;wfen&quot;&gt;ALT+ESC — переключиться между элементами в порядке, в котором они открывались до этого.&lt;/li&gt;
    &lt;li id=&quot;JM7X&quot;&gt;ALT+подчеркнутая буква — выполнение команды, которая соответствует этой букве.&lt;/li&gt;
    &lt;li id=&quot;l4if&quot;&gt;ALT+Enter — свойства выделенного элемента.&lt;/li&gt;
    &lt;li id=&quot;We7s&quot;&gt;ALT+пробел — открытие контекстного меню окна.&lt;/li&gt;
    &lt;li id=&quot;5PQu&quot;&gt;ALT+стрелка влево/вправо — назад/вперед.&lt;/li&gt;
    &lt;li id=&quot;UwGX&quot;&gt;ALT+Page Up/Page Down — перейти на страницу вверх/вниз.&lt;/li&gt;
    &lt;li id=&quot;yoVv&quot;&gt;CTRL+F4 — закрыть документ, в котором работаете, если он открыт на весь экран и приложение допускает одновременно открывать несколько документов.&lt;/li&gt;
    &lt;li id=&quot;fX8l&quot;&gt;CTRL+A — выделить все элементы в окне или документе.&lt;/li&gt;
    &lt;li id=&quot;lqAn&quot;&gt;CTRL+D (или Delete) — удалить выделенный элемент.&lt;/li&gt;
    &lt;li id=&quot;BE4l&quot;&gt;CTRL+R (или F5) — обновить открытое окно.&lt;/li&gt;
    &lt;li id=&quot;RPlI&quot;&gt;CTRL+Y —повторить последнее действие еще раз.&lt;/li&gt;
    &lt;li id=&quot;sKZk&quot;&gt;CTRL+стрелка вправо/влево — передвинуть курсор в начало следующего/предыдущего слова.&lt;/li&gt;
    &lt;li id=&quot;yXRG&quot;&gt;CTRL+стрелка вниз/вверх — передвинуть курсор в начало следующего/предыдущего абзаца.&lt;/li&gt;
    &lt;li id=&quot;ityX&quot;&gt;CTRL+ALT+TAB — перейти на клавиши со стрелками, чтобы переключаться между открытыми приложениями.&lt;/li&gt;
    &lt;li id=&quot;srx3&quot;&gt;ALT+SHIFT+клавиши со стрелками — переместить в заданном направлении группу или плитку в меню &amp;quot;Пуск&amp;quot;, если они в фокусе.&lt;/li&gt;
    &lt;li id=&quot;YbZn&quot;&gt;CTRL+SHIFT+клавиши со стрелками — переместить плитку на другую плитку в меню &amp;quot;Пуск&amp;quot; для создания папки, если первая в фокусе.&lt;/li&gt;
    &lt;li id=&quot;M3Q2&quot;&gt;CTRL+клавиши со стрелками — соответствующее изменение размеров меню &amp;quot;Пуск&amp;quot; (оно должно быть предварительно открыто).&lt;/li&gt;
    &lt;li id=&quot;SIzl&quot;&gt;CTRL+клавиша со стрелкой+пробел — выделить несколько элементов в окне или на рабочем столе.&lt;/li&gt;
    &lt;li id=&quot;k2Ry&quot;&gt;CTRL+SHIFT+клавиша со стрелкой — выделить фрагмент текста;&lt;/li&gt;
    &lt;li id=&quot;IiEv&quot;&gt;CTRL+Esc — открыть &amp;quot;Пуск&amp;quot;.&lt;/li&gt;
    &lt;li id=&quot;3aoC&quot;&gt;CTRL+SHIFT+Esc — открыть диспетчер задач.&lt;/li&gt;
    &lt;li id=&quot;html&quot;&gt;CTRL+SHIFT — переключить языковую раскладку клавиатуры.&lt;/li&gt;
    &lt;li id=&quot;d2hJ&quot;&gt;CTRL+пробел — включить/отключить редактор метода ввода для китайского языка.&lt;/li&gt;
    &lt;li id=&quot;rCjE&quot;&gt;SHIFT+F10 — открыть контекстного меню для выделенного элемента.&lt;/li&gt;
    &lt;li id=&quot;dKQk&quot;&gt;SHIFT+ клавиша со стрелкой — выделить несколько элементов в окне или на рабочем столе либо текст в документе.&lt;/li&gt;
    &lt;li id=&quot;XhfC&quot;&gt;SHIFT+DELETE — удалить насовсем выделенный элемент.&lt;/li&gt;
    &lt;li id=&quot;GmUy&quot;&gt;стрелка вправо/влево — открыть следующее меню справа/слева или открыть/закрыть подменю.&lt;/li&gt;
    &lt;li id=&quot;vyVi&quot;&gt;ESC — остановить выполнение актуальной задачи или выйти.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;goryachie_klavishi_v_sochetanii_s_knopkoii_wi&quot;&gt;Горячие клавиши в сочетании с кнопкой Windows&lt;/h2&gt;
  &lt;p id=&quot;CrQd&quot;&gt;На клавиатурах часто присутствует клавиша с логотипом Windows, данная клавиша имеет название win. В сочетании с этой клавишей так же можно выполнять некоторые операции:&lt;/p&gt;
  &lt;p id=&quot;K779&quot;&gt;© alluremedia.com.au&lt;/p&gt;
  &lt;ul id=&quot;r6lw&quot;&gt;
    &lt;li id=&quot;19p6&quot;&gt;Win— вызвать либо закрыть меню &amp;quot;Пуск&amp;quot;.&lt;/li&gt;
    &lt;li id=&quot;cSAh&quot;&gt;Win+A — перейти в Центр поддержки.&lt;/li&gt;
    &lt;li id=&quot;wy85&quot;&gt;Win+B — навести фокус на область уведомлений.&lt;/li&gt;
    &lt;li id=&quot;MpDV&quot;&gt;Win+C — запустить ассистента Cortana в режиме прослушивания (по умолчанию эта возможность отключена, а ассистент доступен не для всех регионов).&lt;/li&gt;
    &lt;li id=&quot;ZdjA&quot;&gt;Win+Shift+C — вызвать меню чудо-кнопок.&lt;/li&gt;
    &lt;li id=&quot;yR0o&quot;&gt;Win+D — показать либо скрыть рабочий стол.&lt;/li&gt;
    &lt;li id=&quot;KuU9&quot;&gt;Win+Alt+D — сделать видимыми или скрыть дату и время на рабочем столе.&lt;/li&gt;
    &lt;li id=&quot;LmfP&quot;&gt;Win+E — открыть &amp;quot;Проводник&amp;quot;.&lt;/li&gt;
    &lt;li id=&quot;Hwzx&quot;&gt;Win+F — переход в Центр отзывов или снимок экрана.&lt;/li&gt;
    &lt;li id=&quot;IZmR&quot;&gt;Win+G — запуск меню открытой игры.&lt;/li&gt;
    &lt;li id=&quot;7pie&quot;&gt;Win+H — начало диктовки.&lt;/li&gt;
    &lt;li id=&quot;CIZR&quot;&gt;Win+I — переход в &amp;quot;Параметры&amp;quot;.&lt;/li&gt;
    &lt;li id=&quot;ePDw&quot;&gt;Win+J — выставить фокус на подсказке Windows, когда она отображается (повторное нажатие сочетания устанавливает фокус на элементе, к которому относится подсказка).&lt;/li&gt;
    &lt;li id=&quot;mslQ&quot;&gt;Win+K — запустить быстрое действие &amp;quot;Подключение&amp;quot;.&lt;/li&gt;
    &lt;li id=&quot;RBV6&quot;&gt;Win+L — заблокировать ПК или сменить пользователя.&lt;/li&gt;
    &lt;li id=&quot;IhcP&quot;&gt;Win+M — свернуть все открытые окна.&lt;/li&gt;
    &lt;li id=&quot;bd8a&quot;&gt;Win+O — зафиксировать выбранную ориентацию устройства.&lt;/li&gt;
    &lt;li id=&quot;aGu2&quot;&gt;Win+P — перейти к выбору режима показа презентации.&lt;/li&gt;
    &lt;li id=&quot;Q03R&quot;&gt;Win+R — переход к окну &amp;quot;Выполнить&amp;quot;.&lt;/li&gt;
    &lt;li id=&quot;0HKR&quot;&gt;Win+S — поиск.&lt;/li&gt;
    &lt;li id=&quot;twh7&quot;&gt;Win+T — переключаться между программами на панели задач в циклическом режиме.&lt;/li&gt;
    &lt;li id=&quot;aGhV&quot;&gt;Win+U — Центр специальных возможностей.&lt;/li&gt;
    &lt;li id=&quot;59vK&quot;&gt;Win+V — переключиться между уведомлениями в циклическом режиме.&lt;/li&gt;
    &lt;li id=&quot;XDzV&quot;&gt;Win+SHIFT+V — запустить циклическое переключение между уведомлениями в обратном порядке.&lt;/li&gt;
    &lt;li id=&quot;pMCY&quot;&gt;Win+X — меню быстрых ссылок.&lt;/li&gt;
    &lt;li id=&quot;Aj1J&quot;&gt;Win+Y — переключиться между Windows Mixed Reality и рабочим столом.&lt;/li&gt;
    &lt;li id=&quot;wVaL&quot;&gt;Win+Z — показать команды, которые можно активировать в приложении в полноэкранном режиме.&lt;/li&gt;
    &lt;li id=&quot;Xt2b&quot;&gt;Win+ &amp;quot;.&amp;quot; или &amp;quot;;&amp;quot; — запустить панель эмодзи.&lt;/li&gt;
    &lt;li id=&quot;9bEE&quot;&gt;Win+ &amp;quot;,&amp;quot; — на время актировать демонстрацию рабочего стола при наведении мыши.&lt;/li&gt;
    &lt;li id=&quot;LKfs&quot;&gt;Win+Pause — вызов окна &amp;quot;Свойства системы&amp;quot;.&lt;/li&gt;
    &lt;li id=&quot;zAuP&quot;&gt;Win+CTRL+F — найти компьютеры в сети.&lt;/li&gt;
    &lt;li id=&quot;m5fT&quot;&gt;Win+SHIFT+M — развернуть все свернутые окна на рабочем столе.&lt;/li&gt;
    &lt;li id=&quot;y8sO&quot;&gt;Win+любая цифра — открыть рабочий стол и программу, закрепленную на панели задач с соответствующим номером или переключиться на нее.&lt;/li&gt;
    &lt;li id=&quot;x5TY&quot;&gt;Win+SHIFT+любая цифра — открыть рабочий стол и запустить еще один экземпляр программы, закрепленной на панели задач с соответствующим цифре номером.&lt;/li&gt;
    &lt;li id=&quot;33A4&quot;&gt;Win+CTRL+любая цифра — открыть рабочий стол и перейти к последнему активному окну приложения, закрепленного на панели задач с соответствующим цифре номером.&lt;/li&gt;
    &lt;li id=&quot;qTR5&quot;&gt;ALT+Win+любая цифра — открыть рабочий стол и развернуть список переходов для программы, закрепленной на панели задач с соответствующим цифре номером.&lt;/li&gt;
    &lt;li id=&quot;AdpF&quot;&gt;Win+CTRL+SHIFT+любая цифра — открыть рабочий стол и еще один экземпляр приложения, расположенного в соответствии с цифрой на панели задач, от имени администратора.&lt;/li&gt;
    &lt;li id=&quot;KEc6&quot;&gt;Win+TAB — запуск представления задач.&lt;/li&gt;
    &lt;li id=&quot;kyrD&quot;&gt;Win+стрелка вверх/вниз — развернуть/свернуть окно.&lt;/li&gt;
    &lt;li id=&quot;0XSc&quot;&gt;Win+стрелка влево/вправо — развернуть окно до левого/правого края экрана.&lt;/li&gt;
    &lt;li id=&quot;Hgl8&quot;&gt;Win+Home — свернуть все окна, кроме активного, либо восстановить все свернутые.&lt;/li&gt;
    &lt;li id=&quot;wshY&quot;&gt;Win+SHIFT+стрелка вверх — растянуть окно до краев экрана сверху и снизу.&lt;/li&gt;
    &lt;li id=&quot;Bb2p&quot;&gt;Win+SHIFT+стрелка вниз — раскрыть или свернуть активные окна по вертикали, оставив прежней ширину.&lt;/li&gt;
    &lt;li id=&quot;mDy9&quot;&gt;Win+SHIFT+стрелка влево/вправо — передвинуть приложение либо окно с одного монитора на другой.&lt;/li&gt;
    &lt;li id=&quot;oZP9&quot;&gt;Win+пробел — сменить языка и раскладку клавиатуры.&lt;/li&gt;
    &lt;li id=&quot;eYhx&quot;&gt;Win+CTRL+пробел — вернуться к предыдущему языку ввода.&lt;/li&gt;
    &lt;li id=&quot;ZVLs&quot;&gt;Win+CTRL+Enter — экранный диктор.&lt;/li&gt;
    &lt;li id=&quot;I7W6&quot;&gt;Win+ &amp;quot;+&amp;quot; — экранная лупа;&lt;/li&gt;
    &lt;li id=&quot;wUxl&quot;&gt;Win+&amp;quot;/&amp;quot; — запустить реконверсию IME.&lt;/li&gt;
    &lt;li id=&quot;eOa5&quot;&gt;Win+CTRL+V — отобразить все прямые подключения.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;goryachie_klavishi_dlya_rabot_s_komandnoii_s&quot;&gt;Горячие клавиши для работы с командной строкой&lt;/h2&gt;
  &lt;p id=&quot;wh3V&quot;&gt;Если вы пользуетесь командной строкой в Windows 10, то некоторые горячие клавиши могут помочь вам в работе с ней:&lt;/p&gt;
  &lt;ul id=&quot;S2St&quot;&gt;
    &lt;li id=&quot;uxgT&quot;&gt;CTRL+C либо CTRL+Insert — скопировать выделенный текст.&lt;/li&gt;
    &lt;li id=&quot;U8Kn&quot;&gt;CTRL+V либо SHIFT+Insert — вставить текст.&lt;/li&gt;
    &lt;li id=&quot;CciI&quot;&gt;CTRL+M — перейти в режим пометки.&lt;/li&gt;
    &lt;li id=&quot;MFDy&quot;&gt;ALT+клавиша выбора — начать выделять в режиме блокировки.&lt;/li&gt;
    &lt;li id=&quot;CJgB&quot;&gt;клавиши со стрелками — переместить курсор.&lt;/li&gt;
    &lt;li id=&quot;COQ5&quot;&gt;Page Up/Down — сдвинуть курсор на страницу вверх/вниз.&lt;/li&gt;
    &lt;li id=&quot;HKFd&quot;&gt;CTRL+Home/End в режиме пометки — передвинуть курсор в начало/конец буфера.&lt;/li&gt;
    &lt;li id=&quot;5VdM&quot;&gt;CTRL+стрелка вверх/вниз — перейти на строку вверх/вниз в журнале вывода.&lt;/li&gt;
    &lt;li id=&quot;p5Mc&quot;&gt;CTRL+Home/End при навигации по журналу — передвинуть окно просмотра наверх буфера/в командную строку, если она пустая или удалить все символы, которые находятся слева/справа от курсора в командной строке.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;goryachie_klavishi_dlya_dialogovh_okon&quot;&gt;Горячие клавиши для диалоговых окон&lt;/h2&gt;
  &lt;p id=&quot;3bdl&quot;&gt;Для того, чтобы управлять диалоговыми окнами в Windows 10, тоже можно использовать ряд сочетаний клавиш:&lt;/p&gt;
  &lt;ul id=&quot;IViR&quot;&gt;
    &lt;li id=&quot;RhtG&quot;&gt;F4 — показать элементы активного списка.&lt;/li&gt;
    &lt;li id=&quot;fToR&quot;&gt;CTRL+TAB — передвижение по вкладкам вперед.&lt;/li&gt;
    &lt;li id=&quot;UGa3&quot;&gt;CTRL+SHIFT+TAB — передвижение по вкладкам назад.&lt;/li&gt;
    &lt;li id=&quot;TtNh&quot;&gt;CTRL+цифра 1–9 — перейти на вкладку, соответствующую цифре.&lt;/li&gt;
    &lt;li id=&quot;PZAu&quot;&gt;Tab/SHIFT+Tab — передвинуться вперед/назад по параметрам.&lt;/li&gt;
    &lt;li id=&quot;qNxu&quot;&gt;ALT+подчеркнутая буква — выполнить команду либо выбрать параметр, наименование которого начинается с этой буквы.&lt;/li&gt;
    &lt;li id=&quot;QIbe&quot;&gt;пробел — установить либо снять флажок напротив параметра.&lt;/li&gt;
    &lt;li id=&quot;qbDc&quot;&gt;Backspace — открыть папку, которая находится уровнем выше той папки, что выбрана в окне &amp;quot;Сохранить как&amp;quot; либо &amp;quot;Открыть&amp;quot;.&lt;/li&gt;
    &lt;li id=&quot;GIOq&quot;&gt;клавиши со стрелками — выбрать кнопку в активной группе кнопок.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;goryachie_klavishi_dlya_rabot_v_provodnike&quot;&gt;Горячие клавиши для работы в &amp;quot;Проводнике&amp;quot;&lt;/h2&gt;
  &lt;p id=&quot;UPFK&quot;&gt;В Windows 10 &amp;quot;Проводник&amp;quot; имеет большое количество горячих клавиш, которые способны вполне заменить манипуляции мышью:&lt;/p&gt;
  &lt;ul id=&quot;kErM&quot;&gt;
    &lt;li id=&quot;7tjX&quot;&gt;ALT+D — выбрать текст в после адресной стоки.&lt;/li&gt;
    &lt;li id=&quot;XmCf&quot;&gt;CTRL+E/CTRL+F — зайти в поиск.&lt;/li&gt;
    &lt;li id=&quot;KGI9&quot;&gt;CTRL+N/CTRL+W — открыть/закрыть новое окно.&lt;/li&gt;
    &lt;li id=&quot;KU4a&quot;&gt;CTRL+колесико мыши — изменить размер и вид значков файлов и папок;&lt;/li&gt;
    &lt;li id=&quot;DMD6&quot;&gt;CTRL+SHIFT+E — показать все папки, в которые вложена открытая папка.&lt;/li&gt;
    &lt;li id=&quot;y53P&quot;&gt;CTRL+SHIFT+N — создать новую папку.&lt;/li&gt;
    &lt;li id=&quot;kLhC&quot;&gt;Num Lock + &amp;quot;*&amp;quot; — показать все папки, которые вложены в открытую папку.&lt;/li&gt;
    &lt;li id=&quot;3Bci&quot;&gt;Num Lock + &amp;quot;+&amp;quot; — показать содержимое выбранной папки.&lt;/li&gt;
    &lt;li id=&quot;3T4X&quot;&gt;Num Lock + &amp;quot;–&amp;quot; — свернуть выбранную папку.&lt;/li&gt;
    &lt;li id=&quot;0cWJ&quot;&gt;ALT+P — показать панель просмотра.&lt;/li&gt;
    &lt;li id=&quot;UszW&quot;&gt;ALT+Enter — открыть окно &amp;quot;Свойства&amp;quot; для выделенного элемента.&lt;/li&gt;
    &lt;li id=&quot;QKGW&quot;&gt;ALT+стрелка вправо/влево — просмотреть содержимое следующей/предыдущей папки.&lt;/li&gt;
    &lt;li id=&quot;bnAt&quot;&gt;ALT+стрелка вверх — просмотреть содержимое папки, в которую вложена текущая папка.&lt;/li&gt;
    &lt;li id=&quot;tjWo&quot;&gt;Backspace — просмотреть содержимое предыдущей папки.&lt;/li&gt;
    &lt;li id=&quot;umMu&quot;&gt;стрелка вправо/влево — развернуть свернутый выделенный элемент/свернуть элемент либо выделить первую из вложенных папок/папку, в которую вложена текущая папка.&lt;/li&gt;
    &lt;li id=&quot;tTAF&quot;&gt;End/Home — показать нижний/верхний край текущего окна.&lt;/li&gt;
    &lt;li id=&quot;UjHn&quot;&gt;F11 — свернуть или развернуть текущее окно.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;goryachie_klavishi_dlya_virtylalnh_rabochih&quot;&gt;Горячие клавиши для виртулальных рабочих столов&lt;/h2&gt;
  &lt;p id=&quot;QBhA&quot;&gt;В Windows 10 уже давно существует функция, которая позволяет создавать дополнительные рабочие столы. К примеру если на одном открыто много окон, то можно создать второй рабочий стол, на котором их не будет. Потом можно удалить этот рабочий стол и вернуться к основному, а затем продолжить работу в нем. Для этой функции так же предусмотрены горячие клавиши:&lt;/p&gt;
  &lt;ul id=&quot;SbGy&quot;&gt;
    &lt;li id=&quot;UB9v&quot;&gt;Win+Tab — открытие среды представления задач.&lt;/li&gt;
    &lt;li id=&quot;ZV4b&quot;&gt;Win+CTRL+D — создать новый рабочий стол.&lt;/li&gt;
    &lt;li id=&quot;mfOu&quot;&gt;Win +CTRL+стрелка вправо/влево — перемещение между рабочими столами.&lt;/li&gt;
    &lt;li id=&quot;mNmT&quot;&gt;Win +CTRL+F4 — удалить рабочий стол, в котором вы находитесь на данный момент.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;goryachie_klavishi_dlya_rabot_s_panelyu_zad&quot;&gt;Горячие клавиши для работы с панелью задач&lt;/h2&gt;
  &lt;p id=&quot;QW1G&quot;&gt;Панель задач в Windows 10 (полоса в нижней части экрана) тоже имеет некоторые горячие клавиши:&lt;/p&gt;
  &lt;ul id=&quot;OKHI&quot;&gt;
    &lt;li id=&quot;wSdE&quot;&gt;SHIFT+клик на кнопке панели задач/сгруппированной кнопке панели задач правой кнопкой мыши — показать меню для конкретного приложения/группы приложений.&lt;/li&gt;
    &lt;li id=&quot;KY3N&quot;&gt;CTRL+SHIFT+нажатие кнопки панели задач — открыть нужное приложение с запуском от имени администратора.&lt;/li&gt;
    &lt;li id=&quot;eFul&quot;&gt;SHIFT+любая кнопка на панели задач — открыть соответствующее кнопке приложение.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;goryachie_klavishi_dlya_okon_s_parametrami&quot;&gt;Горячие клавиши для окон с параметрами&lt;/h2&gt;
  &lt;p id=&quot;Lpl9&quot;&gt;Так же существуют горячие клава для работы с приложением &amp;quot;Настройки&amp;quot; в Windows 10:&lt;/p&gt;
  &lt;ul id=&quot;63bR&quot;&gt;
    &lt;li id=&quot;KBRL&quot;&gt;Win+I — открыть настройки.&lt;/li&gt;
    &lt;li id=&quot;aVg2&quot;&gt;Backspace — перейти к домашней странице настроек.&lt;/li&gt;
  &lt;/ul&gt;

</content></entry></feed>