Linux Skill - Освой Linux c нуля до DevOps
11.2K subscribers
68 photos
103 videos
501 links
Освой Linux c нуля до DevOps
Подробный гайд по Linux и море других уроков для системных администраторов

📩 По всем вопросам: @chorapov

РКН https://vk.cc/cMUwm4
Download Telegram
🔍 Как рекурсивно найти все файлы в текущей и поддиректориях с использованием шаблонов?

Если ты ищешь способ найти все файлы, соответствующие определенному шаблону, в текущей директории и всех поддиректориях, используй команду find:


find . -name "foo*"


Объяснение:
- find требует начальную точку поиска, поэтому . (точка) указывает на текущую директорию.
- "foo*" — это шаблон, который указывает find искать все файлы, начинающиеся с "foo".

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

find . -iname "foo*"

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

find . -name "foo*" 2>/dev/null

- Чтобы искать только файлы, исключая директории, добавь -type f:

find . -name "foo*" -type f


Советы:
- Обязательно используй кавычки вокруг шаблона, чтобы избежать его расширения оболочкой перед передачей в find.
- Если у тебя есть символические ссылки, и ты хочешь их обрабатывать, добавь опцию -L.

Ветка: https://stackoverflow.com/questions/5905054/how-can-i-recursively-find-all-files-in-current-and-subfolders-based-on-wildcard

📩 Завтра: Darling: Запускай MacOS приложения на Linux как профи!
Включи 🔔 чтобы не пропустить!
________________

Дополнительный материал:
🧠 - Linux Deep Dive: Разбираемся с UID и группами
🧠 - Как использовать команду basename для упрощения ваших скриптов Bash
🧠 - От простого до грандиозного: Путешествие Kubernetes в мире контейнеризации

tags: #linux #find #search #tips #stackoverflow @LinuxSkill
👍19🔥2
🎨 Как изменить цвет вывода команды echo в Linux?

Хочешь добавить немного цвета в свои скрипты? Используй ANSI escape-коды, чтобы изменить цвет текста в терминале! Вот как это сделать:

Коды цветов:
- Черный: 0;30, Темно-серый: 1;30
- Красный: 0;31, Светло-красный: 1;31
- Зеленый: 0;32, Светло-зеленый: 1;32
- Коричневый/Оранжевый: 0;33, Желтый: 1;33
- Синий: 0;34, Светло-синий: 1;34
- Фиолетовый: 0;35, Светло-фиолетовый: 1;35
- Голубой: 0;36, Светло-голубой: 1;36
- Светло-серый: 0;37, Белый: 1;37

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

RED='\033[0;31m'
NC='\033[0m' # Без цвета
printf "I ${RED}love${NC} Stack Overflow\n"


Совет: Если используешь echo, добавь флаг -e для обработки escape-последовательностей:

echo -e "I ${RED}love${NC} Stack Overflow"


Замечания:
- Используй кавычки, чтобы избежать расширения шаблонов.
- На MacOSX вместо \e используй \x1B.
- Цвета зависят от конфигурации терминала, так что результат может различаться.

Теперь ты знаешь, как добавить немного цвета в свои скрипты! 🎨

Ветка: https://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux

📩 Завтра: Неожиданные секреты Linux: 12 утилит, которые спасут твой сервер!
Включи 🔔 чтобы не пропустить!
____________________

Дополнительный материал:
🧠 - Освежаем Linux Skills: Как удалить особые режимы разрешений?
🧠 - Станьте мастером правописания в Linux с помощью команды Aspell
🧠 - Путь дистрибутивов на базе Gentoo от Calculate Linux до Sabayon

@LinuxSkill #echo #stackoverflow
👍8🔥7
🛠️ Как удалить экспортированную переменную окружения в Linux?

Если тебе нужно удалить экспортированную переменную окружения, команда unset — это то, что тебе нужно:

unset GNUPLOT_DRIVER_DIR


Важно знать:
- Эта команда удаляет переменную только для текущей сессии терминала. При открытии нового окна терминала переменные загружаются из таких файлов, как ~/.bashrc или ~/.profile.
- Если переменная автоматически устанавливается при каждом запуске терминала, попробуй найти её в скрытых файлах домашней директории. Используй команду:
  grep -r <имя_переменной> ~

Это может занять время, если у тебя много файлов.

Как сохранить значение переменной, но убрать экспорт:
- В bash можно использовать:
typescript
  declare +x MYVAR

или

  export -n MYVAR


Удаление переменной в разных сессиях:
- Нет команды, которая бы удалила переменную во всех существующих сессиях. Лучше найти файл инициализации, где она устанавливается, и отредактировать его, чтобы переменная не устанавливалась в будущих сессиях.

Ветка: https://stackoverflow.com/questions/6877727/how-do-i-delete-an-exported-environment-variable

📩 Завтра: Твой незаменимый помощник: Скрипт для мониторинга Linux!
Включи 🔔 чтобы не пропустить!
____________________

Дополнительный материал:
🧠 - Улучшаем Linux Skills: Мастерство символического представления разрешений с chmod
🧠 - Знаете ли вы, как узнать архитектуру вашей машины в Linux
🧠 - Открытие Ansible: Как простой инструмент стал гигантом управления конфигурациями

#stackoverflow @LinuxSkill #Linux #EnvironmentVariables #Bash #Tips #Automation
👍13
🔍 Как найти различия между двумя деревьями каталогов в Linux?

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

Чтобы сравнить два дерева каталогов и найти различия в содержимом файлов, используй команду diff с флагами -qr:

diff -qr dir1/ dir2/


- -q или --brief — выводит только информацию о различиях, без детального сравнения.
- -r или --recursive — рекурсивно обходит все подкаталоги.

Если ты хочешь увидеть различия для файлов, которые могут отсутствовать в одной из директорий, добавь флаг -N:

diff -qrN dir1/ dir2/


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

🌳 Ветка: https://stackoverflow.com/questions/4997693/given-two-directory-trees-how-can-i-find-out-which-files-differ-by-content

📩 Завтра: 18 команд которые должен знать каждый линуксоид!
Включи 🔔 чтобы не пропустить!
____________________

Дополнительный материал:
🧠 - Мастерство использования команды chown для смены владельца файлов и каталогов
🧠 - Станьте Мастером Календаря в Linux с Cal и NCal
🧠 - Станьте Мастером Управления Пользователями в Linux

#stackoverflow @LinuxSkill #Linux #Diff #DirectoryComparison #SysAdmin #DevOps
👍23
⏱️ Как измерить время выполнения программы в Linux?

Хочешь узнать, сколько времени занимает выполнение твоих скриптов или команд в Linux? Сегодня мы расскажем, как использовать встроенную команду time для этого.

Основная информация:

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

1. Использование команды time:

Просто добавь time перед командой, которую хочешь измерить. Например:

   time sleep 2


Вывод будет примерно таким:

   real    0m2.009s
user 0m0.000s
sys 0m0.004s


- real — общее время выполнения.
- user — время, затраченное на выполнение пользовательского кода.
- sys — время, затраченное на выполнение системного кода.

2. Измерение времени для нескольких команд:

Если нужно измерить время выполнения нескольких команд, используй группу команд:

   time { command1; command2; }


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

🌳 Ветка: https://stackoverflow.com/questions/385408/get-program-execution-time-in-the-shell

📩 Завтра: Как не стать жертвой сниффинга паролей на Linux
Включи 🔔 чтобы не пропустить!
____________________

Дополнительный материал:
🧠 - Открываем Мир b2-tools
🧠 - Открываем Все Тайны Команды Cat
🧠 - Разгадываем Загадки с Diff3

#stackoverflow @LinuxSkill #Linux #TimeCommand #Performance #SysAdmin #DevOps
👍14
🛠️ Что означает $@ в shell скрипте?

Если ты когда-либо задавался вопросом, что такое $@ в shell скрипте, то сегодня мы разберем эту загадку и покажем, как использовать его для передачи параметров.

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

./someScript.sh foo bar


то $@ будет равно foo bar.

Когда внутри someScript.sh ты используешь:

umbrella_corp_options "$@"


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

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

Если ты вызовешь:

./someScript.sh foo bar "boo far"


то $@ в двойных кавычках будет содержать три аргумента: "foo", "bar" и "boo far".

Использование $@ в shell скриптах позволяет легко и безопасно передавать параметры, включая те, которые содержат пробелы. Попробуй сам и убедись, насколько это удобно!

🌳 Ветка: https://stackoverflow.com/questions/9994295/what-does-mean-in-a-shell-script

📩 Завтра: Защити свой сервер: Настройка безопасности SSH на Linux
Включи 🔔 чтобы не пропустить!
____________________

Дополнительный материал:
🧠 - Текстовый редактор Nano — как работать с файлами на минималках и не страдать!
🧠 - Почувствуй себя цифровым рентгенологом — откроем файлы насквозь с Od!
🧠 - Давно занимался спортом? Нет? Ну вот, пора хотя бы пароли сменить!

#stackoverflow @LinuxSkill #Linux #ShellScripting #SysAdmin #DevOps
👍18🔥2
🧠 Нужно ли ставить кавычки вокруг переменных в shell-скриптах?

Привет, повелитель терминала! Если ты в скриптах пишешь $var без кавычек — скорее всего, ты (пока что) просто везучий.
Давай разберёмся, когда и зачем переменные в shell-скриптах нужно оборачивать в кавычки.

### Общее правило:
> Оборачивай переменные в двойные кавычки, если не хочешь сюрпризов от пробелов, пустых значений и спецсимволов.

---

### Когда кавычки обязательны:
1. Значение может быть пустым:
   [ "$var" = "value" ]

2. Есть пробелы:
   xdg-open "$URL"

3. В переменной спецсимволы (*, &, ?):
   wget "$link"


---

### Пример бага:
file="My documents/report.pdf"
rm $file # Попытка удалить два файла: 'My' и 'documents/report.pdf'
rm "$file" # Удаляется нужный файл


---

### Когда кавычки можно опустить:
- $?, $#, $0 — безопасны без кавычек.
- Внутри арифметических или логических выражений:
   if [ "$?" -eq 0 ]; then ...


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

🌳 Ветка: https://stackoverflow.com/questions/10067266/when-to-wrap-quotes-around-a-shell-variable

📩 Завтра: Секреты Bash: Как тестировать порты без curl и wget!
Включи 🔔 чтобы не пропустить!
____________________

Дополнительный материал:
🧠 - Откройте для себя мир Управления Службами в Linux с нашей серией статей
🧠 - Контейнер в контейнере? Да это как матрёшка для айтишников: открываешь, а там ещё больше проблем… но зато все свои!
🧠 - Секретная Команда nsenter! Управляй Контейнерами как Хакер

#stackoverflow @LinuxSkill #Linux #ShellScripting #Quotes #SysAdmin #DevOps
👍14
🧯 Как удалить конкретные правила из iptables (а не всё подряд)?

Привет, линуксоид! Бывало такое: правила в iptables работают как часы, но внезапно нужно откатить одно-два, не трогая всё остальное. Ниже — короткий гайд, как это сделать аккуратно и по-взрослому.

Способ 1. Удалить правило по содержимому
Повтори ту же команду, но с -D вместо -A:
iptables -D INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

💡 Работает, только если правило совпадает дословно.

🧩 Способ 2. Удалить по номеру
Сначала покажи номера правил:
iptables -L INPUT --line-numbers

Удаление:
iptables -D INPUT 3

Если правило в NAT:
iptables -t nat -L PREROUTING --line-numbers
iptables -t nat -D PREROUTING 1


🛠 Способ 3. Комментарии и iptables-restore
Добавляешь правило с комментарием:
iptables -A INPUT -s 1.2.3.4 -j DROP -m comment --comment "ban_temp"

Потом удаляешь всё с этим тегом:
iptables-save | grep -v "ban_temp" | iptables-restore


🧼 Способ 4. Через iptables -S
Показать все правила:
iptables -S

Удалить нужное вручную (заменив -A на -D):
iptables -D INPUT -p tcp --dport 443 -j ACCEPT


⚠️ Не забудь:
- При удалении по номеру порядок важен: после удаления строки остальные смещаются.
- Не используй iptables -F, если не хочешь снести всё подчистую.

🌳 Ветка: https://stackoverflow.com/questions/10197405/how-can-i-remove-specific-rules-from-iptables

📩 Завтра: iptables: доступ к порту 8000 только с одного IP
Включи 🔔 чтобы не пропустить!
____________________

Дополнительный материал:
🧠 - Эй, ты в курсе, что с Grafana можно раз и навсегда забыть о хаосе в мониторинге серверов?
🧠 - Секретная связка Angie и Grafana для тотального контроля над серверами
🧠 - Неожиданно закончилась память? 3 секрета команды du -h

#stackoverflow @LinuxSkill #iptables #Linux #сетевоеадминистрирование #firewall #DevOps #SysAdmin #безопасность
👍18🔥2
🔐 iptables: доступ к порту 8000 только с одного IP

Привет, хранитель сетей! Если ты хочешь открыть доступ к какому-либо сервису (например, веб-интерфейсу на порту 8000) только для одного IP, не трогая весь остальной трафик — вот как это делается через iptables.

🔧 Пример: разрешить доступ только для 1.2.3.4

iptables -A INPUT -p tcp --dport 8000 -s 1.2.3.4 -j ACCEPT
iptables -A INPUT -p tcp --dport 8000 -j DROP

Так ты явно разрешаешь доступ для IP 1.2.3.4, а все остальные — отсекаешь.

💡 Альтернатива: блокировать всех, кроме одного IP
iptables -A INPUT -p tcp --dport 8000 ! -s 1.2.3.4 -j DROP

Один простой вариант — одна строка, эффект тот же.

📌 Несколько полезных замечаний:
- Для диапазона IP используй:
-s 1.2.3.0/24
- Чтобы снять правило, замени -A на -D (или используй iptables -S и удаляй по номерам).
- Не забудь сохранить конфигурацию, если не хочешь потерять правила после перезагрузки:
  iptables-save > /etc/iptables.rules

🌳 Ветка: https://stackoverflow.com/questions/7423309/iptables-block-access-to-port-8000-except-from-ip-address

📩 Завтра: Как управлять iptables на лету — без sudo, без потерь
Включи 🔔 чтобы не пропустить!
____________________

Дополнительный материал:
🧠 - Не трать время на конфиги: как упростить работу с WireGuard
🧠 - Неожиданный способ взломать систему: что такое бинарный анализ в Linux?

#stackoverflow @LinuxSkill #iptables #Linux #firewall #порт #безопасность #SysAdmin #DevOps
👍14👀1
🧠 Как управлять iptables на лету — без sudo, без потерь

Привет, сетевой волшебник! Если ты хоть раз пытался автоматически обновлять правила iptables из приложения или скрипта — ты знаешь, насколько это боль.
Сегодня разберём, как это делать программно, безопасно и эффективно — даже без API.

🤯 Проблема: у iptables нет API

- libiptc не предназначена для использования — она нестабильна и может быть удалена в будущем.
- Прямого, документированного API в C, Python, Rust и т.д. не существует.

📌 Официальный ответ от Netfilter:
> “Нет, API не предусмотрен. Используйте system() или iptables-restore.”
Источник: Netfilter FAQ

Что работает на практике:

#1. iptables-restore (атомарная загрузка правил)
Можно применять *весь ruleset сразу*, не теряя соединений:

iptables-restore < my_ruleset.conf


✔️ Безопасно: правила применяются при COMMIT, в один вызов ядра
✔️ Работает из любой программы через stdin


#2. ipset — для добавления IP без пересборки

ipset create allowlist hash:ip
ipset add allowlist 1.2.3.4
iptables -A INPUT -m set --match-set allowlist src -j ACCEPT


✔️ Отлично подходит для динамических списков
✔️ Есть поддержка timeout и swap
✔️ Работает быстро и без потерь


#3. rfw — REST API для iptables (open source)

Позволяет управлять правилами через HTTP-запросы:

PUT /drop/input/eth0/11.22.33.44


👉 Проект: https://github.com/gluczywo/rfw
✔️ Поддерживает JSON, GET, PUT, DELETE, сериализацию
✔️ Работает на localhost без SSL
✔️ Подходит для распределённых систем


#4. python-iptables

Обёртка над libiptc (но будь осторожен):

🔗 https://github.com/ldx/python-iptables
✔️ Удобен для скриптов
Требует осторожности при работе с низкоуровневым API

🛑 Что не делать:

- Не пиши правила через iptables -A в цикле
- Не используй libiptc напрямую в проде
- Не забывай про iptables-save как бэкап перед внесением правок

🌳 Ветка: https://stackoverflow.com/questions/109553/how-can-i-programmatically-manage-iptables-rules-on-the-fly

📩 Завтра: Вопрос №17 из теста Linux Essentials Certification
Включи 🔔 чтобы не пропустить!
____________________

Дополнительный материал:
🧠 - Настрой cron за 5 минут и забудь о ручной работе навсегда!
🧠 - Ты больше никогда не запутаешься в systemd: разбор по шагам!
🧠 - 10 секретов команды ping, которые знают только сетевые гуру

#stackoverflow @LinuxSkill #iptables #ipset #Linux #SysAdmin #DevOps #firewall #rfw #сетибезопасность
👍14
🚀 Как работает export в bash и когда он реально нужен?

Привет, архитектор переменных и властелин скриптов! Задумывался, зачем вообще нужен export в bash и что он делает с переменными? Сегодня разложим по полочкам — коротко, чётко и с пользой!

🧠 Что делает export

Когда ты пишешь:
export MY_VAR=value

ты говоришь bash: “Эй, сделай эту переменную доступной для всех дочерних процессов.”
Например, твой скрипт вызывает python, curl, node — они смогут использовать MY_VAR.

🤔 А если без export?

Вот так:
MY_VAR=value

Переменная будет доступна только внутри текущего shell, но не в дочерних процессах.
Однако есть лайфхак:

MY_VAR=hello node script.js

Так переменная временно экспортируется только для выполнения node script.js. Удобно? Да!

⚠️ Важное ограничение
Экспорт работает вниз по процессу, но не вверх.
Если ты экспортируешь переменную в скрипте, родительский терминал её не увидит.

🛠 Вывод
Хочешь, чтобы переменная работала в дочерних процессах? Используй export.
Пишешь скрипт с вызовом других программ? Без export будет больно.
Но если переменная нужна только внутри текущего скрипта — не трать лишние байты.


🌳 Ветка: https://stackoverflow.com/questions/1158091/defining-a-variable-with-or-without-export

📩 Завтра: Прокачай свой namei: секретная опция для идеального вывода!
Включи 🔔 чтобы не пропустить!
____________________

Дополнительный материал:
🧠 - Поднимем отказоустойчивое хранилище в Proxmox VE с Ceph
🧠 - Отключи ненужные конфиги в Apache за пару команд!
🧠 - Контролируй трафик в реальном времени! Три утилиты для мониторинга сети в Linux

#stackoverflow @LinuxSkill #Linux #ShellScripting #Export #SysAdmin #DevOps
👍19🔥1
💥 Почему set -e в bash может сломать тебе всё!

Привет, терминальный заклинатель! Кажется, ты добавил set -e в свой bash-скрипт и думал, что теперь ошибки сами себя поймают? А потом скрипт резко перестал доходить до конца?.. Давай разберемся, в чём подвох.

🤔 Что вообще делает set -e?

set -e говорит интерпретатору bash:
> "Если любая команда завершится ошибкой, — останови скрипт немедленно".

Это полезно для CI/CD, бэкапов и всего, что не прощает ошибок. Но...

⚠️ Проблема: поведение set -e — неочевидно!

Вот типичный случай:

#!/bin/bash
set -e
false
echo "Я не выполнюсь!"


Скрипт завершится после false, и echo даже не запустится. Всё логично.
Но теперь внимание:

#!/bin/bash
set -e
if false; then
echo "Упс"
fi
echo "А вот и я!"


🎉 Здесь echo выполнится! Потому что ошибки внутри if, while, until и &&/|| — игнорируются!

🔍 Когда set -e может навредить?

Если ты используешь команды вроде:

grep "что-то" файл.txt || echo "не найдено"


Скрипт продолжит работу, даже если grep вернёт ненулевой код. Но теперь представь, что ты этого не знал… 😬

Как правильно использовать set -e?
1. Сначала — пойми, где оно действительно нужно (например, в CI/CD, деплое, тестах).
2. Используй его в отдельных функциях, а не во всём скрипте сразу.
3. Если обрабатываешь ошибку вручную — используй ||, if, trap, set +e.

👨‍💻 Итог:
set -e — не волшебная палочка. Это строгий сторож, который иногда рубит по-живому. Используй с умом, тестируй поведение и знай, где он тебя может подставить.

🌳 Ветка: https://stackoverflow.com/questions/19622198/what-does-set-e-mean-in-a-bash-script

📩 Завтра: BTRFS: Продвинутые техники для настоящих гуру!
Включи 🔔 чтобы не пропустить!
____________________

Дополнительный материал:
🧠 -Настрой мониторинг сети в реальном времени с Prometheus и Grafana
🧠 - b2-tools — простое и быстрое резервное копирование в облако
🧠 - Ты не знал, что cat умеет это! Лайфхаки для работы с файлами в Linux

#stackoverflow @LinuxSkill #bash #linux #скрипты #автоматизация #devops #linuxskill #сетевые_лайфхаки #shell #ci_cd #ошибки
👍18👀1