Архив автора: admin

🐧 Как следить за каталогом на предмет создания новых файлов в Linux

Чтобы выполнить команду при создании нового файла в папке в системе Linux, можно использовать комбинацию инструментов и скриптов.

Один из распространенных подходов – использование inotify-tools, утилиты, позволяющей отслеживать события файловой системы, в сочетании со скриптом оболочки.

Вот базовая схема того, как это можно настроить:

Шаг 1: Установите inotify-tools

Сначала вам нужно установить inotify-tools.

Обычно вы можете установить его с помощью менеджера пакетов.

Например, в системах на базе Ubuntu или Debian вы можете установить его, выполнив команду:

sudo apt update
sudo apt install inotify-tools

Ранее уже рассматривали его:

🐧 Как отслеживать события файловой системы в файлах и каталогах на Linux

Шаг 2: Создание скрипта

Далее создайте bash скрипт, который использует inotifywait (часть inotify-tools) для мониторинга каталога на предмет новых файлов и затем вызывает API при обнаружении нового файла.

Ниже приведен простой пример того, как может выглядеть этот скрипт:

#!/bin/bash



# Папка для мониторинг

MONITOR_DIR="/path/to/your/directory"



# Ваша команда

# CUSTOM_COMMAND="curl -X POST -d @newfile http://your.api.endpoint"



# Отслеживаем новые файлы и вызываем API

inotifywait -m -e create --format '%w%f' "$MONITOR_DIR" | while read NEWFILE

do

    echo "Новый файл: $NEWFILE"

    #Снимите комментарий, чтобы выполнять пользовательские команды и вызывать API

    #eval $CUSTOM_COMMAND

done

В этом скрипте замените /path/to/your/directory на путь к папке, которую вы хотите контролировать, а http://your.api.endpoint – на конечную точку API, которую вы хотите вызвать.

Вы также можете изменить CALL_API_COMMAND, чтобы включить в нее все необходимые заголовки, данные или опции для вашего конкретного вызова API.

Шаг 3: Запустите скрипт

Сделайте скрипт исполняемым и запустите его.

Это можно сделать следующим образом:

  • Сохранить скрипт в файл, например monitor.sh.
  • Сделать его исполняемым: chmod +x monitor.sh
  • Запустить скрипт : ./monitor.sh

Шаг 4: Запуск скрипта в фоновом режиме

Если вы хотите, чтобы этот скрипт постоянно выполнялся в фоновом режиме, вы можете использовать nohup или запустить его в сеансе screen или tmux.

Например:

nohup ./monitor.sh &

Это позволит сохранить скрипт запущенным, даже если вы выйдете из сеанса.

Шаг 5: Запуск скрипт в качестве службы Systemd

Чтобы запустить скрипт в качестве службы systemd в системе Linux, выполните следующие действия:

Убедитесь, что ваш скрипт написан правильно и протестирован.

Поместите его в подходящий каталог, например /usr/local/bin/.

Для этого примера предположим, что ваш скрипт будет называться monitor.sh.

sudo mv monitor.sh /usr/local/bin/

Убедитесь, что он является исполняемым:

sudo chmod +x /usr/local/bin/monitor.sh

Создайте новый служебный файл systemd с помощью удобного для вас текстового редактора.

Например, с помощью nano:

sudo nano /etc/systemd/system/monitor.service

Добавьте в файл следующее содержимое:



[Unit]

Description=File Monitor Service



[Service]

ExecStart=/usr/local/bin/monitor.sh

Restart=always

User=nobody

Group=nogroup



[Install]

WantedBy=multi-user.target

  • Description: Краткое описание вашей службы.
  • ExecStart: Полный путь к вашему сценарию.
  • Restart (Перезапуск): Настраивает, должна ли служба перезапускаться после выхода. всегда означает, что служба будет перезапускаться независимо от кода выхода.
  • User and Group: Пользователь и группа, под которыми будет запущена служба. Возможно, вы захотите создать определенного пользователя в целях безопасности.

Сохраните и закройте файл.

Перезагрузите конфигурацию менеджера systemd:

sudo systemctl daemon-reload

Включите службу, чтобы она запускалась при загрузке:

sudo systemctl enable monitor.service

Запуск службы:

sudo systemctl start monitor.service

Проверьте статус вашей службы, чтобы убедиться, что она работает должным образом:

sudo systemctl status monitor.service

Дополнительные примечания:

  • Данный скрипт является базовым примером. В зависимости от конкретных требований вам может потребоваться его модификация.
  • Если вам нужен более сложный мониторинг или обработка, рассмотрите возможность использования более надежного решения или языка программирования.
  • Убедитесь, что ваш скрипт является самодостаточным и не требует интерактивного ввода. Службы Systemd не предназначены для интерактивного использования.
  • Если ваш скрипт пишет логи, убедитесь, что он пишет в место, к которому у него есть разрешение на доступ. В качестве альтернативы вы можете управлять записью логов с помощью возможностей ведения логов в Systemd.

см. также:



2023-12-13T09:51:42
Скрипты

Angie 1.4 уже вышла, узнайте, что нового в этом форке Nginx

Angie

Angie — это форк, созданный бывшими разработчиками F5.

Объявлено о запуске новая версия Энджи 1.4 и в этой новой версии это реализовано все изменения и возможности, накопленные в версии Nginx 1.25.3, обеспечение того, чтобы пользователи извлекали выгоду из стабильности и функций этого веб-сервера. Кроме того, в релиз включены дополнительные пакеты для Alpine 3.19 и новый динамический модуль, направленный на аутентификацию. LDAP, »angie-module-auth-ldap ».

Что касается представленных улучшений, то одним из основных изменений является добавлена ​​поддержка протокола HTTP/3, поскольку в модуль http_proxy добавлено подключение к вышестоящим прокси-серверам (поддержка HTTP/3 для клиентских подключений присутствует в Angie начиная с версии 1.2.0). Директива proxy_http_version доступен для настройки прокси-соединений на основе протоколов HTTP/3 и Quic.



Читать

Все о связанном списке в структуре данных

В обширном ландшафте структур данных связанные списки являются одним из фундаментальных и универсальных строительных блоков. Типы связанных списков — одна из самых интересных тем, поскольку в структурах данных существует четыре разных типа связанных списков, которые имеют разную функциональность в зависимости от их реализации. Они предоставляют элегантное решение для управления и организации данных, предлагая эффективность и гибкость в широком спектре приложений. Создавая цепочку взаимосвязанных узлов, каждый из которых содержит определенную информацию, связанные списки открывают множество возможностей для манипулирования данными и их хранения.

В этой статье рассказывается о мире связанных списков, типах связанных списков в структурах данных, характеристиках и вариантах использования. Независимо от того, являетесь ли вы начинающим студентом-информатиком, опытным разработчиком или просто интересуетесь внутренней работой структур данных, это всеобъемлющее руководство поможет вам глубже понять связанные списки и их практическое применение. Давайте сначала обсудим “что такое связанный список?”.

 

Что такое связанный список?

Связанный список — это линейная структура данных, состоящая из группы узлов, хранящихся по случайным адресам. В связанном списке элементы связаны с помощью указателей.

Каждый узел хранит данные и адрес следующего узла. Каждый узел состоит из 2 частей:

  • Данные: данные, которые хранятся по определенному адресу.
  • Ссылка: адрес следующего узла связанного списка.

 

Представление связанного списка

Связанный список может быть представлен как соединение узлов, в котором каждый узел указывает на следующий узел списка. Ниже приведено представление связанного списка

До сих пор мы обсуждали структуру данных массива для организации группы элементов, которые должны храниться по отдельности в памяти. Однако Array имеет несколько преимуществ и недостатков, которые необходимо знать, чтобы определить структуру данных, которая будет использоваться во всей программе.

 

Типы связанных списков

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

Существует три распространенных типа связанных списков:

  • Односвязный список
  • Двусвязный список
  • Круговой связанный список

 

Односвязный список

Одиночный список — это однонаправленный связанный список, то есть по нему можно перемещаться только в одном направлении, начиная с начала связанного списка и заканчивая конечным узлом (tail). В односвязном списке каждый узел содержит данные и ссылку (обычно указатель) на следующий узел в последовательности. Последний узел указывает на NULL, обозначая конец списка. Этот тип связанного списка прост и эффективен для прямого обхода, но требует последовательного доступа для обратного обхода.

  • Поле данных.
  • Поле адреса указывает на следующий узел.

 

Код на C: https://ideone.com/ge4Qqi

Код на C ++: https://ideone.com/WCuz7J

Java-код: https://ideone.com/EXSH6I

Код на Python: https://ideone.com/tz1ebr

 

Двусвязный список

В двусвязном списке каждый узел содержит данные и две ссылки (указатели) – одну на следующий узел, а другую на предыдущий узел. Эта двунаправленная связь обеспечивает эффективный обход в обоих направлениях, делая такие операции, как удаление и вставка в любой позиции, более простыми по сравнению с односвязными списками. Однако это происходит за счет увеличения использования памяти из-за дополнительных указателей.

  • Поле данных.
  • Два поля с адресомnext и prev, next указывает на ближайший следующий узел в связанном списке, а prev указывает на непосредственный предыдущий узел в связанном списке.

 

Код на C: https://ideone.com/xG9p35

Код на C ++: https://ideone.com/wHDybr

Java-код: https://ideone.com/b2x6gd

Код на Python: https://ideone.com/HxJpDQ

 

Круговой связанный список

В циклическом связанном списке вместо последнего узла, указывающего на NULL, последний узел указывает на начало связанного списка. Отсюда и название «циклический связанный список». Основное преимущество циклического связанного списка заключается в том, что мы можем рассматривать любой узел как начальный и перемещаться по списку. Эта циклическая структура обеспечивает плавную ротацию элементов, что полезно в таких приложениях, как планирование задач или реализация циклических буферов.

Код на C: https://ideone.com/Ob27Hf

Код на C ++: https://ideone.com/CdNuSl

Java-код: https://ideone.com/FPJfA9

Код на Python: https://ideone.com/aN9gOY

 

Теперь у вас может возникнуть вопрос, почему мы должны использовать связанные списки вместо массивов?

 

Почему связанный список?

Несмотря на использование массивов, мы можем хранить одни и те же типы данных; мы можем обращаться к элементам напрямую, используя индекс; однако у них есть следующие недостатки.

  1. Массивы имеют фиксированный размер: в результате мы должны заранее знать максимальное количество элементов. Кроме того, независимо от использования, выделенная память всегда равна максимальному пределу.
  2. Вставка нового элемента в массив в некотором среднем положении является дорогостоящей, поскольку для новых элементов должно быть освобождено место, а старые элементы должны быть сдвинуты, чтобы освободить место.
  3. Также удаление элемента из массива является дорогостоящим, поскольку это также требует перемещения элементов массива.

 

Основные операции со связанным списком:

Вставка: эта операция используется для добавления элемента в связанный список.

Вставка узла связанного списка может осуществляться в трех позициях, т.е. в начале, в конце и в середине списка.

Удаление: операции удаления используются для удаления элемента из начала связанного списка. Вы также можете выполнить удаление в связанном списке тремя способами: с конца, начала или с определенной позиции.

Поиск: операция поиска используется для поиска элемента по заданному ключу. Операция поиска выполняется для нахождения определенного элемента в связанном списке. Если элемент найден в любом месте, то он возвращается. В противном случае он вернет значение null.

Отображение: операция отображения используется для отображения связанного списка. display() отобразит узлы, присутствующие в списке.

 

Сложность связанного списка

Теперь давайте посмотрим на временную и пространственную сложность связанного списка для операций поиска, вставки и удаления.

Временная сложность







ОперацииСредняя временная сложность рассмотренияНаихудшая временная сложность
ВставкаO(1)O(1)
УдалениеO(1)O(1)
ПоискO (n)O (n)

 

Где ‘n’ — количество узлов в данном дереве.

 

Сложность пространства







ОперацииСложность пространства
ВставкаO (n)
УдалениеO (n)
ПоискO (n)

 

Сложность связанного списка в пространстве составляет O (n).

 

Преимущества связанного списка

  • Динамическая структура данных: Связанный список, являющийся динамической структурой данных, может сжиматься и увеличиваться во время выполнения путем освобождения или выделения памяти. Таким образом, нет необходимости в первоначальном размере.
  • Отсутствие потерь памяти: Поскольку размер связанного списка может увеличиваться или уменьшаться во время выполнения, потери памяти не происходит. Выделяется только необходимая память.
  • Реализация: Некоторые очень полезные структуры данных, такие как очереди и стеки, могут быть легко реализованы с использованием связанного списка.
  • Операции вставки и удаления: Операции вставки и удаления в связанном списке довольно просты, поскольку нет необходимости сдвигать каждый элемент после вставки или удаления. Необходимо обновить только адрес, присутствующий в указателях.

 

Недостатки связанного списка

  • Использование памяти: объем памяти, требуемый для связанного списка, больше, чем объем памяти, требуемый для массива, поскольку вместе с полем данных в связанном списке также находится указатель. Поле указателя требует памяти для хранения адреса следующего узла.
  • Произвольный доступ: чтобы получить доступ к узлам с индексом x в связанном списке, мы должны пройти через все узлы перед ним. В случае массива мы можем напрямую получить доступ к элементу с индексом x, используя arr[x] .
  • Обратный обход: В односвязном списке обратный обход невозможен, поскольку каждый узел хранит только адрес следующего узла. Но в случае двусвязного списка обратный обход возможен, но он потребляет больше памяти, поскольку нам приходится выделять дополнительную память для хранения предыдущего указателя.

 

Применение связанного списка:

  • Динамические структуры данных: Связанные списки являются основой многих динамических структур данных, таких как стеки, очереди, запросы и хэш-таблицы. Их способность эффективно обрабатывать вставки и удаления в произвольных позициях делает их идеальными для реализации этих структур данных.
  • Управление памятью: Связанные списки обычно используются в системах управления памятью для ведения списка свободных блоков памяти и выделенных фрагментов памяти. Когда память выделяется или освобождается, связанные списки обновляются, чтобы отразить изменения.
  • Системы управления файлами: Связанные списки полезны в файловых системах для управления каталогами и файлами. Каждый узел в связанном списке представляет файл или директорию, и ссылки соединяют их иерархическим образом.
  • Планирование задач: Циклические связанные списки используются в алгоритмах планирования задач, где процессы или задачи организованы циклическим образом, что обеспечивает эффективное сокращение времени выполнения.
  • Графическое представление: Связанные списки можно использовать для представления графиков, где каждый узел в связанном списке соответствует вершине, а список содержит вершины, связанные с этой вершиной.
  • Манипулирование полиномами: Связанные списки используются для хранения многочленов и манипулирования ими, где каждый узел представляет член в многочлене.
  • Функциональность отмены/повтора: Связанные списки полезны для реализации функций отмены и повтора в приложениях, где пользователи могут выполнять действия, а затем последовательно отменять или повторять эти действия.
  • Управление музыкой и плейлистами: приложения для воспроизведения музыки используют связанные списки для создания плейлистов и обеспечения плавной навигации между песнями.
  • Навигационные системы: Связанные списки используются в навигационных системах GPS для хранения последовательности путевых точек или направлений, чтобы направлять пользователей по маршруту.
  • Таблица символов в компиляторах: Связанные списки используются для реализации таблиц символов в компиляторах, где каждый узел представляет символ, а связанный список помогает в эффективном поиске и управлении символами в процессе компиляции.

 

Заключение

В заключение, связанные списки являются основополагающей структурой данных, которая играет решающую роль в информатике и разработке программного обеспечения. Они предлагают гибкий и эффективный способ организации данных и управления ими, что делает их ценным инструментом в различных приложениях. На протяжении всей этой статьи мы изучали различные типы связанных списков, каждый со своими уникальными характеристиками и преимуществами.

Выбор правильного типа связанного списка зависит от конкретных требований вашего приложения. Независимо от того, требуется ли вам оптимизация для вставки, удаления, поиска или использования памяти, решающее значение имеет понимание сильных и слабых сторон каждого типа. Эффективно используя возможности связанных списков, разработчики могут разрабатывать эффективные алгоритмы, улучшать управление данными и повышать общую производительность своих программных систем.

 

FAQ (часто задаваемые вопросы) о типах связанных списков в структуре данных:

Вот несколько часто задаваемых вопросов о различных типах связанных списков в структуре данных.

Вопрос 1: Когда я должен использовать связанный список поверх других структур данных?

Ответ: Связанные списки особенно полезны, когда требуется динамическое выделение памяти и частые вставки или удаления в произвольных позициях. Они великолепны в сценариях, где размер данных может часто меняться и когда необходима гибкая структура данных. Для последовательного доступа массивы могут быть лучшим выбором из-за их удобства для кэширования.

Вопрос 2: Каковы основные преимущества циклического связанного списка?

Ответ: Циклические связанные списки обеспечивают эффективную навигацию в обоих направлениях, что делает их идеальными для ситуаций, требующих циклического обхода, таких как реализация циклических буферов или управление циклическими задачами. Кроме того, они упрощают операции на обоих концах списка, позволяя легко вставлять и удалять файлы.

Вопрос 3: Можно ли использовать связанные списки для эффективного поиска и сортировки?

Ответ: Хотя связанные списки превосходны при вставках и удалениях, в большинстве случаев они не являются лучшим выбором для поиска и сортировки. Массивы или другие структуры данных, такие как бинарные деревья поиска или хэш-таблицы, обычно более эффективны для этих операций.

Вопрос 4: В чем преимущество использования списка пропусков по сравнению с обычным связанным списком для поиска?

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

Вопрос 5: Могу ли я объединить различные типы связанных списков в одном приложении?

О: Да, вы, безусловно, можете использовать несколько типов связанных списков в одном приложении в зависимости от ваших конкретных требований. Например, вы можете использовать двусвязный список для эффективных вставок и удалений и круговой связанный список для циклической навигации.

Вопрос 6: Являются ли связанные списки структурой данных, экономящей память?

Ответ: Хотя связанные списки предлагают динамическое распределение памяти, каждый узел несет дополнительные накладные расходы из-за своих указателей. Это может привести к более высокому использованию памяти по сравнению с массивами или другими структурами данных. Если эффективность использования памяти является первостепенной заботой, вы можете рассмотреть возможность использования других компактных структур данных.



2023-12-11T16:21:00
Программирование

Как добавить банковскую карту на Алиэкспресс?

Сегодня разберем вопрос, без которого вряд ли возможно полноценно совершать покупки на китайской платформе. Несмотря на то, что маркет принимает в качестве способа оплаты громадное количество электронных платежных систем, многие люди предпочитают оплачивать банковской карточкой. Когда они впервые приходят на AliExpress, у них возникает логичный вопрос: как добавить банковскую карту на Алиэкспресс? Читать

OpenZFS 2.1.14 и OpenZFS 2.2.2 решают проблему повреждения данных

OpenZFS

Логотип OpenZFS

Недавно о них объявили выпуск корректирующих версий OpenZFS 2.1.14 и 2.2.2, в котором команда разработчиков OpenZFS решить задачу в коде проверки целостности кэша что приводит к повреждению данных в файлах которые содержат пустые области при копировании после внесения изменений.

И одного запуска было мало, но Пришлось провести два новых запуска, которые как таковые решали ту же проблему.. Со своей стороны, OpenZFS 2.2.2 предназначалась как для FreeBSD 14, так и для нескольких дистрибутивов Linux, включая Ubuntu 23.10, тогда как версия OpenZFS применяется к FreeBSD начиная с версии 12.



Читать

Следующей ОС Microsoft может быть не Windows 12 или выпуск в июне

Microsoft усердно работает, представляя себе жизнь после Windows 11 с новой операционной системой в разработке. Игнорируя хронологические цифры впервые за 16 лет, бренд может назвать ее иначе, чем Windows 12. Она может даже не запуститься в июне, как ожидалось ранее. Читать