TGViewer
Channel Public Channel
LinuxCamp | DevOps

LinuxCamp | DevOps

@linuxcamp_tg

Обо мне: C/C++/Linux эксперт. Говорим про разработку, Linux, DevOps, сети и администрирование.

Админ (реклама): @XoDefender
Чат: @linuxcamp_chat

Менеджер: @Spiral_Yuri
Биржа: https://telega.in/c/linuxcamp_tg

РКН: https://clck.ru/3RWA3C
Subscribers
13.6K
Photos
292
Videos
14
Links
402

Showing posts older than #673 · Back to latest

Older Posts 19 shown
Post #671 5.68K
Шпаргалка по файловой системе Linux

В Linux почти все начинается от корня /. Дальше система раскладывает файлы по каталогам с понятной логикой: где бинарники, где конфиги, где логи, где временные файлы. Если один раз это понять, навигация по серверу становится сильно проще.


pwd
ls /


Что где лежит

/etc - это конфиги системы и сервисов.
/var - это всё, что меняется в работе: логи, кэши, очереди, базы, runtime-данные.
/home - это домашние директории обычных пользователей, а /root это отдельный home для root.
/tmp - это временные файлы, которые не стоит считать постоянным хранилищем.
/usr - это большая часть пользовательских утилит, библиотек и общих данных.
/opt - обычно используют для стороннего софта.
/dev, /proc, /sys - это уже интерфейс к устройствам и состоянию системы, а не “обычные папки с файлами”.


/etc -> конфиги
/var -> логи и изменяемые данные
/home -> файлы пользователей
/tmp -> временное
/usr -> программы и библиотеки


Полезный ориентир

Самая частая ошибка новичков такая: искать все подряд в /home или складывать рабочие данные куда попало. На практике удобно помнить простое правило: если меняешь настройки, почти всегда идешь в /etc; если ищешь логи, почти всегда идешь в /var/log; если сервис что-то держит на диске, часто это тоже /var. Это уже сильно ускоряет диагностику.


cd /etc
cd /var/log
ls /home


Микролайфхак

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


du -sh /* 2>/dev/null | sort -h


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

Вывод

Файловая система Linux не хаотичная. У нее есть структура, и чем раньше привыкаешь к /etc, /var, /home, /tmp и /usr, тем легче жить на любом сервере.

LinuxCamp | #utils
  • 👍 42
  • 🔥 6
  • ❤ 5
Post #669 5.35K
Дыра в systemd

Найдена критическая уязвимость в Ubuntu, которая позволяет локальным злоумышленникам получать root-доступ к системе из-за systemd.

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

«Нашли очередной критический баг в systemd в Ubuntu. Давайте пожелаем всем пользователям Devuan отлично провести День отца с семьёй, вместо того чтобы разгребать это единорожье дерьмо»


👍- лучше systemd еще не придумали

🔥 - какой же это стрем, ваше systemd

LinuxCamp | #news
  • 👍 75
  • 🔥 55
  • 😁 9
  • 🌚 4
  • 👏 1
Post #667 5.48K
Bash parameter expansion: шпаргалка, которая реально нужна

Значение по умолчанию и проверка на пустоту

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


echo "${NAME:-guest}" # если NAME пустая или не задана → guest
echo "${NAME:=guest}" # то же самое, но еще и присвоит NAME=guest
echo "${NAME:?NAME required}" # если пустая/не задана → ошибка
echo "${NAME:+set}" # если NAME задана и не пустая → set


Короткая логика такая:


:- взять запасное значение
:= присвоить запасное значение
:? упасть с ошибкой
:+ вернуть другое значение, если переменная есть


Обрезка, замена и работа со строкой

Через expansion можно убрать префикс, суффикс или заменить кусок строки без sed и cut. Для shell-скриптов это очень удобно.


FILE="/opt/app/logs/error.log"

echo "${FILE#*/}" # opt/app/logs/error.log
echo "${FILE##*/}" # error.log
echo "${FILE%/*}" # /opt/app/logs
echo "${FILE%%/*}" # пусто, т.к. уберет все после первого /
echo "${FILE/logs/tmp}" # /opt/app/tmp/error.log
echo "${FILE//o/O}" # /Opt/app/lOgs/errOr.lOg


Запомнить можно так:


# и % = убрать кусок
## и %% = убрать по максимуму
/old/new = заменить первое совпадение
//old/new = заменить все


Длина, подстрока и индексы

Когда нужно быстро достать часть строки или длину, Bash уже умеет это сам.


STR="community-back-dev"

echo "${#STR}" # длина строки
echo "${STR:0:9}" # community
echo "${STR:10}" # back-dev


Для массивов тоже работает:


ARR=(api worker nginx)

echo "${ARR[0]}" # api
echo "${ARR[@]}" # все элементы
echo "${#ARR[@]}" # количество элементов


Вывод

Если в bash-скрипте у тебя появились cut, awk и sed ради одной мелочи, сначала проверь, нельзя ли решить это через parameter expansion. Часто это короче, быстрее и читается лучше.

LinuxCamp | #utils
  • 👍 36
  • 🔥 9
  • ❤ 8
Post #665 7.39K
rsync по SSH: быстрые копии без ошибок

Быстро и с прогрессом

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


rsync -avh --info=progress2 ./project/ user@server:/opt/project/


Исключения и чистая синхронизация

Часто не нужно тащить node_modules, .git, кеши и сборки. Это проще делать через --exclude. А если хочешь, чтобы на сервере стало ровно как локально, добавляешь --delete, тогда удалятся файлы, которых уже нет у тебя.


rsync -avh --info=progress2 \
--exclude '.git' --exclude 'node_modules' --exclude 'dist' \
--delete \
./project/ user@ip:/opt/project/


Быстрее на больших деревьях

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


rsync -avh --info=progress2 -z \
-e "ssh -T -c aes128-gcm@openssh.com" \
./project/ user@ip:/opt/project/


Вывод

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

LinuxCamp | #utils
  • 👍 38
  • 🔥 14
  • ❤ 6
Post #663 6.62K
age: шифрование файлов без лишних сущностей

Зачем оно нужно

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


файл → age encrypt → файл.age → age decrypt → файл


Генерация ключей и шифрование

Сначала создаёшь ключевую пару и берёшь публичный ключ. Шифруешь файл публичным ключом, расшифровываешь приватным. В репозитории обычно хранится только *.age, приватный ключ хранится отдельно.


age-keygen -o key.txt
age-keygen -y key.txt > key.pub

age -r "$(cat key.pub)" -o .env.age .env
age -d -i key.txt -o .env .env.age


Практика для серверов и команд

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


age -d -i key.txt .env.age | docker compose --env-file /dev/stdin up -d


Вывод

age - это простой способ держать секреты в файлах, не превращая задачу в отдельный проект.

LinuxCamp | #utils
  • 👍 20
  • 🔥 9
  • ❤ 5
Post #661 6.33K
gping: ping, который показывает график

Зачем он нужен

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


gping 1.1.1.1


Как поставить и запустить

Ставится как обычная утилита, дальше просто указываешь хост или IP. Можно пинговать несколько целей одновременно и сравнить, где хуже.


# Debian/Ubuntu (часто через cargo)
cargo install gping
gping google.com 1.1.1.1 8.8.8.8


Как читать график

Каждая точка это RTT, а зубцы показывают джиттер. Если линия ровная, сеть стабильна. Если есть редкие пики, значит где-то очереди или перегрузка. Если появляются дыпы, значит потери или проблемы с маршрутом.


ровно = стабильно
пики = джиттер или очереди
пропуски = потери или таймауты


Вывод

gping удобен как быстрая диагностика сети без Wireshark и без угадывания по цифрам из ping.

LinuxCamp | #utils
  • 👍 28
  • 🔥 8
  • 👌 5
  • ❤ 1
  • 🌚 1
Post #659 10.7K
Ладно, Сэму Альтману еще есть над чем работать))

LinuxCamp | #memes
  • 😁 94
  • ❤ 6
  • ❤‍🔥 4
Post #657 6.56K
Эйджизм дошел и до Linux

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

Система сортирует на четыре группы: до 13, 13–16, 16–18 и 18+. Любое приложение сможет запросить эту категорию через API.

Если компания проигнорирует API и допустит ребёнка куда не следует, её оштрафуют: 2500$ за случайное нарушение и 7500$ за умышленное — с каждого пострадавшего ребёнка.

Дистрибутивы Linux Ubuntu и Elementary OS уже думают над текм, как реализовать функциональность проверки возраста (для всех пользовательских аккаунтов в ОС), чтобы соответствовать новому закону штата Калифорния.

«Сейчас мы изучаем, как реализовать API, который будет соответствовать требованиям закона и при этом не станет катастрофой для приватности» — Аарон Рейнболт, член Ubuntu Community Council.


Текущее предложение – добавить новый D-Bus-интерфейс (org.freedesktop.AgeVerification), что потенциально затронет все Linux-системы.

LinuxCamp | #news
  • 💊 43
  • 😁 17
  • 👍 7
  • 🤯 4
Post #655 5.93K
fzf-tab: автокомплит через tab в терминале

Что это такое

fzf-tab - это плагин для zsh, который прокачивает Tab completion. Вместо “вставило первый вариант и молись” ты получаешь список вариантов и можешь выбрать нужный через fzf. Особенно приятно на путях, git ветках, kubectl контекстах, ssh хостах и пакетах.


Tab → список вариантов → fzf выбор → подстановка в команду


Установка и включение

Нужны zsh, fzf и менеджер плагинов (чаще всего zinit или oh-my-zsh). С zinit установка выглядит так.


zinit light Aloxaf/fzf-tab


Можно также просто склонить плагин и подключить в ~/.zshrc:


sudo apt install fzf
git clone https://github.com/Aloxaf/fzf-tab ~/.zsh/fzf-tab
source ~/.zsh/fzf-tab/fzf-tab.plugin.zsh
exec zsh


Как работать

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


cd /var/www/ # жмёшь Tab и выбираешь нужный каталог через fzf


LinuxCamp | #utils
  • ❤ 12
  • 🔥 10
  • 👌 2
Post #653 5.69K
Atuin: история команд, которую реально можно найти

Что это и чем лучше обычного history

Atuin заменяет стандартный history на нормальный поиск по командам. Он хранит команды в базе, умеет искать по подстроке и фильтровать по каталогу, хосту и времени, а не просто листать "последние 500 строк".


команда → сохраняется → индексируется → находится за секунды


Установка и подключение к shell

Ставишь бинарник и добавляешь инициализацию в свой shell. После этого стрелка вверх начинает работать через Atuin, плюс появляется интерактивный поиск по истории.


atuin init bash >> ~/.bashrc
source ~/.bashrc


Как пользоваться

Самый частый сценарий: забыл точную команду, помнишь кусок или контекст. Открываешь поиск и находишь ровно то, что ты уже делал. Это особенно полезно для длинных команд с kubectl, docker, ssh, rsync, openssl.


atuin search "kubectl port-forward"


Вывод

Atuin превращает историю команд из помойки в инструмент, который экономит время каждый день.

LinuxCamp | #utils
  • 🔥 16
  • 👍 6
  • ❤ 5
  • 🤔 1
Post #651 6.02K
Шпаргалка про доступы в Linux: ACL

Зачем ACL, если есть chmod

chmod умеет только "владелец, группа, остальные". ACL нужен, когда надо выдать права конкретному пользователю или группе точечно, не трогая владельца и не создавая отдельную группу под каждый кейс. Проверить, есть ли ACL у файла, можно сразу командой.


getfacl file.txt


Выдать доступ конкретному юзеру

Дать пользователю alice чтение и запись на файл, не меняя chmod. Снять правило можно отдельной командой, чтобы не путаться потом в том, почему у него есть доступ.


setfacl -m u:alice:rw file.txt
setfacl -x u:alice file.txt


Дефолтные ACL для папки

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


setfacl -m d:u:alice:rwX -m u:alice:rwX /shared
getfacl /shared


Вывод:

ACL это точечные права для файлов без плясок с группами. Если видишь странный доступ, не забывай смотреть getfacl, помимо ls -l.

LinuxCamp | #utils
  • 🔥 27
  • 👍 16
  • ❤ 4
Post #649 5.53K
Как пишут интерфейсы для терминала на Rust

Многие популярные CLI-утилиты имеют интерактивный интерфейс прямо в терминале.

Такие интерфейсы называют TUI (Terminal UI) - панели, таблицы, графики и списки, которые работают прямо в терминале по SSH. В Rust для этого часто используют библиотеку Ratatui.

Что умеет Ratatui

Это набор виджетов для терминальных интерфейсов:


* таблицы
* списки
* графики
* вкладки
* прогресс-бары
* панели и layout


Пример создания панели:


use ratatui::widgets::{Block, Borders};

let block = Block::default()
.title("Dashboard")
.borders(Borders::ALL);


После этого интерфейс рендерится прямо в терминал.

Почему TUI снова популярны

Терминальные интерфейсы имеют несколько преимуществ:


* работают по SSH
* почти не требуют ресурсов
* идеально подходят для DevOps
* удобны для серверных инструментов


Поэтому всё больше CLI-утилит делают не просто вывод текста, а полноценный интерфейс в терминале.

Вывод

Ratatui - библиотека на Rust, которая позволяет писать интерактивные интерфейсы прямо в терминале. Именно на таких инструментах строятся современные TUI-утилиты вроде lazygit и k9s.

LinuxCamp | #utils
  • 👍 22
  • ❤ 7
  • 🔥 5
Post #648 5.86K
Только она спасает 🫡

LinuxCamp | #memes
  • 😁 96
  • 👍 11
  • 🔥 6
  • 🤣 4
  • ❤ 3
  • 🤔 1
  • 🤯 1
  • 🥴 1
Post #646 6.42K
Параллельная разработка без git checkout

Есть интересная CLI-утилита - worktrunk.

Она упрощает работу с git worktree - встроенной возможностью Git, которая позволяет держать несколько веток одного репозитория одновременно в разных папках.

В чем проблема обычного Git. Обычно workflow такой:


git checkout feature-a
# работаем

git checkout main

# возвращаемся
git checkout feature-b


Но если нужно:

* держать несколько веток одновременно
* тестировать несколько фич
* работать с несколькими PR
* запускать разные версии сервиса


начинаются постоянные checkout, stash и переключения.

Что решает worktrunk

Утилита делает удобным использование git worktree.

Создать отдельную рабочую папку для ветки:


wt create feature-auth


Git создаст новую директорию:


repo/
repo-feature-auth/


Теперь можно держать несколько веток открытыми, запускать разные версии проекта, не делать постоянные checkout

Почему это особенно актуально сейчас

С появлением AI-агентов разработка все чаще становится параллельной.

Например:


repo-main -> основная работа
repo-agent-auth -> агент пишет фичу
repo-agent-refactor -> агент делает рефактор
repo-agent-tests -> агент генерирует тесты


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

Вывод

git worktree позволяет иметь один репозиторий, несколько веток и несколько рабочих директорий, а CLI вроде worktrunk просто делает эту возможность Git намного удобнее.

LinuxCamp | #utils
  • 👍 14
  • 🤔 8
  • 🔥 4
  • ⚡ 2
  • ❤ 2
  • ❤‍🔥 1
  • 😍 1
Post #645 7.29K
Говори с Linux. Буквально.

Vocalinux - это CLI утилита для Linux, которая слушает микрофон, распознает речь и вставляет результат как обычный текст в активное окно.

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


голос → распознавание → текст → вставка в активное окно


Чем распознает и что умеет

В репозитории заявлена поддержка нескольких движков распознавания, включая whisper.cpp как основной вариант, а также альтернативы вроде Whisper и Vosk.

Утилита ориентирована на локальную работу и не требует облачного сервиса как обязательного условия.


vocalinux --help


Как правильно воспринимать результат

Vocalinux не "управляет Linux", он печатает распознанный текст туда, где стоит курсор.

Поэтому для терминала самый прямой сценарий это произнести команду так, чтобы она распозналась текстом, а выполнение уже делает сам shell после нажатия Enter.

Например сказать:


docker ps


и команда вставится в поле ввода

Вывод

Vocalinux полезен как hands free ввод текста, а не как голосовой ассистент, который понимает смысл фраз и сам строит команды.

LinuxCamp | #utils
  • 👍 23
  • 🤔 6
  • 🔥 5
  • 😁 5
  • 🥴 4
  • ❤ 1
Post #643 8.08K
В 2004 году Sun Fire E25K (UNIX-сервер, мейнфрейм-класс) был самым топом в мире вычислений.

Это была самая большая Unix-машина, которую вообще можно было купить за деньги (около $2 млн в максимальной конфигурации)

Что по мощностям:

• 36 процессоров UltraSPARC IV (72 ядра)
• 576 ГБ ОЗУ
• 18 полностью hot-swap плат CPU/памяти
• гигабитный Ethernet и Fibre Channel HBA
• резервированные блоки питания и зоны охлаждения, энергопотребление – около 15 кВт

Сейчас это все, конечно, смешно, но тогда равных не было 😳

LinuxCamp
  • 👍 30
  • 🔥 14
  • ❤ 11
Post #637 7.8K
Временный секрет в Linux без следов

Иногда нужно сохранить пароль или токен на пару минут. Передать в скрипт, использовать в деплое, проверить подключение и не оставить его в history, tmp-файлах или с правами.

Сделаем временный файл, который доступен только владельцу и сам удалится.

Создаём безопасный файл

Сразу задаем строгие права и создаём уникальный файл:


umask 077
SECRET_FILE=$(mktemp /tmp/secret.XXXXXX)


umask 077 гарантирует, что файл будет доступен только владельцу.
mktemp создаёт файл атомарно и защищает от подмены в /tmp.

Права выставляются в момент создания.

Вводим секрет без history

Читаем данные напрямую из TTY и записываем в файл:


read -s SECRET
printf "%s\n" "$SECRET" > "$SECRET_FILE"


read -s не показывает ввод.
Переменная живет только в текущем shell.
В history ничего не попадет.

Автоудаление

Настроим удаление через 5 минут:


(sleep 300; shred -u "$SECRET_FILE") &


sleep задает задержку. shred -u перезаписывает и удаляет файл. Процесс уходит в фон, можно продолжать работу.

Даже если выйдешь из shell, удаление все равно произойдет.

Итог

Получаем временный файл с жесткими правами, без утечек в history и без мусора на диске.

LinuxCamp | #utils
  • 👍 37
  • ❤ 13
  • 🔥 11
  • 😁 3
  • ✍ 2
  • 👌 1
Post #636 6.69K
Я настроил свое рабочее пространство в терминале сервера

Люблю работать прямо на сервере: деплой, логи, конфиги, контейнеры. Раньше для этого я открывал несколько вкладок и подключался по SSH по два-три раза. Когда проектов и логов становится много это превращается в хаос. Закрыл вкладку - процесс умер. Переподключился - всё заново.

Решение:

Пересобрать это через tmux.

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

Создать сессию:


tmux new -s backend


Окна и панели

Но самое полезное - это окна и панели.

Окна в tmux как вкладки, а панели разделяют экран внутри одного окна. Теперь у меня в одной сессии может быть окно с логами, второе с деплоем, третье с htop.

Разделить экран можно так:


Ctrl + b, % # вертикальный split
Ctrl + b, " # горизонтальный split


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


Ctrl + b, c # создание окна
Ctrl + b, n # переключение между окнами


Если нужно уйти и оставить все работать:


Ctrl + b, d


Вернуться:


tmux attach -t backend


Вывод:

В итоге у меня один SSH, по одной сессии на проект, и внутри нее уже готовое рабочее окружение под меня. Также можно разделять по стендам: дев, прод, стейдж. Заходишь и продолжаешь с того же места.

LinuxCamp | #utils
  • 👍 38
  • ❤‍🔥 8
  • 🔥 6
  • ❤ 5
Post #631 6.02K
Notepad++ полгода распространял китайский вирус через обновления из-за взлома хостинга

Китайские хакеры более полугода имели возможность запускать бинарники на компьютерах пользователей Notepad++

Детали компрометации Notepad++:

- В июне 2025 года был взломан сервер обновлений Notepad++. Это позволило вредоносным бинарникам выполняться через механизм обновления утилиты.

- По словам исследователя в области кибербезопасности Кевина Бомонта, взлом был осуществлён группировкой «Funky Stamen».

- Автор Notepad++ также заявил, что, по всей вероятности, атака была проведена «китайской группой, спонсируемой государством».

- 18 ноября 2025 года разработчик Notepad++ выпустил обновление версии 8.8.8, в которое был включён патч для апдейтера в связи с «потенциальной проблемой перехвата».

- Окончательно выгнать хакеров удалось только 2 декабря.

Это тот редкий кейс, когда open-source проект пострадал не из-за собственного кода, а из-за слабого звена в цепочке поставки — хостинга. Полгода атака оставалась почти незаметной.

LinuxCamp | #news
  • 😱 23
  • 👍 7
  • ❤ 6
  • 😁 1
  • 🤔 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →