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

Реклама: @Kone4noVasya

Канал на бирже: https://telega.in/c/bash_help
Download Telegram
Если ты читаешь «BashMaster», скорее всего у тебя уже имеется базовый опыт системного администрирования. И это хорошо, потому что уже в этот вторник, 23-го июля, школа IT-профессий Level Up запускает новый поток курса «DevOps-инженер. Интенсив», который поможет ускоренно изучить профессию, а точнее перейти на новый уровень.

Чему ты научишься?
- понимать основные принципы и философию DevOps
- пользоваться инструментами для автоматизации процессов разработки
- автоматизировать процессы деплоя с помощью инструментов CI/CD
- понимать основные этапы и методы разработки ПО
- четко видеть свою роль в процессах разработки
- лучше контролировать и управлять production, development, и тестовыми-средами
- многое другое
Подробнее о курсе, программе, преподавателе (он хорош) - по ссылке.

Эксклюзивно для подписчиков «BashMaster» честная (действует даже при рассрочке) скидка 20% по промокоду BASHHELP

Реклама. ООО "ОБРАЗОВАТЕЛЬНЫЕ РЕШЕНИЯ". ИНН 7801715236. erid: 2VtzqvLWQMQ
👍3🔥1
⚙️ Подводные камни Bash

✔️В этой статье мы поговорим об ошибках, совершаемых программистами на Bash. Во всех приведённых примерах есть какие-то изъяны. Вам удастся избежать многих из нижеописанных ошибок, если вы всегда будете использовать кавычки и никогда не будете использовать разбиение на слова (wordsplitting)! Разбиение на слова — это ущербная легаси-практика, унаследованная из оболочки Bourne. Она применяется по умолчанию, если вы не заключаете подстановки (expansions) в кавычки. В общем, подавляющее большинство подводных камней так или иначе связаны с подстановкой без кавычек, что приводит к разбиению на слова и глоббингу (globbing) получившегося результата.

➡️ Содержание
▶️for i in $(ls *.mp3)
▶️cp $file $target
▶️Имена файлов с предшествующими дефисами
▶️[ $foo = «bar» ]
▶️cd $(dirname "$f")
▶️[ "$foo" = bar && "$bar" = foo ]
▶️[[ $foo > 7 ]]
▶️grep foo bar | while read -r; do ((count++)); done
▶️if [grep foo myfile]
▶️if [bar="$foo"]; then ...
▶️if [ [ a = b ] && [ c = d ] ]; then ...
▶️read $foo
▶️cat file | sed s/foo/bar/ > file
▶️echo $foo
▶️$foo=bar
▶️foo = bar
▶️echo <<EOF
▶️su -c 'some command'
▶️cd /foo; bar
▶️[ bar == "$foo" ]
▶️for i in {1..10}; do ./something &; done
▶️cmd1 && cmd2 || cmd3
▶️echo «Hello World!»
▶️for arg in $*
▶️function foo()
▶️echo "~"
▶️local varname=$(command)
▶️export foo=~/bar
▶️sed 's/$foo/good bye/'
▶️tr [A-Z] [a-z]
▶️ps ax | grep gedit
▶️printf "$foo"
▶️for i in {1..$n}
▶️if [[ $foo = $bar ]] (в зависимости от цели)
▶️if [[ $foo =~ 'some RE' ]]
▶️[ -n $foo ] or [ -z $foo ]
▶️[[ -e "$broken_symlink" ]] возвращает 1, несмотря на существование $broken_symlink
▶️Сбой ed file <<<«g/d\{0,3\}/s//e/g»
▶️Сбой подцепочки (sub-string) expr для «match»
▶️Про UTF-8 и отметках последовательности байтов (Byte-Order Marks, BOM)
▶️content=$(<file)
▶️for file in ./*; do if [[ $file != *.* ]]
▶️somecmd 2>&1 >>logfile
▶️cmd; ((! $? )) || die
▶️y=$(( array[$x] ))
▶️read num; echo $((num+1))
▶️IFS=, read -ra fields <<< "$csv_line"
▶️export CDPATH=.:~/myProject

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

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍86🔥4
Уйти в пентест? Стать devops-инженером или системным администратором? 
Только вам решать, куда расти, если вы знаете Linux.

Курс "Основы Linux" обучит вас тонкостям работы с ОС: от работы в командной строке до создания прикладных программ.

- 70% практики
- сопровождение куратора
- финальный проект для портфолио
- сертификат или удостоверение о повышении квалификации
- одна из самых низких цен на обучение

Старт 8 августа (длительность 3,5 месяца)

@Codeby_Academy
+74994441750

Узнать подробнее
3👍2
⚙️ SSH. Получить отпечаток ключа сервера по ip

✔️Получить отпечаток всех публичных SSH ключей сервера по его ip адресу можно с помощью следующей команды:
ssh-keygen -lf <(ssh-keyscan ip_адрес 2>/dev/null)


▶️Или можно так:
ssh-keyscan ip_адрес | ssh-keygen -lf -


▶️Или себя самого:
ssh-keyscan 127.0.0.1 | ssh-keygen -lf -


➡️ Вывод формата ключа будет таким, как при первом соединении с сервером через SSH, когда система спрашивает надо ли добавить ключ в список доверенных.

▶️Если необходимо показать ключ, обработанный определённым алгоритмом, то для ssh-keygen надо указать параметр с ключом -E и названием алгоритма:
ssh-keygen -E md5 -lf <(ssh-keyscan ip_адрес 2>/dev/null)


🖼️ Ссылка на источник

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍6🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
"Разработка игр — это дорого!" Но как же minecraft, among us?

Indie Spotlight 👈 чат для инди-разработчиков, в котором найдётся ответ на любой вопрос:

— Как собрать и управлять командой по разработке игр?
— Как продвинуть игру без бюджета?
— Как монетизировать проект в условиях санкций?

👆Также у проекта есть телеграм-канал, где вы сможете ознакомиться с играми других разработчиков, оценить игры других участников, а также принять участие в розыгрышах призов таких, как Playstation 5, мониторы и раздачи ключей к играм💡

Это первое подобное комьюнити в телеграм:
➡️ Вступить в чат
➡️ Перейти в канал
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
⚙️ Почему нельзя парсить вывод ls(1)

✔️Команда ls(1) достаточно хорошо справляется с отображением атрибутов одного файла (по крайней мере, в некоторых случаях), но когда просишь у неё список файлов, возникает огромная проблема: Unix позволяет использовать в имени файла почти любой символ, в том числе пробелы, переносы строк, точки, символы вертикальной черты, да и практически всё остальное, что вы можете использовать как разделитель, за исключением NUL. Существуют предложения по «исправлению» этой ситуации внутри POSIX, но они не помогут в решении текущей ситуации.

➡️ Если в качестве стандартного вывода не используется терминал, в режиме по умолчанию ls разделяет имена файлов переносами строк. И никаких проблем не возникает, пока не встретится файл, в имени которого есть перенос строки. Так как очень немногие реализации ls позволяют завершать имена файлов символаи NUL, а не переносами строк, это не позволяет получить безопасным образом список имён файлов при помощи ls (по крайней мере, портируемым способом).
$ touch 'a space' $'a\nnewline'
$ echo "don't taze me, bro" > a
$ ls | cat
a
a
newline
a space

Этот вывод показывает, что у нас есть два файла с именем a, один с именем newline и один с именем space.

Но если воспользоваться ls -l, то можно увидеть, что это совершенно не так:
$ ls -l
total 8
-rw-r----- 1 lhunath lhunath 19 Mar 27 10:47 a
-rw-r----- 1 lhunath lhunath 0 Mar 27 10:47 a?newline
-rw-r----- 1 lhunath lhunath 0 Mar 27 10:47 a space

Проблема в том, что из вывода ls ни пользователь, ни компьютер не может сказать, какие его части составляют имя файла. Это каждое слово? Нет. Это каждая строка? Нет. На этот вопрос есть только один правильный ответ: мы не можем этого понять.

▶️Также стоит отметить, что иногда ls повреждает данные имён файлов (в нашем случае она превратила символ переноса строки между словами a и newline в вопросительный знак. (Некоторые системы вместо него ставят \n.) В некоторых системах команда не делает этого, когда вывод происходит не в терминал, а в других имя файла всегда повреждается. В конечном итоге, никогда не стоит считать, что вывод ls будет истинным представлением имён файлов, с которыми вы работаете.

🖼️ Дочитать статью на Habr'е

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍87🔥4
Forwarded from localhost
Media is too big
VIEW IN TELEGRAM
С днём сисадмина! 🍺

Предлагаю в очередной раз насладиться классикой :)

localhost › IT-юмор
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥39👍11
⚙️ WOL. Функция запуска системы по сети

✔️Полезная функция WakeOnLan позволяет запускать ПК по запросу из локальной сети. В основном её используют на оборудовании, которое обычно выключено ради экономии электричества и активно лишь иногда. Далее будет приведен небольшой bash скрипт, который и делает всю магию запуска.

Сразу стоит отметить, что должно быть выполнено несколько условий: удалённый компьютер должен быть соединён с сетью через провод (wifi зачастую неактивен при выключенной системе), должно присутствовать электропитание и активирован WOL в BIOS.

➡️ Подсказка: на материнской плате может быть несколько Ethernet разъёмов. Тогда в BIOS функция WOL будет активироваться для каждого отдельно.

Для подъёма системы по сети можно воспользоваться следующим bash скриптом:
MAC=мак_адрес
Broadcast=ip_адрес
PortNumber=4000
echo -e $(echo $(printf 'f%.0s' {1..12}; printf "$(echo $MAC | sed 's/://g')%.0s" {1..16}) | sed -e 's/../\\x&/g') | nc -w1 -u -b $Broadcast $PortNumber

Тут необходимо заменить *мак_адрес* и *ip_адрес* на данные системы, которую надо разбудить.

Как показывает практика, хоть у WOL функции есть строгие правила про номер порта и т.п., но отправлять этот запрос можно на любой порт - всё равно запустится.

Ещё есть требование использования статичного ip адреса (не DHCP), прописанного в BIOS запускаемой машины. Но и это требование оказывается на практике нестрогим. То есть если в скрипте выше вместо ip адреса указать широковещательный 255.255.255.255, то система всё равно проснётся по сети.

▶️Сам пока пробовал функцию WOL только на серверных материнских платах фирмы Supermicro. Но по слухам, у многих производителей тоже нестрогие правила к WOL запросам. Лишь бы тело запроса было составлено верно... А иногда и вовсе ничего не важно, кроме 12 букв "f" в начале запроса...

▶️Наличие функции WOL на материнских платах стимулирует параною по сохранности данных да диске. Ведь если кто-то со стороны может замкнуть контакты питания через отправку запроса по локальной сети, то что мешает производителю плат сделать функцию доступа к ssd m2 диску, которому надо лишь несколько вольт для работы (не шпиндельное устройство)? Получается, из выключенного компьютера можно вытащить данные по сети, верно?

▶️А если подумать ещё дальше, то что мешает производителю материнских плат сделать аналог функции WOL для удалённого доступа к оперативной памяти работающего ПК? Ведь уже же фирма Gigabyte спалилась на том, что обновляла 271 модель своих материнских плат при запуске системы. Причём делала это по незащищённому каналу, без шифрования.

🖼️ Ссылка на источник

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥65👍4
😒Подборка каналов для каждого безопасника и хакера

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

Арсенал Безопасника - Проект по кибербезопасности - сборник лучших инструментов и утилит по OSINT, хакингу и деанону
Please open Telegram to view this post
VIEW IN TELEGRAM
2
⚙️ Консоль в массы. Переход на светлую сторону. Bash

✔️Главная цель статьи — рассмотреть основы программирования на bash, показать примеры, дать читателю базовые знания, которых хватит, чтобы двигаться дальше. В конце статьи есть полезные ссылки и вы сможете более подробно изучить данную тему.

▶️Когда вы запускаете терминал, внутри него работает специальная программа-оболочка — shell (англ) — интерпретатор команд. Shell понимает все команды, которые вы вводите с клавиатуры, и обрабатывает их. Также выводит сообщения об ошибках, следит за корректностью команд и их синтаксисом. Примером таких команд могут быть: сменить директорию, создать новую директорию, добавить текстовый файл, отредактировать текстовый файл, сохранить изменения и другие.

▶️Программ-оболочек довольно много. Одна из первых удачных реализаций называется sh. Ее разработал Стивен Борн в 1977 году. В 99% случаев, когда вы работаете за компьютером под управлением OS *nix, оболочкой по умолчанию, которая обрабатывает команды, будет bash. Конечно, есть еще такая оболочка как zsh и другие, но это уже совсем другая история.

➡️ Содержание статьи:
▶️Основы
▶️Переменные
▶️Ветвления
▶️Циклы
▶️Полезные ссылки

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

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥54
⚙️ Ps aux — утилита для просмотра списка процессов в Linux

✔️Версия утилиты ps для просмотра списка процессов в Linux с комбинацией параметров aux.

➡️ Этот проект полностью написан на bash (в 270 строк) с no forking (не выполняется системный вызов fork() для запуска других процессов). В решении используются только built-in команды bash.

🐙 Перейти на Github

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥72
Бесплатный однодневный интенсив по искусственному интеллекту!

За 1 день научим тебя писать нейронные сети. Напишешь 9 нейронок с нуля, без опыта программирования!

На интенсиве ты создашь:
- 3 нейронки из области компьютерного зрения
- 3 нейронки по распознаванию и обработке текста
- 3 нейронки по сегментации, временным рядам и аудио

Регистрируйся прямо сейчас, исследуй футуристичный мир нейросетей с нами!

Реклама. ООО "ТЕРРА ЭЙАЙ". ИНН 9728019395. erid: LjN8KLY6Z
3👍2
⚙️ Удобная работа с файлами по SSH

✔️Если у вас имеется больше одного Linux-компьютера, то вы, вероятно, постоянно пользуетесь ssh. Это — отличный инструмент, но мне всегда казалась в нём странной одна деталь. Несмотря на то, что ssh-соединения позволяют передавать файлы с применением scp и sftp, у нас нет возможности перемещать файлы между локальной и удалённой системой, не запуская программу на локальном хосте, или не подключаясь к локальной машине с удалённой.

Последнее — это настоящая проблема, так как к серверам часто подключаются, находясь в это время за файрволом или за NAT-маршрутизатором, то есть, не имея постоянного IP-адреса. В результате сервер, в любом случае, не сможет подключиться к локальной системе, с которой раньше к нему обращались. Если бы в ssh-сессии можно было бы просто взять локальный или удалённый файл и передать его туда, куда нужно, это было бы очень удобно.

✔️В этом материале вам расскажут о скрипте, который позволяет монтировать удалённые директории на локальном компьютере. На локальной машине надо будет установить sshfs, но на удалённой, на которую вы, возможно, не можете устанавливать программы, ничего менять не придётся. Если же потратить на настройку систем некоторое время, и если на клиентском компьютере имеется работающий ssh-сервер, то можно будет ещё и монтировать локальные директории на удалённых системах. При этом не придётся беспокоиться о блокировке IP-адресов или портов. Фактически, если вы способны подключиться к удалённой машине, это означает, что вам удастся и то, о чём вам расскажут.

➡️ Содержание статьи:
▶️Пара слов о sshfs
▶️Предварительная подготовка
▶️Скрипт
▶️Решаем обратную задачу
▶️Итоги

🖼️ Дочитать статью на Habr'e

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍5🔥4
Хочешь стать Linux-экспертом?

Linux++ - канал для тех, кто хочет профессионально освоить Linux и программирование!

- Уникальные гайды по администрированию Linux

- Продвинутые техники и рекомендации по разработке на языках C/C++

- Подробные статьи о внутреннем устройстве операционных систем

- Интересные факты и новости из мира технологий

🌐 Присоединяйся к нам и становись частью сообщества истинных гуру: Linux++
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥32
⚙️ Bash-Oneliner

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

🐙 Перейти на Github

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍53
До сих пор боишься вопроса про TCP/IP протоколы на собеседовании?

🖥 Network Admin — обучающий канал по сетевым технологиям. В канале ты найдешь множество полезной информации:

Типы SSL - сертификатов
Иерархия DNS
Сетевая аналитика
Процессы TCP сервера
Маршрутизатор, Коммутатор, Хаб: В чем разница?
Проверка уязвимости сервера Linux

С Network Admin твои знания и навыки стремительно пойдут вверх


Подписывайся - @networkadm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42
⚙️ Обходим замедление YouTube без VPN

➡️ Оживляем Ютуб на macOS

Способ работает в Safari, Chrome и Яндекс Браузере — он тоже связан с DPI.

▶️Открываем приложение «Терминал» и вставляем это:
curl -fsSL https://raw.githubusercontent.com/xvzc/SpoofDPI/main/install.sh | bash -s darwin-amd64


▶️Затем вставляем это:
export PATH=$PATH:~/.spoof-dpi/bin


▶️Потом это:
spoof-dpi


▶️Проверяем скорость в максимальном разрешении! Если не сработало, то закрываем терминал, делаем всё заново, но вместо последней команды прописываем:
spoof-dpi --enable-doh --window-size 0


➡️ PC/Android

1. Открываем браузер.
2. Запускаем экспериментальными функции браузера — для этого в адресной строке вводим:

▶️Chromechrome://flags/#enable​-quic
▶️Edgeedge://flags/#enable​-quic
▶️Firefoxabout:config → network.http.http3.enabled
▶️Opera - opera://flags/#enable​-quic

3. Ставим протокол QUIC в положение Default или Enabled. Если он уже Default — меняем на Enabled.

4. Перезагружаем браузер и смотрим видосики без зависаний.

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
😐2013👍9🔥5
👾 Где практиковаться этичному хакингу? 

Codeby Games предлагает тебе уникальную возможность отточить свои навыки пентеста, решая задачи, приближенные к боевым!

- Более 50 уязвимых машин на Windows и Linux
- Более 300 CTF заданий
- Регулярные обновления
- Самое отзывчивое комьюнити

Огромное количество практики в любой из областей информационной безопасности:

🌐 Web-эксплуатация
🔑 Криптография
🕵️‍♂️ Форензика
🔍 OSINT
🖼 Стеганография
👨‍💻 PWN
⚙️ Реверс-инжиниринг
🎟 Active Directory

Присоединяйся к Codeby Games и окунись в мир инфобеза уже сегодня!

👉 Codeby Games

Приятного хакинга!
1👍1😐1
⚙️ Мониторинг производительности системы с помощью Bash и Python

✔️Создаём простой, но мощный инструмент для мониторинга производительности вашей системы.

➡️ Создаем Python скрипт для сбора данных:

▶️Создайте файл monitor.py и добавьте в него следующий код:
import psutil
import json

def get_system_stats():
stats = {
"cpu": psutil.cpu_percent(interval=1),
"memory": psutil.virtual_memory().percent,
"disk": psutil.disk_usage('/').percent
}
return json.dumps(stats)

if __name__ == "__main__":
print(get_system_stats())


▶️Этот скрипт собирает данные о загрузке процессора, использовании памяти и состоянии диска, и выводит их в формате JSON

➡️ Создаем Bash скрипт для вызова Python скрипта и обработки данных:

▶️Создайте файл monitor.sh и добавьте в него следующий код:
#!/bin/bash

# Запуск Python скрипта и сохранение результата в переменную
stats=$(python3 monitor.py)

# Извлечение данных из JSON
cpu=$(echo $stats | jq -r '.cpu')
memory=$(echo $stats | jq -r '.memory')
disk=$(echo $stats | jq -r '.disk')

# Вывод данных
echo "CPU Usage: $cpu%"
echo "Memory Usage: $memory%"
echo "Disk Usage: $disk%"


▶️ Не забудьте сделать скрипт исполняемым:
chmod +x monitor.sh


▶️Теперь, при запуске monitor.sh, вы получите информацию о состоянии системы в удобном виде

▶️Запуск скрипта:
./monitor.sh


▶️Результат:
CPU Usage: 12.3%
Memory Usage: 45.6%
Disk Usage: 67.8%


✔️Вы можете расширить этот скрипт, добавив отправку данных на удаленный сервер, логирование результатов в файл или даже настройку алертов при превышении определенных порогов

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👍216🔥3😐1
⚙️ Удаление дубликатов строк в файле

✔️Скрипт удаляет дубликаты строк из файла input.txt и сохраняет результат в output.txt
#!/bin/bash

# Путь к файлу
FILE="input.txt"

# Удаление дубликатов строк и сохранение в новый файл
awk '!seen[$0]++' "$FILE" > "output.txt"


➡️ Особого внимания заслуживает использование команды awk. В конструкции !seen[$0]++ seen[$0] — это ассоциативный массив, в котором ключом является строка. Если строка встречается впервые, её значение в массиве будет равно 0, и она будет выведена.
При последующих вхождениях строки её значение увеличивается, и строка не выводится повторно. Более подробно о awk можно прочитать в man awk

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍86