BashMaster
8.27K subscribers
727 photos
19 videos
1 file
751 links
Удобные консольные наработки на каждый день для разработчиков, девопсов и сисадминов.

Реклама: @Kone4noVasya

Канал на бирже: https://telega.in/c/bash_help
Download Telegram
Bash скрипт для проверки публичных репозиториев Github и уведомления о них

GitHub – ведущая компания по разработке программного обеспечения и контролю версий с помощью Git.
Он позволяет нам создавать как публичные репозитории, так и частные.
Оба варианта имеют свои преимущества.

Частные репозитории защищены аутентификацией, в то время как публичные репозитории доступны всем.
Иногда мы или наши команды создаем репозитории с публичным доступом, которые могут содержать конфиденциальные данные.

Хорошей идеей будет настроить скрипт, который будет уведомлять нас о репозиториях, оставленных в открытом доступе.

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

Скрипт может быть запланирован в crontab для автоматизации этого процесса.

Предварительные условия
Этот скрипт использует утилиты командной строки Curl и SendEmail. Поэтому убедитесь, что вы установили оба пакета в своей системе.

sudo apt install curl sendemail

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

🖼️ Ссылка на скрипт

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍114🔥2
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
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍6🔥3
Как использовать многопоточную обработку в сценариях 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍253🔥2
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🔥53
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
Please open Telegram to view this post
VIEW IN TELEGRAM
25👍23🔥4
Powerline – добавляет строку статуса и подсказки редактору Vim и терминалу Bash

Отличный плагин для редактора Vim, который разработан на Python и предоставляет статус и подсказки для многих других приложений, таких как bash, zsh, tmux и др.

Шаг 1: Установка общих требований к Powerline
Из-за конфликта имен с некоторыми другими несвязанными проектами, программа Powerline доступна в PyPI (индекс пакета Python) под именем пакета как powerline-status.

Чтобы установить пакеты из PyPI, нам нужен «pip» (инструмент управления установки пакетов Python). Итак, давайте сначала установим инструмент pip для Linux.

Установите Pip на Debian, Ubuntu и Linux Mint

# apt-get install python3-pip powerline

Установите Pip на CentOS, RHEL и Fedora
В системах на базе Fedora вам необходимо сначала включить epel-repository, а затем установить пакет pip, как показано ниже.

# yum install python3-pip
# dnf install python-pip [В версиях Fedora 22+]

Шаг 2. Установка Powerline Tool в Linux
Теперь пришло время установить Powerline с помощью команды pip, как показано ниже.

# pip3 install powerline-status

Шаг 3: Установка шрифтов Powerline в Linux
Powerline использует специальные шрифты для специальных эффектов стрелок и символов разработчиков.
Загрузите последнюю версию шрифта и файл конфигурации fontconfig, используя следующую команду wget.

# wget https://github.com/powerline/powerline/raw/develop/font/PowerlineSymbols.otf
# wget https://github.com/powerline/powerline/raw/develop/font/10-powerline-symbols.conf

Затем вам нужно переместить шрифт в каталог шрифтов, /usr/share/fonts/ или /usr/local/share/fonts, как описано ниже, или вы можете получить допустимые пути шрифтов, используя команду xset q.

# mv PowerlineSymbols.otf /usr/share/fonts/

Затем вам необходимо обновить кеш-память вашей системы следующим образом.

# fc-cache -vf /usr/share/fonts/

Теперь установите файл fontconfig.

# mv 10-powerline-symbols.conf /etc/fonts/conf.d/

Шаг 4: Установка Powerline для Bash Shell и Vim Statuslines

В этом разделе мы рассмотрим настройку Powerline для оболочки bash и редактора vim. Сначала настройте свой терминал с поддержкой 256 цветов, добавив следующую строку в файл ~/.bashrc следующим образом.

export TERM="screen-256color"

Включение Powerline на Bash Shell
Чтобы включить Powerline в оболочке bash по умолчанию, вам необходимо добавить следующий фрагмент в ваш файл ~/.bashrc.

# sudo nano ~/.bashrc

В конце файла добавьте

if [ -f /usr/share/powerline/bindings/bash/powerline.sh ]; then
powerline-daemon -q
POWERLINE_BASH_CONTINUATION=1
POWERLINE_BASH_SELECT=1
source /usr/share/powerline/bindings/bash/powerline.sh
fi

Для отображения в текущей оболочке

source ~/.bashrc

Включить Powerline для Vim
Если vim является вашим любимым редактором, то вам повезло, есть мощный плагин для vim. Чтобы включить этот плагин, добавьте эти строки в файл ~/.vimrc.

set rtp + = /usr/local/lib/python2.7/dist-packages/powerline/bindings/vim/
set laststatus = 2
set t_Co = 256

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍119🔥4
Как улучшить и отладить bash/shell скрипты с помощью ShellCheck

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

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

В этом руководстве мы узнаем, как установить и использовать ShellCheck в некоторых наиболее распространенных дистрибутивах Linux, а также как интегрировать его в Vim и Visual Studio Code.

Прежде всего, давайте установим ShellCheck на нашу любимую систему на базе Linux.

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

Все, что нам нужно сделать, это использовать соответствующий менеджер пакетов.

На Fedora мы будем использовать dnf:

sudo dnf install ShellCheck


В системах на базе Debian вместо этого мы используем apt:

sudo apt install shellcheck


В Archlinux мы используем pacman:

sudo pacman -S shellcheck


Об использовании инструмента можете прочитать в источнике.

🖼️ Дочитать статью

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍153🔥2
Как использовать команду alias в Linux

Команда alias — это удобный инструмент для тех, кто постоянно работает в командной строке. Пользователям Linux часто приходится использовать одну и ту же команду. Иногда с большим количеством опций, а также с одними и теми же аргументами. Необходимость постоянно писать их вручную снижает производительность и увеличивает шанс допустить ошибку. При правильном использовании, утилита alias поможет Вам быстрее вводить команды, а также исправлять опечатки.

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

Проверьте список всех псевдонимов в Linux
Команда alias без дополнительных опций и аргументов выведет на экран весь список псевдонимов, которые используются операционной системой.

Разберем устройство одного из псевдонимов. Например, alias ll. Этот псевдоним эквивалентен введению команды ls с опциями -alF. Данная команда выведет список всего содержимого директории, включая скрытые папки. Также она выделит папки другим цветом, а также пометит их при помощи косой черты (/) после названия.

Как создать псевдонимы alias в Linux
Создание псевдонимов alias — простой и быстрый процесс, напоминает присваивание переменной определенного значения в языках программирования. Существует два типа псевдонимов — временные и постоянные. В данной статье рассмотрим оба типа и научимся их использовать для упрощения работы с операционной системой GNU / Linux.

Создание временных псевдонимов
Начнем с изучения временных псевдонимов — таких, которые будут действовать только в текущей сессии терминала командной строки. В случае его выключения после начала следующего сеанса временный псевдоним будет недоступен. Разберём синтаксис создания временного псевдонима команды с помощью инструмента alias:
alias name="your-command"


🖼️ Дочитать статью

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥53
Как очистить историю командной строки BASH в Linux?

Основная причина удаления истории командной строки из терминала Linux состоит в том, чтобы предотвратить использование команд другим пользователем, который мог бы использовать вашу учетную запись.

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

Посмотрите на команду ниже, здесь пользователь yurii набрал пароль сервера базы данных в командной строке:

$ sudo mysql -u root -p=MyPass

Если вы посмотрите в конец истории файла bash, то увидите там пароль, введенный выше:

$ history


Файл bash_history обычно находится в домашнем каталоге пользователя /home/username/.bash_history:

$ cat /home/yurii/.bash_history

Чтобы удалить одну строку из файла истории, используйте параметр -d. Например, если вы хотите очистить команду, в которой вы ввели открытый текстовый пароль, как в приведенном выше сценарии, найдите номер строки в файле истории и выполните эту команду:


$ history -d 130


Чтобы удалить или очистить все записи из истории bash, используйте команду history ниже с опцией -c:

$ history -c


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

$ cat /dev/null > ~/.bash_history

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

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥7
Что такое $0 в скрипте Bash?

Как вы знаете, знак $ в bash используется для обозначения переменных.
$0 – это одна из специальных переменных, которые есть в bash, и она используется для вывода имени файла скрипта, который в данный момент выполняется.

Переменная $0 может быть использована в Linux двумя способами:
1. Использовать $0 для поиска оболочки входа в систему
2. Использовать $0 для вывода имени выполняемого скрипта.

Поиск оболочки, в которую вы вошли в систему, с помощью $0
Когда $0 не используется в скрипте, она хранит информацию о том, какую оболочку вы используете в данный момент.
Если вы выведете значение $0, система покажет вам, в какой оболочке вы сейчас вошли в систему.

Использование $0 в скриптах shell
Чтобы использовать переменную $0 в скрипте, достаточно использовать простой оператор echo с этой переменной, и он выведет имя файла.
Например, здесь я буду использовать простой скрипт hello world:

#!/bin/bash
echo "Hello World"


Если мне нужно использовать здесь переменную $0, все, что мне нужно сделать, это добавить следующую строку в конце:

echo $0


Чтобы сделать его более человекочитаемым, вы также можете использовать что-то вроде этого:

echo "The name of the script is: " $0


Таким образом, конечный результат будет выглядеть следующим образом:

#!/bin/bash
echo "Hello World"
echo "The name of the script is: " $0


🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍35🔥4😐2
swap_digger

Bash-скрипт, автоматизирующий извлечение файла подкачки Linux и поиск учетных данных пользователей, адресов электронной почты, содержимого веб-форм, WiFi SSID ключей и других чувствительных данных.

🐙 Перейти на Github

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3😐1
Утилита sshpass — автоматические действия с SFTP

В этой статье будут описаны автоматические действия с SFTP сервером. Например — передача или скачивание файлов с помощью bash скрипта.

Когда вы подключаетесь по SSH, то для подключения используете пароль или ключ. Если нет возможности настроить подключение по ключам, то остаётся использовать пароль. Но утилита ssh, с помощью которой мы подключаемся к серверу не разрешает подставлять пароль. Вместо этого она использует псевдо-терминал для ввода пароля вручную.

alex@deb-11:~$ ssh alex@192.168.0.34
alex@192.168.0.34's password:


Это затрудняет выполнение автоматических действий, когда у вас нет возможности использовать SSH ключи. Например такая команда не работает:

alex@deb-11:~$ (echo password) | ssh alex@192.168.0.34
Pseudo-terminal will not be allocated because stdin is not a terminal.
alex@192.168.0.34's password:


Здесь даже на терминале появилось предупреждение о том, что STDIN это вам не терминал!

Для решения этой задачи придумали утилиту sshpass, которую можно установить из репозиториев:

alex@deb-11:~$ sudo apt install sshpass

С помощью этой утилиты можно передать пароль утилите ssh. Делается это таким способом:

alex@deb-11:~$ sshpass -p "password" ssh alex@192.168.0.34
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-52-generic x86_64)


Выполнение команд ftp из bash скрипта


Но в этой статье описывается sftp а не просто ssh. Поэтому подключение будет выполнятся с помощью утилиты sftp:

alex@deb-11:~$ sshpass -p "password" sftp alex@192.168.0.34
Connected to 192.168.0.34.
sftp>


🖼️ Дочитать статью

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍252🔥2😐1
Как установить и включить автозаполнение команд в Bash для CentOS/RHEL?

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

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

Как и Bash, почти все современные Linux-оболочки поставляются с поддержкой встроенных команд. В этом кратком руководстве мы покажем вам, как включить функцию автозавершения Bash в системах CentOS и RHEL.

Вот несколько основных действий, которые вы обязательно должны выполнить, чтобы упростить работу с командной строкой:
- Начальная настройка и конфигурация сервера на RHEL 7
- Начальная настройка и конфигурация сервера на CentOS 7

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

# yum install bash-completion bash-completion-extras

Теперь, когда вы установили автозаполнение bash, вы должны включить его для начала работы. Сначала укажите файл bash_completion.sh. Вы можете использовать команду locate ниже, чтобы найти ее:

$ locate bash-completion.sh
$ source /etc/profile.d/bash_completion.sh


Кроме того, выйдите из текущего сеанса и повторно войдите в систему.

$ logout

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

$ li[TAB]
$ ls .bash[TAB]


Команду [TAB] также можно выполнять для имен путей и имен переменных, и эта команда помимо всего прочего еще и хорошо программируется.

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍7🔥4
Переменная экспорта Bash

Переменная экспорта Bash — это переменная, которая доступна всем дочерним процессам текущей оболочки. Когда переменная экспортируется, она становится переменной среды, что означает, что к ней может получить доступ любая программа или сценарий, работающий в текущей среде оболочки.

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

export MY_VARIABLE="Hello World"


В этом примере мы экспортируем переменную MY_VARIABLE со значением «Hello World». После экспорта этой переменной она становится переменной среды, и к ней может получить доступ любой дочерний процесс текущей оболочки.

Вы также можете экспортировать несколько переменных одной командой:

export VAR1="value1" VAR2="value2" VAR3="value3"


Команда env отображает список всех переменных среды в текущей среде оболочки. Эта команда выведет список всех переменных среды, включая экспортированные вами переменные.

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

#!/bin/bash

export MY_VARIABLE="Hello World"

echo "The value of MY_VARIABLE is: $MY_VARIABLE"


В этом примере мы экспортируем переменную MY_VARIABLE со значением «Hello World» и используем ее в скрипте. скрипт будет отображать значение MY_VARIABLE при выполнении.

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

Чтобы экспортировать переменную в профиль Bash, вам необходимо добавить команду экспорта в файл:

export MY_VARIABLE="Hello World"


После того, как вы добавили команду экспорта в профиль Bash, переменная будет экспортироваться каждый раз, когда вы входите в систему.

🖼️ Дочитать статью

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍196🔥4😐1
ADB-Toolkit

BASH скрипт с 28 параметрами и раздел METASPLOIT с 6 параметрами, предназначенный для простого тестирования на проникновение в устройство Android.

🐙 Перейти на Github

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥62
Bash cкрипт получения числа открытых файлов пользователя

Данный скрипт позволяет узнать сколько открытых файлов у определённого пользователя Linux. Это бывает необходимо для отладки службы, работающей под определённым пользователем.

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

Скрипт будем использовать следующими способами:

./openfiles.sh -h — показать справку;
./openfiles.sh <имя_или_uid> — показать число открытых файлов.

Вот сам скрипт:

#!/bin/bash

case "$1" in
-h)
echo -e "Скрипт покажет открытые файлы для выбранного пользователя.
Опции:
-h показать эту справку.
Примеры выполнения:
./files2.sh <username>
./files2.sh <uid>"
;;

*)
if [[ "$#" -eq 1 ]];
then
id "$1" >/dev/null 2>&1
if [[ $? -ne 0 ]]; then
echo 'Пользователь не найден!'
exit 1
fi

for pid in `ps -u "$1" -o pid,comm | grep -v PID | awk '{print $1}'`
do
open_files=`ls -l /proc/$pid/fd | grep "anon_inode" | wc -l`
echo "Открытых файлов для pid $pid: $open_files"
done
else
echo -e "Забыли указать имя или id пользователя!
Или ввели больше одного параметра.
Для справки выполните $0 -h"
fi
;;

esac


Если скрипт получит параметр -h, то с помощью echo просто выведет справку.

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

Если скрипт получит не 1, а больше или меньше параметров, то эта ситуация также будет обработана.

Весь код по получению открытых файлов заключен в этих строчках:

for pid in `ps -u "$1" -o pid,comm | grep -v PID | awk '{print $1}'`
do
open_files=`ls -l /proc/$pid/fd | grep "anon_inode" | wc -l`
echo "Открытых файлов для pid $pid: $open_files"
done


То есть мы пробегаемся по всем процессам данного пользователя, и для каждого процесса (pid) вычисляем количество открытых файлов.

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥32
Обработка строк циклом «while read line»

В этой статье разберемся с одним из циклов bash, а именно с циклом «while read line». С его помощью будем обрабатывать строки.

Допустим в скрипте есть переменная, значение которой состоит из нескольких строк:

#!/bin/bash
a="шишка\nяблоко\nлисток\nгруша"
echo -e $a


Напомню, что \n это символ новой строки.

Выполним этот скрипт и получим такой результат:

$ ./test.sh
шишка
яблоко
листок
груша


Теперь изменим этот скрипт, чтобы каждая строка обрабатывалась в цикле:

#!/bin/bash
a="шишка\nяблоко\nлисток\nгруша"
echo -e "$a" | while read line
do
echo "На дереве висит $line"
done


Выполнив этот скрипт получим:

$ ./test.sh
На дереве висит шишка
На дереве висит яблоко
На дереве висит листок
На дереве висит груша


Подобный скрипт можно написать и таким способом:

#!/bin/bash
echo -e "шишка\nяблоко\nлисток\nгруша" | while read line
do
echo "На дереве висит $line"
done


Таким образом мы можем делать примерно такое:

"команда, возвращающая строки" | while read line
do
команда которой передаем на обработку каждую строку $line
done


Вот еще один пример bash скрипта:

#!/bin/bash
cat /etc/passwd | cut -f 1 -d ":" | while read line
do
echo "В системе есть пользователь - $line"
done


Запустим это скрипт:

$ ./test.sh
В системе есть пользователь - root
В системе есть пользователь - daemon
В системе есть пользователь - bin
**** И так далее ***


🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30🔥113
Лимит открытых файлов — настройки sysclt.conf

В системе Linux каждый открытый файл занимает файловый дескриптор. Информация по занятым файловым дескрипторам и их лимит хранится в файле /proc/sys/fs/file-nr:

$ cat /proc/sys/fs/file-nr
1120 0 9223372036854775807


В выводе мы видим 3 числа:

— Количество выделенных файловых дескрипторов (1120). Показывает количество открытых файлов в системе.
— Число выделенных, но не используемых файловых дескрипторов (0). Ядро версии выше чем Linux 2.6 всегда показывает 0. Потому что количество выделенных файловых дескрипторов точно соответствует количеству используемых файловых дескрипторов.
— Максимальное число файловых дескрипторов (9223372036854775807). Это и есть лимит открытых файлов в системе, который можно изменить с помощью файла sysclt.conf.

Для того, чтобы задать лимит, нужно в файле /etc/sysclt.conf задать параметр fs.file-max и указать ему значение, например:

$ sudo nano /etc/sysctl.conf
fs.file-max=1000000


Для того, чтобы изменения вступили в силу нужно выполнить команду:

$ sudo sysctl -p
fs.file-max = 1000000


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

И чтобы проверить наши изменения, опять посмотрим на файл /proc/sys/fs/file-nr:

$ cat /proc/sys/fs/file-nr
1120 0 1000000


После проделанного я верну всё как было:

$ sudo nano /etc/sysctl.conf
fs.file-max=9223372036854775807


$ sudo sysctl -p
fs.file-max = 9223372036854775807


Посмотрим какой лимит используется по умолчанию, для этого нужно посмотреть файл /proc/sys/fs/nr_open:

$ cat /proc/sys/fs/nr_open
1048576


То есть, любой процесс в системе не сможет открыть более 1048576 файлов.

Можем поменять это значение, также используя /etc/sysctl.conf. Параметр в этом случае будет называться fs.nr_open:

$ sudo nano /etc/sysctl.conf
fs.nr_open=1024

$ sudo sysctl -p
fs.file-max = 9223372036854775807
fs.nr_open = 1024

$ cat /proc/sys/fs/nr_open
1024


Чтобы узнать, сколько сейчас открыто файлов у произвольного процесса, выполните ls /proc/<pid>/fd | wc -l:

$ sudo ls /proc/1/fd/ | wc -l
81

$ sudo ls /proc/525/fd/ | wc -l
15


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

$ nano openfiles-users-procs.sh
#!/bin/bash
user=$1
function work_fun {
ps -u $user | awk '{print $1}' | grep -v PID | while read line
do
echo "Открыто файлов для `ps -p "$line" -o comm | grep -v COMMAND` ("$line") = `sudo ls /proc/$line/fd/ | wc -l`"
done
}
work_fun | sort -rnk 7


Дадим право на исполнение этому скрипту:

$ chmod u+x openfiles-users-procs.sh


И выполним:

$ ./openfiles-users-procs.sh alex
ls: cannot access '/proc/6952/fd/': No such file or directory
ls: cannot access '/proc/6953/fd/': No such file or directory
ls: cannot access '/proc/6954/fd/': No such file or directory
Открыто файлов для systemd (677) = 29
Открыто файлов для sshd (788) = 11
Открыто файлов для (sd-pam) (678) = 7
Открыто файлов для openfiles-users (6955) = 4
Открыто файлов для openfiles-users (6949) = 4
Открыто файлов для bash (797) = 4
Открыто файлов для sort (6951) = 3
Открыто файлов для openfiles-users (6950) = 3
Открыто файлов для (6954) = 0
Открыто файлов для (6953) = 0
Открыто файлов для (6952) = 0


Здесь, в самом начале, вы видите ошибки. Просто процессы 6952, 6953, 6954 существовали, но пока скрипт выполнялся они уже завершились. А просто сложив все эти числа вы узнаете, сколько файлов открыто у определённого пользователя.

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍84
PowerShell против Bash: в чем разница?

Немного истории: PowerShell

PowerShell - это среда автоматизации и задач Microsoft, удобная для управления конфигурацией. PowerShell использует компоненты, называемые командлетами, которые встроены в PowerShell. Дополнительные функции доступны через модули. Они устанавливаются из галереи PowerShell непосредственно из командной строки.

PowerShell отличается от Bash, потому что он предназначен для взаимодействия со структурами .NET изначально в Windows. Это означает, что он может передавать объекты и данные между сценариями, приложениями и сеансами. Каждый объект имеет свой собственный набор свойств, что делает обработку данных в PowerShell еще более детальной. Данные могут быть указаны как числа (целые числа), слова (строки), логические (истина и ложь) и многие другие типы. Это означает, что вы можете по-настоящему определиться с тем, как ваши скрипты обрабатывают ввод и вывод данных.

Немного истории: Bash

Системы Linux и Unix всегда выигрывали от структурирования многопользовательской терминальной среды. Вы можете запускать дополнительные сессии в той же системе и запускать сценарии и приложения, не влияя на основные сессии, в которые вошли другие пользователи. Это сильно отличалось от ранних систем Windows и DOS, которые были однопользовательскими средами с одной сессией, до появления Windows NT в середине 90-х годов.

Первоначальная оболочка, поставляемая с Unix, была известна как оболочка Bourne, названная в честь ее создателя Стивена Борна. Bash (Bourne again Shell) является преемником оболочки Bourne с открытым исходным кодом. Bash получил широкое распространение, когда Linux был создан в начале 90-х годов.

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

🖼️ Дочитать статью

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥42
Утилита ttyd

Она позволяет запустить выполнение любой утилиты командной строки в браузере.

Примеры использования:

1. Например, может быть удобно, запустить top, htop, или что-то подобное в браузере. В отдельной вкладке браузера вы всегда сможете посмотреть нагруженность вашего сервера.
2. Или можно запустить экземпляр bash и работать в командной строке сервера в браузере. Это может быть удобно, если вы по какой-то причине не можете использовать ssh.
3. И простые команды, которые при выполнении дают какой-то вывод и завершаются, можно запустить с помощью этой утилиты. Это могут быть такие команды как: ls, df, du и тому подобное. При этом, как только вы обновляете страничку, на сервере выполняется данная утилита и результат выводится в браузере.

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

$ wget -O ttyd https://github.com/tsl0922/ttyd/releases/download/1.7.3/ttyd.x86_64

Дальше даём приложению право запускаться:

$ chmod u+x ttyd

И запускаем, например bash:

$ ./ttyd bash

После запуска видим порт, на котором запустился bash. И подключаемся по ip-адресу сервера и этому порту с помощью браузера, например: httt://192.168.0.5:7681.

Эта утилита имеет ряд опций, вот некоторые из них:

-p <port> — порт на котором мы запускаем приложение (по умолчанию 7681, можно указать 0 чтобы использовать случайный порт);
-i <interface> — сетевой интерфейс который будет использоваться (например — eth0);
-c <username:password> — логин и пароль, который потребуется указать в браузере (по умолчанию парольная аутентификация выключена);
-m <max-clients> — максимальное количество клиентов;
-o — разрешает подключаться только одному клиенту, при этом как только произойдет дисконнект (например клиент закроет вкладку браузера или перезагрузит её), то web-приложение завершит свою работу;

Приложение позволяет работать через Nginx reverse proxy и использовать TLS сертификаты. Также вы можете сделать Systemd юнит, чтобы запускать эту утилиту как службу.

🐙 Перейти на Github

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥85