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

Реклама: @Kone4noVasya

Канал на бирже: https://telega.in/c/bash_help
Download Telegram
Циклы for в стиле C

В bash-скриптах можно использовать циклы for, описание которых выглядит очень похожим на циклы в стиле C, правда, без некоторых отличий тут не обошлось.

for (( i=1; i <= 10; i++ ))
do
echo "number is $i"
done
Цикл while

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

var1=5
while [ $var1 -gt 0 ]
do
echo $var1
var1=$[ $var1 - 1 ]
done
Посты про инфобезопасность в нашем отдельном канале:
https://t.me/+J34Lc_hJnb02ZmRi
Вложенные циклы

В теле цикла можно использовать любые команды, в том числе — запускать другие циклы. Такие конструкции называют вложенными циклами.

for (( a = 1; a <= 3; a++ ))
do
echo "Start $a:"
for (( b = 1; b <= 3; b++ ))
do
echo " Inner loop: $b"
done
done
Обработка содержимого файла

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

Такой подход можно использовать при обработке файлов формата CSV, или любых подобных файлов, записывая, по мере надобности, в переменную окружения IFS символ-разделитель.

IFS=$'\n'
for entry in $(cat /etc/passwd)
do
echo "Values in $entry –"
IFS=:
for value in $entry
do
echo " $value"
done
done
Базовая шпаргалка по Bash (CLI)

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
GooFuzz

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

🐙 Перейти на Github

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
Docker Backup and VirusTotal Scanner

Этот Bash-скрипт создает резервные копии образов или контейнеров Docker, а затем сканирует их с помощью VirusTotal.

🐙 Перейти на Github

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
Справочная информация по любой команде в Linux

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

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

🌐 Перейти на сайт

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
Простое преобразование вывода в хэш для поиска IDOR

Иногда требуется конвертировать ввод в md5 / base64 / 32 и т.д непосредственно в консоле. Это бывает полезно, особенно когда вы ищите IDOR и конечная точка имеет значение в виде хэша, например:

https://targetdomain.com/user/3bf1114a986ba87ed28fc1b5884fc2f8

Для решения этой задачи, вы можете использовать простой bash-скрипт, совместно с ffuf.

Предположим, у вас есть конечная точка, которая принимает параметр id в виде md5. Мы можем проверить его на IDOR с помощью приведенной ниже команды, которая сгенерирует список чисел от 1 до 1000:

seq 1 1000 | hashit md5 | ffuf -w - -u https://targetdomain.com/user/FUZZ

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👉 Bash для тестировщика

Видеоуроки:
1 — Установка и настройка
2 — ls, mkdir, rm команды
3 — mv, cp, nano, less, vi, cat команды
4 — Поиск через grep и find
5 — Команды с выводом и процессами
6 — Команды ping и curl

📹 Плейлист на YouTube

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
Bash-Scripts

Коллекция Bash-скриптов для автоматизации рутинных задач и оптимизации рабочего процесса. От простого переименования файлов до более сложных развертываний — эти Bash-скрипты помогут вам.

🐙 Перейти на Github

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
Bash скрипт для удаления файлов старше заданного количества дней в Linux

Поговорим о том, как удалять файлы старше n-ого количества дней, используя для этого простой скрипт написанный на bash.

Создадим файл с названием "DelFileNDay.sh" используя для этого утилиту "cat".

cat > DelFileNDay.sh << EOF
#!/bin/bash
#DEL file > 30 DAY
DAY=30
DIR="/var/log/test/"
find $DIR -type f -mtime +$DAY -exec rm -f {} \;
EOF

DAY=30 - задаем количество дней старше, которых файлы будут удаляться.
DIR="/var/log/test/" - задаем полный путь к директории из которой будут удаляться файлы.

Даем файлу максимальные привелегии с помощью утилиты "chmod".

chmod 777 DelFileNDay.sh

Запускаем bash-скрипт.

./DelFileNDay.sh

Если нужно чтобы файлы удалялись автоматически, например раз в день или месяц, то поместите скрипт в директорию "/etc/cron.daily/" или "/etc/cron.monthly/".

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
Скрипт, загружающий случайные обои, опубликованные на reddit-канале wallpaper

#!/bin/bash
wget -O - http://www.reddit.com/r/wallpaper |\
grep -Eo 'http://i.imgur.com[^&]+jpg' |\
shuf -n 1 |\
xargs wget -O background.jpg
feh --bg-fill background.jpg

С помощью wget скрипт загружает страницу www.reddit.com/r/wallpaper, передает ее grep, который ищет на ней ссылки на imgur, выбирает случайную ссылку с помощью shuf, загружает ее опять же с помощью wget и устанавливает в качестве обоев, используя команду feh (это такой миниатюрный просмотрщик изображений, его нужно предварительно установить). Скрипт можно добавить на рабочий стол, и тогда по клику у тебя будут меняться обои.

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👉 Основы работы с терминалом и BASH

Видеоуроки:
1 — Основные команды терминала. Первый скрипт на BASH.
2 — Условия
3 — Циклы
4 — for, let, trap
5 — Функции, рекурсия, модули, массивы
6 — GNU awk
7 — expect, who, mesg, autoexpect

📹 Плейлист на YouTube

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
Какой простой способ отрезать расширение у файла?

Стандартный и популярный способ — использовать утилиту basename, который отрезает весь путь слева, а если указать дополнительный параметр, то дополнительно отрежет справа и суффикс. Например пишем file.txt и суффикс .txt

$ basename file.txt .txt
file

Но можно не запускать целый отдельный процесс для такого простого действия, и обойтись внутренними преобразованиями в bash (bash variable expansions):

$ filename=file.txt; echo ${filename%.*}
file

Или наоборот, отрезать имя файла и оставить только расширение:

filename=file.txt; echo ${filename##*.}
txt

Как это работает?

% — отрезает все символы с конца до первого подходящего паттерна (поиск идет справа налево)
%% — отрезает все символы с конца до последнего подходящего паттерна (справа налево)
# — отрезает с начала до первого подходящего паттерна (поиск идет слева направо)
## — отрезает с начала до последнего подходящего паттерна (слева направо)

Таким образом, "${filename%.*}" означает — начиная справа налево проходим все символы (*) и доходим до первой точки. Отрезаем найденное.
Если бы мы использовали "${filename%%.*)", то в файлах, где точка встречается больше одного раза, у нас бы оно дошло до последней точки, отрезав лишнее.

$ filename="file.hello.txt"; echo "${filename%%.*}"
file

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
Скрипт для запуска и остановки торрент-клиента во время простоя машины

#!/bin/bash

IDLE=600000
STOPCMD="transmission-remote -S"
STARTCMD="transmission-remote -s"

STOPPED="yes"
while true; do
if [ `xprintidle` -gt $IDLE ]; then
if [ $STOPPED = "yes" ]; then
$STARTCMD
STOPPED="no"
fi
else
if [ $STOPPED = "no" ]; then
$STOPCMD
STOPPED="yes"
fi
fi
sleep 60
done

Скрипт уходит в бесконечный цикл, каждую минуту проверяя, сколько миллисекунд прошло с момента, когда юзер что-либо делал (для этого используется команда xprintidle). Если прошло уже 600 000 мс (десять минут), скрипт выполняет команду, указанную в переменной STARTCMD. В противном случае он выполнит команду STOPCMD, но только тогда, когда до нее была выполнена команда STARTCMD. Если кратко: ничего не делаешь за компом десять минут — запускается STARTCMD, в данном случае это команда запуска всех закачек с помощью Transmission, если нет — приостановка всех закачек. Не любишь Transmission? Нет проблем, вот команды для Deluge:

STOPCMD="deluge-console pause \*"
STARTCMD="deluge-console resume \*"

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
Можно ли создать hardlink на папку?

Конечно можно! Но не всем. POSIX файловые системы активно пользуются хардлинками и мы их все время видим! Пример:

# создаем директорию test
$ mkdir test
# выводим информацию о количестве ссылок и номер iNode для test
$ stat -c "LinkCount:%h iNode:%i" test
LinkCount:2 iNode:522366

Как? Только создали и уже два линка?

# заходим в созданную директорию test
$ cd test
# внутри выводим статистику для текущей директории "."
$ stat -c "LinkCount:%h iNode:%i" .
LinkCount:2 iNode:522366

В обоих случаях мы видим тот же номер iNode. То есть test и "." внутри него — это та же самая директория. И "." это не какой-то специальный алиас баша, и даже не операционной системы. Это просто жесткая ссылка на уровне файловой системы. Проверим еще один момент:

# создаем поддиректорию test2 внутри нашего test
$ mkdir test2
# заходим в поддиректорию test2
$ cd test2
# смотрим статистику о родительской директории ".."
$ stat -c "LinkCount:%h iNode:%i" ..
LinkCount:3 iNode:522366

".." имеет тот же iNode 522366, соответствующий директории test. И счетчик ссылок увеличился.

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
Совсем немного про перенаправления <, << и <<<

Первое перенаправление "<" из именованного потока или из файла. Давно известное и годами перетёртое мозолями суровых админов. Поэтому сразу перейдем к двум другим, которые встречаются реже.

<<, так называемая конструкция here document. Позволяет разместить многострочный текст прямо в скрипте и перенаправить его, словно из внешнего потока.

$ cat <<EOF
\ hello,
\ World
\ EOF
hello,
World

Cat
читает данные из файла. Мы перенаправляем ему в STDIN файл — конструкция here document генерит его прямо на месте, поэтому не нужно создавать отдельный файл.

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

Но можно пользоваться и <<<. Во-первых, <<< лучше читается, а во-вторых через <<< тоже можно передавать многострочные данные. Сравните два примера на читабельность:

#!/bin/bash
. load_credentials

sqlplus -s $connstring << EOF
set line 1000
select name, lastlogin from users;
exit;
EOF

#!/bin/bash
. load_credentials

SLQ_REQUEST="
set line 1000
select name, lastlogin from users;
exit;"

sqlplus -s ${connstring} <<<"${SQL_REQUEST}"

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

#!/bin/bash
. load_credentials
sqlplus -s ${connstring} <<<"select name, lastlogin from users;exit;"

Если оперировать скриптами побольше, и запросами подлиннее, то использование <<< с перенаправлениеим из переменных (а сами переменные мы можем объявить заранее, в специально отведенном и оборудованом комментариями месте), то код получается гораздо читабельнее.

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
Как повысить эффективность Bash-скриптов

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

Инструменты обработки текста значительно расширяют возможности оболочки bash. Но с командами sed и awk можно не только редактировать вывод и файлы, включая сами скрипты. Утилиты служат наиболее эффективным решением некоторых задач автоматизации процессов.

Sed — потоковый редактор файлов, позволяющий сэкономить время на выполнении простых функций: удаление, замена, вставка текста.

Awk — язык программирования, синтаксис которого напоминает языки C и Perl. Хотя awk работает по тому же «построчному» принципу, но значительно превосходит sed по функциональным возможностям. При написании bash-скриптов инструмент удобно использовать для работы со структурированными данными, так как awk воспринимает поля (область текста, отделенную пробелами или табуляцией), переменные, арифметические функции и др.

🌐 Ссылка на статью

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
Как отлаживать bash-script-ы по шагам

Волшебная строчка, которую нужно добавить после #!/bin/bash, чтоб скрипт можно было отлаживать по шагам

#!/bin/bash

trap 'echo "# $BASH_COMMAND";read' DEBUG

echo line1
echo line2

echo line3

Процесс отладки
Запускаем скрипт, перед выполнением каждой команды выводится то, что будет исполняться, затем интерпретатор начинает ожидать нажатия клавиши <ENTER>.

Если понимаем, что что-то пошло не так, нажимаем Ctrl+C и выходим из отладки.

Ингредиенты
- команда trap, которая умеет перехватывать разные сигналы и в нашем случае она перехватывает сигнал DEBUG, посылаемый перед выполнением команды

- команда read, которая умеет ожидать ввода чего-нибудь с клавиатуры (в данном случае нам нужно только либо ENTER либо Ctrl+C

- переменная окружения $BASH_COMMAND, валидная внутри обработчика команды trap.

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM