Быстро привести JSON в читаемый вид через jq!
Иногда API возвращает JSON одной длинной строкой. В терминале читать такое совершенно неудобно. Самый простой способ привести всё в нормальный вид — прогнать через
Например, если JSON лежит в файле:
Часто это используют прямо при работе с API:
Так сразу видно структуру ответа.
Если нужно вытащить конкретное поле:
То же самое можно сделать прямо из ответа API:
Иногда удобно забрать сразу несколько полей:
Если в JSON есть массив, можно пройтись по всем элементам:
Например, вытащить из каждого объекта поле name:
Когда нужен вывод без кавычек, пригодится флаг
Это полезно, если результат дальше используется в скрипте.
Иногда ещё удобно быстро посмотреть, какие вообще пути есть в JSON:
Команда покажет все доступные ключи и вложенные пути.
Так можно сразу вытащить нужные данные из ответа API.
🔥 В целом
➡️ DevOps Ready | #практика
Иногда API возвращает JSON одной длинной строкой. В терминале читать такое совершенно неудобно. Самый простой способ привести всё в нормальный вид — прогнать через
jq.Например, если JSON лежит в файле:
jq . file.json
jq просто отформатирует его: разобьёт на строки и добавит отступы.Часто это используют прямо при работе с API:
curl -s https://api.github.com/repos/torvalds/linux | jq .
Так сразу видно структуру ответа.
Если нужно вытащить конкретное поле:
jq '.name' file.json
То же самое можно сделать прямо из ответа API:
curl -s https://api.github.com/repos/torvalds/linux | jq '.description'
Иногда удобно забрать сразу несколько полей:
jq '{name, description, language}' file.jsonЕсли в JSON есть массив, можно пройтись по всем элементам:
jq '.items[]' file.json
Например, вытащить из каждого объекта поле name:
jq '.items[].name' file.json
Когда нужен вывод без кавычек, пригодится флаг
-r:jq -r '.name' file.json
Это полезно, если результат дальше используется в скрипте.
Иногда ещё удобно быстро посмотреть, какие вообще пути есть в JSON:
jq 'paths' file.json
Команда покажет все доступные ключи и вложенные пути.
jq отлично вписывается в обычные shell-пайплайны. Например:curl -s https://api.example.com/users | jq -r '.users[].email'
Так можно сразу вытащить нужные данные из ответа API.
jq — один из самых удобных инструментов для работы с JSON в терминале. Если часто возишься с API или логами, он экономит кучу времени.Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍8🔥8🤝3
Например, /etc хранит системные конфигурации, /var используется для логов и изменяемых данных, а /home содержит домашние директории пользователей.
На картинке — основные каталоги, которые важно знать при работе с системой, серверами и разработкой.
Сохрани, чтобы держать под рукой!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤8🤝8👍1
Быстрый повтор и поиск команд из истории Bash!
Часто приходится выполнять длинные команды: docker, git, kubectl, сборки, скрипты или сложные пайплайны. Печатать их заново может быть долго и неудобно.
В Bash можно обращаться к истории команд напрямую.
Чтобы найти нужную команду, можно отфильтровать историю:
Каждая команда имеет номер. Любую из них можно выполнить снова:
Также можно повторить последнюю команду, которая начиналась с определённого слова.
Bash найдёт последнюю команду, начинающуюся с
🔥 Использование !номер и !команда позволяет запускать сложные команды без копирования и ручного набора.
➡️ DevOps Ready | #совет
Часто приходится выполнять длинные команды: docker, git, kubectl, сборки, скрипты или сложные пайплайны. Печатать их заново может быть долго и неудобно.
В Bash можно обращаться к истории команд напрямую.
Чтобы найти нужную команду, можно отфильтровать историю:
history | grep docker
Каждая команда имеет номер. Любую из них можно выполнить снова:
!482
Также можно повторить последнюю команду, которая начиналась с определённого слова.
Bash найдёт последнюю команду, начинающуюся с
docker, и выполнит её снова. Это особенно удобно при работе с длинными CLI-командами:!docker
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥9🤝8
This media is not supported in your browser
VIEW IN TELEGRAM
Этот репозиторий собирает шпаргалки по ключевым направлениям информационной безопасности: пентестинг, сетевые атаки, эксплуатация уязвимостей, анализ трафика, веб-безопасность и многое другое. Всё разложено по темам и оформлено так, чтобы можно было быстро найти нужные команды, техники и инструменты.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤8🔥8
Работа с временными каталогами через mktemp!
При написании скриптов важно безопасно создавать временные файлы и каталоги. Для этого используется утилита
Создание временного файла:
Команда создаёт файл в
Создание временного каталога:
Флаг
Создание файла с собственным шаблоном имени:
Использование временного файла в shell-скрипте:
Путь сохраняется в переменную, после чего файл можно использовать внутри скрипта.
Создание временного каталога для обработки данных:
Часто используется при обработке архивов или промежуточных файлов.
Автоматическая очистка временного файла через
Создание файла в конкретном каталоге:
Полезно, если требуется другой каталог вместо
🔥 Использование
➡️ DevOps Ready | #практика
При написании скриптов важно безопасно создавать временные файлы и каталоги. Для этого используется утилита
mktemp, которая создаёт уникальные имена и исключает гонки (race conditions).Создание временного файла:
mktemp
Команда создаёт файл в
/tmp и выводит его путь.Создание временного каталога:
mktemp -d
Флаг
-d создаёт каталог вместо файла.Создание файла с собственным шаблоном имени:
mktemp /tmp/script.XXXXXX
XXXXXX заменяются случайной последовательностью символов.Использование временного файла в shell-скрипте:
tmpfile=$(mktemp)
echo "data" > "$tmpfile"
Путь сохраняется в переменную, после чего файл можно использовать внутри скрипта.
Создание временного каталога для обработки данных:
tmpdir=$(mktemp -d)
cp *.log "$tmpdir"
Часто используется при обработке архивов или промежуточных файлов.
Автоматическая очистка временного файла через
trap:tmpfile=$(mktemp)
trap 'rm -f "$tmpfile"' EXIT
trap гарантирует удаление временного файла при завершении скрипта.Создание файла в конкретном каталоге:
mktemp -p /var/tmp backup.XXXXXX
Полезно, если требуется другой каталог вместо
/tmp.mktemp считается стандартной практикой для shell-скриптов — ручное создание файлов в /tmp через фиксированные имена может привести к конфликтам и проблемам безопасности.Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥8🤝8
В этой статье:
• Автор на примере Ubuntu разбирает, как выводить аудио одновременно на несколько устройств;
• Пошагово объясняется, какие модули и утилиты нужны для мультивыхода;
• Приводятся рабочие команды для создания виртуального аудиоустройства и его настройки.🔊 Продолжайте читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤8🤝8👎1
В этом посте 7 утилит, которые помогают быстро оценить каналы связи: измерить реальную скорость, нагрузку на интерфейсы, задержку, активные соединения и текущий входящий/исходящий трафик. Подходят для диагностики, настройки и мониторинга сети без лишних инструментов.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍9❤7
Поднимаем временный RAM-диск и тестим скорость.
tmpfs в действии: супербыстрые операции с файлами!
RAM-диск — это временное хранилище прямо в оперативной памяти. Без дисковых задержек, с молниеносным I/O.
Создаём точку монтирования:
Монтируем
Проверим, работает ли — создадим и скопируем файл:
Весь ввод-вывод — напрямую в RAM. Это идеальное решение для временных файлов, кэшей и промежуточных вычислений.
Готово? Осталось только отмнотировать и всё:
🔥 Быстрый и надёжный способ ускорить работу без всяких SSD и оркестраторов. Работает на любом VPS.
➡️ DevOps Ready | #практика
tmpfs в действии: супербыстрые операции с файлами!
RAM-диск — это временное хранилище прямо в оперативной памяти. Без дисковых задержек, с молниеносным I/O.
Создаём точку монтирования:
mkdir /mnt/ramdisk
Монтируем
tmpfs с нужным объёмом:sudo mount -t tmpfs -o size=512M tmpfs /mnt/ramdisk
Проверим, работает ли — создадим и скопируем файл:
dd if=/dev/zero of=/mnt/ramdisk/test bs=1M count=100
cp /mnt/ramdisk/test /mnt/ramdisk/test2
Весь ввод-вывод — напрямую в RAM. Это идеальное решение для временных файлов, кэшей и промежуточных вычислений.
Готово? Осталось только отмнотировать и всё:
sudo umount /mnt/ramdisk
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥6🤝6❤1
Например,
${var%.*} убирает расширение файла, а ${var##*/} позволяет быстро получить имя файла из полного пути.На картинке — основные приёмы работы с переменными в bash: удаление префиксов и суффиксов, замена строк, работа с подстроками и значения по умолчанию.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍12🔥8
Как не выполнять одну и ту же команду несколько раз?
В работе часто возникает ситуация: команда тяжёлая, медленная или ходит в сеть. Например, kubectl, docker, curl, запросы к API или работа с логами.
Чтобы не гонять её снова и снова для разных проверок:
Каждый раз это новый запрос, новая нагрузка и потеря времени.
Гораздо быстрее выполнить её один раз и сохранить результат:
Теперь можно сколько угодно анализировать данные без повторных вызовов:
Это особенно чувствуется при работе с удалёнными сервисами, базами и логами, где каждая команда может занимать секунды.
🔥 Если команда дорогая — не запускай её повторно. Сохрани результат и работай с ним локально.
➡️ DevOps Ready | #совет
В работе часто возникает ситуация: команда тяжёлая, медленная или ходит в сеть. Например, kubectl, docker, curl, запросы к API или работа с логами.
Чтобы не гонять её снова и снова для разных проверок:
kubectl get pods
kubectl get pods | grep api
kubectl get pods | wc -l
Каждый раз это новый запрос, новая нагрузка и потеря времени.
Гораздо быстрее выполнить её один раз и сохранить результат:
out=$(kubectl get pods)
Теперь можно сколько угодно анализировать данные без повторных вызовов:
echo "$out" | grep api
echo "$out" | wc -l
Это особенно чувствуется при работе с удалёнными сервисами, базами и логами, где каждая команда может занимать секунды.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝12👍7🔥7
This media is not supported in your browser
VIEW IN TELEGRAM
В репозитории собран справочник по Linux-командам — более 400 утилит с описаниями и примерами использования. Каждая команда сопровождается кратким объяснением и примерами, поэтому можно быстро понять, как она работает и где применяется. Удобно использовать как справочник в работе и подготовке к собеседованиям.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍9🔥8
sponge: утилита, которая спасает, когда нужно перезаписать файл через pipe!
Есть старый неприятный момент в shell: если читаешь файл и тут же пишешь результат обратно в него же через
Например:
На первый взгляд выглядит нормально. На практике — нет.
Shell откроет app.log на запись сразу, ещё до того, как
В таких случаях выручает
Он работает просто: сначала полностью читает входной поток, и только потом записывает результат в файл.
То же самое, но безопасно:
Несколько примеров, где это реально удобно.
Заменить текст в конфиге:
Убрать пустые строки:
Отсортировать файл:
Отформатировать JSON:
Из нюансов:
🔥 Если коротко: когда нужно безопасно перезаписать файл результатом команды,
➡️ DevOps Ready | #практика
Есть старый неприятный момент в shell: если читаешь файл и тут же пишешь результат обратно в него же через
>, можно случайно получить пустой файл.Например:
grep -v DEBUG app.log > app.log
На первый взгляд выглядит нормально. На практике — нет.
Shell откроет app.log на запись сразу, ещё до того, как
grep дочитает его до конца. В итоге файл можно просто обнулить.В таких случаях выручает
sponge из moreutils.Он работает просто: сначала полностью читает входной поток, и только потом записывает результат в файл.
То же самое, но безопасно:
grep -v DEBUG app.log | sponge app.log
Несколько примеров, где это реально удобно.
Заменить текст в конфиге:
sed 's/localhost/db.internal/' config.yml | sponge config.yml
Убрать пустые строки:
grep -v '^$' file.txt | sponge file.txt
Отсортировать файл:
sort file.txt | sponge file.txt
Отформатировать JSON:
jq '.' data.json | sponge data.json
Из нюансов:
sponge сначала забирает весь поток целиком, а уже потом пишет в файл. Для обычных задач это вообще не проблема, но на очень больших файлах про это лучше помнить.sponge делает именно то, что ожидаешь.Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥9🤝7❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Подборка специализированных поисковиков, которые активно применяются в OSINT, пентесте и разведке инфраструктуры. Сервисы для поиска утечек, открытых портов, уязвимых сервисов, исходного кода, доменов, IP-адресов и другой критичной информации. Отлично подойдёт тем, кто хочет понять, как собирается информация перед атакой или тестированием.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤8🔥8🤝1
Например, DNS отвечает за преобразование доменных имен в IP-адреса, TCP обеспечивает надежное соединение и порядок доставки пакетов, а HTTP используется для обмена запросами и ответами между клиентом и сервером.
На картинке — основные сетевые протоколы и уровни, которые участвуют в передаче данных.
Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍10🤝8
Убиваем залипшие процессы с fuser и kill. Когда Ctrl+C не помогает, а процесс держит порт или файл!
Иногда процесс залипает и не хочет умирать даже после Ctrl+C. Или наоборот — ты не знаешь, что за процесс мешает работать. В таких случаях помогает связка fuser + kill.
Проверим, кто использует порт (например, 8080):
Или файл, занятый каким-то процессом:
Если надо сразу завершить все процессы, держащие ресурс:
Или убить по PID (который вернул fuser):
🔥
➡️ DevOps Ready | #практика
Иногда процесс залипает и не хочет умирать даже после Ctrl+C. Или наоборот — ты не знаешь, что за процесс мешает работать. В таких случаях помогает связка fuser + kill.
Проверим, кто использует порт (например, 8080):
fuser -n tcp 8080
Или файл, занятый каким-то процессом:
fuser /var/log/syslog
Если надо сразу завершить все процессы, держащие ресурс:
fuser -k 8080/tcp
Или убить по PID (который вернул fuser):
kill -9 <PID>
🔥
fuser показывает, какие процессы используют файл или порт, а -k завершает их. Аккуратно — можно прибить что-то важное.Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍6🔥4🤝3👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Это сайт, посвящённый современным практикам разработки и эксплуатации программных систем. Материалы охватывают ключевые инструменты и процессы DevOps. Публикации сопровождаются примерами и практическими заданиями, что позволяет применять полученные знания в реальных рабочих процессах.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤8🔥8