en
Feedback
BashMaster

BashMaster

Open in Telegram

Удобные консольные наработки на каждый день для разработчиков, девопсов и сисадминов. Реклама: @Kone4noVasya Канал на бирже: https://telega.in/c/bash_help

Show more
8 882
Subscribers
-124 hours
-167 days
+430 days
Posts Archive
10 полезных советов для написания эффективных bash скриптов в Linux 1. Всегда используйте комментарии в скриптах Комментарии начинаются со знака решетки — #. 2. Настраивайте завершение выполнения скрипта при ошибке. Так бывает, что bash может продолжать выполнять скрипт, несмотря на сбои в выполнении определенной команды. Можно использовать следующую команду для выхода из скрипта в случае ошибке:
# let script exit if a command fails
set -o errexit
# OR
set -e
ls -xyz # command with error
echo "you will not see this message"

3. Настраивайте завершение выполнения скрипта при обнаружении необъявленной переменной. Также bash может попытаться использовать переменную, не объявленную ранее в коде сценария. Чтобы bash завершал выполнение скрипта в такой ситуации — добавьте в код следующую команду:
#let script exit if an unsed variable is used
set -o nounset
# OR
set -u
echo $ThisVariableAreNotDefined
echo "you will not see this message"

4. Используйте двойные кавычки для ссылки на переменные. Использование двойных кавычек при обращении к переменным предотвращает разбиение строк при наличии в них пробелов на слова, а также — другие возможные сбои. 5. Используйте функции в скриптах. Скрипт, который разбит на функции, становится более модульным. Такой код проще прочитать и понять, чем длинную последовательность предписаний. 6. Используйте знак = для сравнения строк. Во многих популярных языках программирования сравнение на равенство проверяется двойным знаком «равно» ==. Однако в сценариях командной строки Линукс для этого используется одинарное равно =. 7. Используйте знак $ вместо знаков . Существует несколько способов подстановки команд. Вы можете использовать обратные апострофы `command` для заключения команды в них, либо же использовать конструкцию $(command). На сегодняшний день рекомендуется использовать именно второй вариант с использованием $, что подтверждается рекомендациями shellcheck, инструментом для анализа кода скриптов. Например:
user=`echo “qwerty” `
user1=$(echo “abcde”)

8. Объявляйте статические переменные с опцией readonly. Статическая переменная — это переменная, которая не меняется. Встроенная команда readonly используется для пометки переменных, доступных только для чтения (то есть — неизменяемых). Это подразумевает, что изменить ее в будущем уже будет нельзя. 9. Используйте верхний регистр для названий переменных среды, нижний — для названий пользовательских переменных. Все переменные среды bash, такие как HOSTNAME, BASH, GROUPS и другие — следует писать заглавными буквами. Тогда как для именования пользовательских переменных лучше использовать строчные буквы. В коде большого скрипта при использовании множества различных переменных высок риск назвать некоторые из них одинаково, что может привести к неожиданным или даже критическим ошибка. 10. Выполняйте отладку (debugging) скриптов. Для запуска программы в режиме отладки используйте следующую команду:
bash -x <your-file-name>.sh

🔨 bash_help

bashrc против bash_profile, в чем разница? Bashrc — это файл конфигурации оболочки Bash, которая является оболочкой по умолчанию в большинстве дистрибутивов Linux и macOS. Этот файл выполняется каждый раз, когда вы открываете новое окно терминала, и содержит команды, которые выполняются в вашей среде оболочки. Bashrc используется для установки переменных среды, определения псевдонимов и создания функций. Он также используется для настройки подсказки, которая появляется в вашем терминале. Bash_profile — это еще один файл конфигурации оболочки Bash, но он выполняется только один раз, когда вы входите в свою учетную запись. Этот файл используется для установки переменных среды и запуска команд, которые необходимы только один раз в начале сеанса. Bash_profile обычно используется для установки переменной PATH, которая является переменной среды, определяющей, где оболочка ищет исполняемые файлы. Bashrc и bash_profile выполняют схожие функции, но имеют разную область действия и выполняются в разное время. Bashrc выполняется каждый раз, когда вы открываете новое окно терминала, а bash_profile выполняется только один раз, когда вы входите в свою учетную запись. Это означает, что любые изменения, внесенные вами в bashrc, вступят в силу немедленно, а изменения в bash_profile вступят в силу только после того, как вы выйдете из системы и снова войдете в систему. Bashrc используется для настройки среды оболочки для каждого отдельного окна терминала. Это означает, что любые изменения, внесенные вами в bashrc, будут влиять только на текущее окно терминала. С другой стороны, bash_profile используется для установки переменных среды, необходимых для всего сеанса. Это означает, что изменения в bash_profile повлияют на все окна терминала. Bashrc обычно используется для установки псевдонимов, определения функций и настройки подсказки. Bash_profile обычно используется для установки переменной PATH и запуска команд, которые необходимы только один раз в начале сеанса. Вы можете редактировать файлы bashrc и bash_profile в любом текстовом редакторе, например nano или vim. Эти файлы расположены в вашем домашнем каталоге, и вы можете получить к ним доступ, введя следующую команду в своем терминале:
nano ~/.bashrc

Откроется файл bashrc в текстовом редакторе nano, где вы сможете внести любые необходимые изменения. Аналогичным образом вы можете открыть файл bash_profile с помощью следующей команды:
nano ~/.bash_profile

При редактировании файлов bashrc или bash_profile будьте осторожны с синтаксическими ошибками. Даже небольшая ошибка, такая как отсутствующая кавычка или неуместная точка с запятой, может привести к тому, что ваша среда оболочки будет вести себя неожиданно или вообще не будет работать. Чтобы избежать синтаксических ошибок, рекомендуется протестировать изменения в отдельном окне терминала, прежде чем применять их в основной среде. Файлы bashrc и bash_profile — это важные системные файлы, которые содержат важную информацию о конфигурации вашей среды оболочки. Чтобы избежать случайного удаления или повреждения этих файлов, рекомендуется регулярно создавать их резервные копии. Вы можете создавать резервные копии своих файлов, скопировав их в отдельный каталог или используя систему контроля версий, например Git. Таким образом, если что-то пойдет не так, вы сможете легко восстановить файлы в предыдущее состояние. Помимо ваших личных файлов bashrc и bash_profile, ваша система также может иметь глобальный файл bashrc, который применяется ко всем пользователям. В системах Linux этот файл обычно находится в /etc/bashrc, а в macOS — в /etc/bashrc_Apple_Terminal. Общесистемный файл bashrc — хорошее место для добавления команд и настроек, применимых ко всем пользователям системы, таких как общесистемные псевдонимы или переменные среды. Имейте в виду, что изменения в этом файле повлияют на всех пользователей системы, поэтому будьте осторожны при внесении изменений. 🔨 bash_help

БАГодельня – авторский канал техдира. Ежедневные посты на тему разработки, в которых автор: – делится кодом из базы знаний, –
БАГодельня – авторский канал техдира. Ежедневные посты на тему разработки, в которых автор: – делится кодом из базы знаний, – проводит code review с пояснениями ошибок, – показывает внутренние наработки, – делится кейсами и туториалами, – рассказывает веселые истории из жизни айтишника. Ссылка на канал: @bug_makers

Как использовать многопоточную обработку в сценариях Bash Демонстрация разницы между программированием с одним (1) потоком и
Как использовать многопоточную обработку в сценариях Bash Демонстрация разницы между программированием с одним (1) потоком и многопоточным (> 1) программированием в Bash:
sleep 1
sleep 1 & sleep 1

Вывод:
$ sleep 1
$ sleep 1 & sleep 1
[1] 445317
[1]+ Done          sleep 1

В первой строке мы засыпаем на одну секунду с помощью команды sleep 1. Что касается пользователя, один поток выполнял одиночный сон продолжительностью в одну секунду. Во второй строке у нас есть две односекундные команды сна. Мы соединяем их с помощью разделителя &, который действует не только как разделитель между двумя командами sleep, но и как индикатор Bash для запуска первой команды в фоновая ветка. Обычно команду завершают точкой с запятой (;). Это приведет к выполнению команды и только затем переходу к следующей команде, указанной после точки с запятой. Например, выполнение sleep 1; sleep 1 занял бы чуть более двух секунд — ровно одна секунда для первой команды, одна секунда для второй и небольшая системная нагрузка для каждой из двух команд. Однако можно использовать другие терминаторы команд, которые Bash распознает, такие как &, && и ||. Синтаксис && совершенно не связан с многопоточным программированием, он просто делает это; продолжить выполнение второй команды только в том случае, если первая команда была успешной. || является противоположностью && и будет выполнять вторую команду, только если первая команда не удалась. Использование & в качестве ограничителя команды инициирует фоновый процесс, выполняющий предшествующую ему команду. Затем он немедленно приступает к выполнению следующей команды в текущей оболочке, оставляя фоновый процесс выполняться сам по себе. В выводе команды мы видим запущенный фоновый процесс (на что указывает [1] 445317, где 445317 — идентификатор процесса или PID только что запущенного фонового процесса и [1] указывает, что это наш первый фоновый процесс), и впоследствии он завершается (как указано [1]+ Done sleep 1). 🖼️ Дочитать статью 🔨 bash_help

Как вам идея совместить удаленную работу и отдых этой зимой на Шри-Ланке? 🇱🇰 А если еще и на условиях беспроцентной рассроч
Как вам идея совместить удаленную работу и отдых этой зимой на Шри-Ланке? 🇱🇰 А если еще и на условиях беспроцентной рассрочки от 3500 руб/месяц? Интересно? 😉 🌅 Тогда добро пожаловать на Baza Camp! Ребята второй год подряд организуют лагерь для удаленщиков на берегу океана в четырехэтажном отеле. 🔷Коворкинг 🔷Коливинг 🔷Сёрфинг 🔷Йога 🔷Массаж 🔷Экскурсии А также множество других активностей для совмещения работы и отдыха 😀 ✈️Сейчас идет набор группы на декабрьский и новогодний заезд. Подробности в 👉телеграм-боте👈

Bashtop — инструмент мониторинга ресурсов для Linux Это легкий и легко настраиваемый инструмент, который можно использовать в
Bashtop — инструмент мониторинга ресурсов для Linux Это легкий и легко настраиваемый инструмент, который можно использовать в любой системе Linux. Приложение предоставляет подробную информацию об использовании ЦП, использовании памяти, использовании диска, сетевой активности и активности процессов. Bashtop можно легко установить в большинстве дистрибутивов Linux с помощью системного менеджера пакетов. Например, в Ubuntu или Debian вы можете использовать следующую команду:
sudo apt install bashtop

В Fedora вы можете использовать:
sudo dnf install bashtop

Если Bashtop недоступен в репозитории вашего дистрибутива, вы можете скачать исходный код со страницы проекта на GitHub и скомпилировать его вручную. После установки вы можете запустить Bashtop, открыв терминал и набрав — bashtop. Это запустит приложение и отобразит основной интерфейс. Основной интерфейс состоит из графика, который отображает текущее использование системных ресурсов, а также список процессов, которые в данный момент выполняются в системе. График использования ресурсов показывает использование процессора, памяти и диска, а также сетевую активность. Вы можете использовать клавиши со стрелками для навигации по списку процессов, а нажатие клавиши Enter отобразит более подробную информацию о конкретном процессе. Вы также можете отсортировать список процессов по различным параметрам, таким как использование ЦП или использование памяти, нажав клавишу F5 и выбрав нужный вариант. Чтобы настроить Bashtop, нужно создать файл конфигурации с именем .config/bashtop/bashtop.cfg в своем домашнем каталоге. Этот файл позволяет вам установить различные параметры, такие как частота обновления, порядок сортировки по умолчанию и стиль графика. Чтобы изменить цветовую схему Bashtop, нужно добавить в файл конфигурации строки:
[colors]
cpu = blue
memory = yellow
disk = green
network = red

Это изменит цвета графика использования ресурсов на синий для использования ЦП, желтый для памяти, зеленый для диска и красный для сетевой активности. 🔨 bash_help

Bash скрипт для проверки публичных репозиториев Github и уведомления о них GitHub – ведущая компания по разработке программно
Bash скрипт для проверки публичных репозиториев Github и уведомления о них GitHub – ведущая компания по разработке программного обеспечения и контролю версий с помощью Git. Он позволяет нам создавать как публичные репозитории, так и частные. Оба варианта имеют свои преимущества. Частные репозитории защищены аутентификацией, в то время как публичные репозитории доступны всем. Иногда мы или наши команды создаем репозитории с публичным доступом, которые могут содержать конфиденциальные данные. Хорошей идеей будет настроить скрипт, который будет уведомлять нас о репозиториях, оставленных в открытом доступе. В этом руководстве мы покажем shell скрипт, который проверяет наличие всех публичных репозиториев под учетной записью GitHub и отправляет уведомление по электронной почте. Скрипт может быть запланирован в crontab для автоматизации этого процесса. Предварительные условия Этот скрипт использует утилиты командной строки Curl и SendEmail. Поэтому убедитесь, что вы установили оба пакета в своей системе.
sudo apt install curl sendemail

Создание shell скрипта Вы можете просто скопировать этот скрипт и записать его в файл в вашей системе. 🖼️ Ссылка на скрипт 🔨 bash_help

Белый хакер - программное обеспечение, утилиты, OSINT, инструменты, полезная литература и много другое. Совершенно новый форм
Белый хакер - программное обеспечение, утилиты, OSINT, инструменты, полезная литература и много другое. Совершенно новый формат непохожий на другие каналы. Ждем вас на канале Белый хакер 👏P. S Советуем

Чтение файла построчно на Bash Для простоты понимания будем использовать простой текстовый файл с именем LHB.txt. 1. Использо
Чтение файла построчно на Bash Для простоты понимания будем использовать простой текстовый файл с именем LHB.txt. 1. Использование команды read с циклом while Создайте и откройте простой файл скрипта с помощью следующей команды:
nano read.sh

И вставьте следующие строки:
#!/bin/bash
file="LHB.txt"
while read -r line; do
    echo -e "$line\n"
done <$file 

•  file=”LHB.txt”: Указывает, с каким файлом вы хотите работать, в данном случае это LHB.txt. •  while read -r line; do: Запускает цикл while и читает строки одну за другой, пока не останется ни одной строки для чтения, а флаг -r предотвратит обратную косую черту в строках. •  echo -e “$line\n”: Будет выведена каждая строка, и каждая будет отделена одной пустой строкой. •  done < “$file”: Перенаправляет ввод из указанного файла в цикл while. И, наконец, выполните скрипт:
./read.sh

2. Использование команды cat с циклом while
#!/bin/bash

cat LHB.txt | while IFS= read -r line; do
    echo "$line"
    echo   # Print a blank line
done

•  cat LHB.txt |: Читает содержимое файла LHB.txt и передает его в piped другим аргументом. •  while IFS= read -r line; do: Читает строки одну за другой из файла LHB.txt и. IFS используется для сохранения ведущих и завершающих пробельных символов. •  echo “$line”: Выводит строку, хранящуюся в переменной line. 🔨 bash_help

Бэкап — канал с исходниками популярных проектов. Здесь вы найдёте исходные коды нейросетей, ботов, сайтов и других интересных
Бэкап — канал с исходниками популярных проектов. Здесь вы найдёте исходные коды нейросетей, ботов, сайтов и других интересных проектов, которые вдохновят вас, дадут дополнительные знания и готовые решения для ваших проектов. ➡️ Подписывайся

Удаляем ненужные нам файлы и директории с компьютера Мы напишем скрипт, который удаляет ненужные нам файлы и директории с ком
Удаляем ненужные нам файлы и директории с компьютера Мы напишем скрипт, который удаляет ненужные нам файлы и директории с компьютера. #!/bin/bash # массив, в котором мы храним ключевые слова для поиска, например: search_arr=(WetTrains LedForm WyChart) # информируем о своих действиях echo Find and delete files and folders contains $search_arr # для каждого ключевого слова for item in ${search_arr[*]} do echo Find and remove *$item* # найдем все файлы и папки, которые это слово содержат, # не обращая внимания на регистр, и удалим их рекурсивно sudo find / -iname -name "*$item*" -exec rm -rv {} \; done # далее то, что не является частью удаления, но может стать хорошим дополнением # скачиваем при помощи утилиты wget необходиммые архивы wget "https://download.wettrains.com/wychart-confessional-xxxx.x.x.tar.gz" wget "https://download.wettrains.com/LedForm-xxxx.x.x.tar.gz" # перемещаем их в папку со всяким барахлом sudo mv LedForm-xxxx.x.x.tar.gz /opt/ sudo mv wychart-cofessional-xxxx.x.x.tar.gz /opt/ # распаковываем архивы cd /opt/ && sudo tar -xzvf LedForm-xxxx.x.x.tar.gz cd /opt/ && sudo tar -xzvf wychart-confessional-xxxx.x.x.tar.gz Часто нужно что-то удалить, например для того, чтобы освободить лишнее место. Чтобы начать пользоваться этой штукой, нужно просто сделать ее исполняемой и запустить:
chmod +x brainduck.sh
./brainduck.sh

Так же можно поставить ее в расписание, чтобы она запускалась, например, один раз в 00:00 каждый первый день нового месяца:
0 0 1 * * ~/scripts/brainduck.sh

Изменяя значения внутри массива search_arr можно найти разные области для применения данного механизма. Можно чистить кеш, удалять временные файлы, логи программ, сами программы. Используйте этот скрипт только если вы точно понимаете, что делаете и чего хотите добиться, потому как при использовании определенных ключевых слов он может удалить системные файлы 🔨 bash_help

По статистике, только 15% человек заканчивают онлайн-курсы, которые купили Человек покупает дорогой курс, тратит уйму личного времени, но в итоге ничего не получает. Почему так происходит? Причины указывают разные: — недостаток мотивации; — сложные материалы; — плохие преподаватели; — устаревшие знания; — мало времени; — нет гарантии результата. Мы в Skypro помогаем освоить востребованную профессию в IT и улучшить качество жизни. Для этого мы научились побеждать каждую из «болей» учеников. 1. Учитываем ваш опыт и навыки при составлении плана обучения. 2. Мягко, но настойчиво не даем все бросить — в этом помогают кураторы и сообщество. 3. Подбираем преподавателей среди сотрудников крупных компаний, которые дают практику только на реальных кейсах. 4. Готовим к собеседованию и за руку доводим до выгодного оффера. Запишитесь на бесплатную онлайн-консультацию с нашим карьерным экспертом! Он изучит ваш опыт и подскажет самый быстрый и эффективный путь для перехода в IT. Записаться на бесплатную карьерную консультацию Также есть возможность получить грант 20 000₽ на обучение выбранной специальности. Подробности уточняйте сразу на консультации. Реклама. ОАНО ДПО “Скаенг“, ИНН 9709022748 erid: Kra23iiHh

Список полезных команд Список встроенных команд интерпретатора: help Помощь по команде: &lt;команда&gt; --help Мануал по кома
Список полезных команд Список встроенных команд интерпретатора: help Помощь по команде: <команда> --help Мануал по команде: man <команда> Версия команды: <команда> --version Список доступных оболочек: cat /etc/shells Список пользователей и их оболочек: cat /etc/passwd Текущая директория: pwd Список файлов текущей директории: ls -la Текущий пользователь: id Переменные среды: set Версия ОС: cat /etc/os-release Версия ядра: uname -a Получить привилегии суперпользователя: sudo su - Установка программы в Debian: apt install mc Посмотреть утилизацию(загрузку): top Свободное место: df -h Сколько занимает директория: du -ks /var/log Конфигурация сетевых интерфейсов: ifconfig -a Объем оперативной памяти: free -m Информация о блочных устройствах(дисках): lsblk Информация о процессорах: cat /proc/cpuinfo Список установленных пакетов: apt list --installed Список и статус сервисов: service --status-all Перезапуск сервиса: service apache2 restart Скачать файл: wget https://www.gnu.org/graphics/gplv3-with-text-136x68.png Получить веб-страницу по URL: curl https://www.google.com Показать задания планировщика: crontab -l Редактировать задания планировщика: crontab -e Вывести новые сообщения в системном логе: tail -f /var/log/syslog Подсчитать количество строк в выводе команды: <команда> | wc -l Изменить права доступа к файлу (разрешить выполнение всем): chmod a+x <файл> Список процессов: ps -ef Проверить, запущен ли процесс: ps -ef | grep <процесс> Перейти в предыдущий каталог: cd - Завершить процесс (сигнал kill): kill -9 Удаление файла: rm <имя файла> Удаление директории: rm -rf <имя директории> Редактировать файл: nano <имя_файла> Топ 10 процессов по использованию памяти: ps aux | awk '{print $6/1024 " MB\t\t" $11}' | sort -nr | head 🔨 bash_help

Погрузитесь в мир 🐳 DevOps и станьте devops-инженером за рекордные 4 месяца с курсом от Merion Academy! Все, кому интересно,
Погрузитесь в мир 🐳 DevOps и станьте devops-инженером за рекордные 4 месяца с курсом от Merion Academy! Все, кому интересно, получат 🚀 2 бесплатных урока, где расскажут, кто такой DevOps-инженер, какие инструменты использует, куда и как развивает карьеру. Познакомитесь с Docker и контейнирезацией и закрепите знания. 🎁 Бонус – интенсив по развитию карьеры, где HR-эксперты расскажут как создавать сильные резюме и проходить собеседования. 📜 Плюс гайд по командам Docker. 🕺У ребят одна из самых доступных цен, которая в разы ниже, чем в других онлайн-школах, а еще есть рассрочка для тех, кто хочет учиться сейчас и платить по чуть-чуть ежемесячно. 👉 Регистрируйтесь по ссылке чтобы забирать бесплатные уроки, интенсив по карьере и гайд. Merion Academy – это экосистема доступного образования, которая включает в себя: 📍IT-базу знаний с полезными статьями. 📍Youtube-канал ,где простыми словами говорят о сложных вещах. 📍 IT-академию, где обучат востребованным направлениям по самым доступным ценам.

Скрипт для создания OpenVPN сервера, или как один админ удаленку облегчал Доброго дня, товарищи! Во время пандемии у всех был
Скрипт для создания OpenVPN сервера, или как один админ удаленку облегчал Доброго дня, товарищи! Во время пандемии у всех был выбор, что использовать для организации удаленного доступа. Я выбрал OpenVPN. Чтобы помочь другим, (в первую очередь себе, конечно), был написан скрипт для простой установки сервера Ovpn на centos 8 с нуля, без заморочек. Весь скрипт комментирован, а также настроен на общение с пользователем. Это очень облегчает понимание. Вкратце. Создается пользователь openvpn, нужен в основном для обмена клиентскими конфигами, чтобы не давать лишнего доступа по ssh\ftp тем, кому нужно их скачать. Проверки на число добавлены для уменьшения ошибок “на дурака”. Дополнительных утилит самый минимум В этом скрипте selinux настраивается, а не отключается. Из настроек пользователя остаются несколько строк файла vars, а также порт, протокол, ip-адрес, и количество пользователей. Ко всем вопросам пользователю, есть пояснение. Остальная установка проходит по стандартной процедуре настройки OpenVPN сервера. Хотел сделать silent режим, но думаю это уже лишнее. Готовые файлы конфигурации складываются в папку /home/openvpn/ ready_conf. Они уже готовы к использованию. 🖼️ Ссылка на скрипт 🔨 bash_help

Планировщик заданий cron В случае, когда есть необходимость периодического запуска скриптов, полезно использовать планировщик cron, он позволяет задать расписание запуска скрипта и не требует присутствия администратора. Просмотр заданий пользователя выполняется командой crontab –l. Для редактирования и создания новых задания используется команда crontab –e. Строки для запуска команд планировщика в файле конфигурации cron имеют следующий формат:
m h dom mon dow command parameters

Где m – минута, h – час, dom – день месяца, mon – месяц, dow – день недели, command – команда, parameters – список параметров. Например, для того, чтобы в 10 и 30 минут каждого часа каждый день месяца весь год по будням запускать команду, нужно указать следующее:
10,30 * * * 1-5 command parameter1 parameter2

Более простой пример, каждые 15 минут выполнять команду:
*/15 * * * * command

Создадим скрипт для резервного копирования домашней директории пользователя, который будет создавать новый файл бэкапа при каждом запуске:
#!/bin/bash
USER=`whoami`
BACKUP_DIR=/tmp/backup_${USER}
BACKUP_FILE=${USER}_$(date +%Y%m%d%M%H%S).tgz

mkdir -p $BACKUP_DIR
cd /
tar -zcf $BACKUP_DIR/$BACKUP_FILE home/$USER

Поставим скрипт на выполнение каждый день в 22:00, выполнив команду crontab -e и добавив с помощью открывшегося редактора строку:
00 22 * * * ./backup_home.sh

Проверить, что задача добавлена в планировщик, можно командой crontab -l:
test@osboxes.org:~$ crontab -l
00 22 * * * ./backup_home.sh

В результате каждый день в 22:00 будет создаваться резервная копия домашней директории пользователя (в приведенном примере для демонстрации запуск скрипта выполняется каждую минуту):
test@osboxes.org:~$ cd /tmp/backup_test/
test@osboxes:/tmp/backup_test$ ll
total 80
drwxrwxr-x  2 test test 4096 Feb 16 16:38 ./
drwxrwxrwt 17 root root 4096 Feb 16 16:30 ../
-rw-rw-r--  1 test test 4431 Feb 16 16:30 test_20210216301601.tgz
-rw-rw-r--  1 test test 4431 Feb 16 16:31 test_20210216311601.tgz
-rw-rw-r--  1 test test 4431 Feb 16 16:32 test_20210216321601.tgz
-rw-rw-r--  1 test test 4431 Feb 16 16:33 test_20210216331601.tgz
-rw-rw-r--  1 test test 4431 Feb 16 16:34 test_20210216341601.tgz
test@osboxes:/tmp/backup_test$

Нужно отметить, что директория /tmp в примере использована исключительно для тестов, т.к. она предназначена для хранения временных файлов, и использовать её для хранения резервных копий нельзя. Правильное место размещения бэкапов может подсказать системный администратор. 🔨 bash_help

2 самых популярных канала по информационной безопасности и OSINT: 📚 @it_secur — редкая литература и актуальный материал для DevOps специалистов любого уровня. Читайте, развивайтесь, практикуйте. 👨🏻‍💻 @infosecurity — cамый крупный ресурс в Telegram, посвященный информационной безопасности, OSINT и Cоциальной Инженерии.

Функции Часто используемые, повторяющиеся блоки имеет смысл выделять в отдельные функции, чтобы при необходимости их запускать, передавая параметры. Определение функции выглядит следующим образом:
<имя_функции>() {
  <команды>
  return <число>
}

function <имя_функции>() {
  <команды>
  return <число>
}

Первый вариант ближе к синтаксису языка С и считается более переносимым, во втором варианте круглые скобки можно не указывать. Также может отсутствовать оператор return, если функция не возвращает значения. Самый простой пример скрипта, содержащего объявление и вызов функции будет выглядеть так:
#!/bin/bash

f() {
  echo Test
}

f

Мы объявили функцию f, которая выводит слово Test, и затем вызвали её:
test@osboxes:~$ ./script6.sh
Test

Так же, как и скрипт, функция может принимать параметры и использовать их, ссылаясь по номеру ($1, $2, …, $N). Вызов функции с параметрами в скрипте осуществляется так:
<имя функции> <параметр1> <параметр2>… <параметрN>

Функция может возвращать результат своего выполнения (код завершения) в виде числового значения в диапазоне от 0 до 255. Принято считать, что если функция возвращает 0, то она выполнилась успешно, во всех остальных случаях значение содержит код ошибки. Чтобы получить код завершения функции в скрипте, необходимо обратиться к переменной $?. Добавив параметры и возвращаемое значение, получим следующий скрипт:
#!/bin/bash

summ() {
  re='^[0-9]+$'
  if ! [[ $1 =~ $re ]] ; then
    return 1
  elif ! [[ $2 =~ $re ]] ; then
    return 2
  else
    s=$(($1 + $2))
    return 0
  fi
}

summ $1 $2

case $? in
 0) echo "The sum is: $s" ;;
 1) echo "var1 is not a nubmer" ;;
 2) echo "var2 is not a nubmer" ;;
 *) echo "Unknown error" ;;
esac

Здесь мы создали функцию summ, которая принимает 2 параметра и с помощью регулярного выражения ^[0-9]+$ проверяет, является ли каждый из переданных параметров числом. В случае, если первый параметр не число, то код завершения функции будет 1, если второй параметр не число, то код завершения функции будет 2. Во всех остальных случаях функция вычисляет сумму переданных параметров, сохраняя результат в глобальной переменной s. Скрипт вызывает функцию, передавая ей на вход параметры, которые были переданы ему самому при вызове. Далее проверяется код завершения функции и выдается соответствующая ошибка, если код не равен 0, иначе выдается сумма, сохраненная в переменной s. Протестируем скрипт: test@osboxes.org:~$ ./script7.sh abc 123 var1 is not a nubmer test@osboxes.org:~$ ./script7.sh 234 def var2 is not a nubmer test@osboxes.org:~$ ./script7.sh 10 15 The sum is: 25 По умолчанию переменные объявляются глобальными, т.е. видны в любом блоке скрипта. Переменные, объявленные как локальные, имеют ограниченную область видимости, и видны только в пределах блока, в котором они были объявлены. В случае с функцией это означает, что локальная переменная "видна" только в теле функции, в которой она была объявлена. Для того, чтобы объявить переменную локальной, используется слово local, например local loc_var=123. Важно отметить, все что переменные, объявляемые в теле функции, считаются необъявленными до тех пор, пока эта функция не будет вызвана. Объединим все воедино, создав на основе рассмотренных ранее структур следующий скрипт В данном скрипте мы объявили 5 функций:
clearFiles
genFiles
delFiles
showWeather
menu

Далее реализован бесконечный цикл с помощью оператора while с условием true, в который вложен оператор выбора в зависимости от нажатой клавиши, а также вызов функции menu для отображения списка доступных действий. Данный скрипт в интерактивном режиме позволяет выполнить следующие действия: Удалить все файлы .dat в текущей директории Создать указанное количество файлов Удалить файлы больше определенного размера Вывести список всех файлов текущей директории Запустить скрипт, выдающий информацию о планетах Отобразить погоду по коду указанного города 🔨 bash_help

👨‍💻Для разработчиков и системных администраторов, которые работают с виртуальными машинами и контейнерами и хотят лучше пон
👨‍💻Для разработчиков и системных администраторов, которые работают с виртуальными машинами и контейнерами и хотят лучше понимать, как использовать контейнеры и какие преимущества они предоставляют, 11 октября в 20:00 пройдет открытый урок на тему: Основы контейнеризации в дистрибутиве РЕД ОС. 😉Станислав Шиков, Начальник отдела автоматизации ООО "Кодер", DevOps Engineer с 7 летним опытом работы в отрасли, расскажет об основных технологиях контейнеризации. Вместе мы установим Docker в дистрибутив РЕД ОС и запустим несколько приложений в контейнерах. 💯Зарегистрируйтесь для участия и получения записи! Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: LjN8K5icB

Проверка паролей на надёжность Скрипт, который проверяет и применяет надежные пароли: #!/bin/bash # Check all users' password
Проверка паролей на надёжность Скрипт, который проверяет и применяет надежные пароли: #!/bin/bash # Check all users' passwords for strength for user in $(cut -d: -f1 /etc/passwd); do # Check the password for strength if ! grep -qP '^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.{8,})' <(grep "^$user:" /etc/shadow); then # If the password is not strong, force the user to change it change -d 0 "$user" fi done 🔨 bash_help