🧱 Что такое Linux namespaces
По умолчанию процессы в Linux видят один и тот же мир: общий список процессов, сетевые интерфейсы, файловую систему.
Namespaces меняют это.
Они дают каждому процессу собственную «реальность»: свой сетевой стек, свой список процессов, свою файловую иерархию — всё это работает на одном ядре, без отдельной виртуальной машины.
Так Linux создаёт базу для контейнеров: изоляция без лишней нагрузки и полноценного гипервизора.
В серии разборов посмотрим:
• какие бывают namespaces,
• как они устроены,
• как поиграться с ними с помощью обычных команд Linux.
#Linux #Containers #DevOps
blog.sysxplore.com/p/part-1-what-are-linux-namespaces
@linux_education
По умолчанию процессы в Linux видят один и тот же мир: общий список процессов, сетевые интерфейсы, файловую систему.
Namespaces меняют это.
Они дают каждому процессу собственную «реальность»: свой сетевой стек, свой список процессов, свою файловую иерархию — всё это работает на одном ядре, без отдельной виртуальной машины.
Так Linux создаёт базу для контейнеров: изоляция без лишней нагрузки и полноценного гипервизора.
В серии разборов посмотрим:
• какие бывают namespaces,
• как они устроены,
• как поиграться с ними с помощью обычных команд Linux.
#Linux #Containers #DevOps
blog.sysxplore.com/p/part-1-what-are-linux-namespaces
@linux_education
👍4❤1
🔍 Как посмотреть запущенные сервисы в Linux (#systemd)
Хочешь быстро выяснить, какие службы активны, какие включены при старте и что вообще работает на сервере? Вот несколько команд с :contentReference, которые помогут в мониторинге, отладке и защите системы.
Основные команды:
- systemctl list-units --type=service — список всех сервисов и их состояния
- systemctl list-units --type=service --state=running — только запущенные
- systemctl list-unit-files --type=service — какие сервисы и как настроены (enabled/disabled)
- systemctl is-enabled — проверить, включен ли сервис при старте
- systemctl status — детали по конкретному сервису
Когда это полезно:
- После установки или изменения сервиса — проверить, что всё правильно
- При отладке, когда что-то не работает — найти, был ли сервис запущен
- В целях безопасности — отключить нежелательные или неиспользуемые сервисы, которые могут стать уязвимостью
Используй эти команды, чтобы держать руку на пульсе системы.
👉 Полное руководство — tecmint: https://tecmint.com/list-all-running-services-under-systemd-in-linux/
@linux_education
Хочешь быстро выяснить, какие службы активны, какие включены при старте и что вообще работает на сервере? Вот несколько команд с :contentReference, которые помогут в мониторинге, отладке и защите системы.
Основные команды:
- systemctl list-units --type=service — список всех сервисов и их состояния
- systemctl list-units --type=service --state=running — только запущенные
- systemctl list-unit-files --type=service — какие сервисы и как настроены (enabled/disabled)
- systemctl is-enabled — проверить, включен ли сервис при старте
- systemctl status — детали по конкретному сервису
Когда это полезно:
- После установки или изменения сервиса — проверить, что всё правильно
- При отладке, когда что-то не работает — найти, был ли сервис запущен
- В целях безопасности — отключить нежелательные или неиспользуемые сервисы, которые могут стать уязвимостью
Используй эти команды, чтобы держать руку на пульсе системы.
👉 Полное руководство — tecmint: https://tecmint.com/list-all-running-services-under-systemd-in-linux/
@linux_education
👍1
⚠️ Уязвимость CVE-2025-59287 в WSUS
Этот репозиторий демонстрирует уязвимость удаленного выполнения кода в Microsoft Windows Server Update Services, вызванную небезопасной десериализацией данных. Атакующий может отправить специально подготовленные SOAP-запросы для выполнения произвольного кода с правами SYSTEM.
🚀Основные моменты:
- Доказательство концепции уязвимости.
- Использует .NET BinaryFormatter для создания полезной нагрузки.
- Поддерживает Windows и Linux.
- Предоставляет пример с безвредным калькулятором.
- Образовательное использование только в контролируемых средах.
📌 GitHub: https://github.com/th1n0/CVE-2025-59287
#python
@linux_education
Этот репозиторий демонстрирует уязвимость удаленного выполнения кода в Microsoft Windows Server Update Services, вызванную небезопасной десериализацией данных. Атакующий может отправить специально подготовленные SOAP-запросы для выполнения произвольного кода с правами SYSTEM.
🚀Основные моменты:
- Доказательство концепции уязвимости.
- Использует .NET BinaryFormatter для создания полезной нагрузки.
- Поддерживает Windows и Linux.
- Предоставляет пример с безвредным калькулятором.
- Образовательное использование только в контролируемых средах.
📌 GitHub: https://github.com/th1n0/CVE-2025-59287
#python
@linux_education
👍3
⚡️ Google сообщает о новом типе киберугроз: малварь начала использовать LLM во время выполнения
Google Threat Intelligence фиксирует серьёзные изменения в : вредоносные программы больше не просто пишутся с помощью ИИ - они подключают LLM прямо во время работы.
Что это меняет:
- Поведение вируса перестаёт быть статичным - он адаптируется к окружению в реальном времени.
- Код может переписываться или запутываться динамически, усложняя разбор и реверс.
- Логика атаки меняется на лету, что помогает обходить сигнатуры и классические детекторы.
- Вредоносная программа фактически получает “мозги”, способные анализировать ситуацию и подбирать оптимальную тактику уклонения.
По сути, ИИ перестал быть только инструментом разработчиков малвари -
он стал частью самой атаки, превращая вредоносный код в систему, которая учится и подстраивается в процессе выполнения.
Это качественно новый уровень угроз, к которому традиционные методы защиты оказались не готовы.
https://www.pcgamer.com/software/ai/great-now-even-malware-is-using-llms-to-rewrite-its-code-says-google-as-it-documents-new-phase-of-ai-abuse/
@linux_education
Google Threat Intelligence фиксирует серьёзные изменения в : вредоносные программы больше не просто пишутся с помощью ИИ - они подключают LLM прямо во время работы.
Что это меняет:
- Поведение вируса перестаёт быть статичным - он адаптируется к окружению в реальном времени.
- Код может переписываться или запутываться динамически, усложняя разбор и реверс.
- Логика атаки меняется на лету, что помогает обходить сигнатуры и классические детекторы.
- Вредоносная программа фактически получает “мозги”, способные анализировать ситуацию и подбирать оптимальную тактику уклонения.
По сути, ИИ перестал быть только инструментом разработчиков малвари -
он стал частью самой атаки, превращая вредоносный код в систему, которая учится и подстраивается в процессе выполнения.
Это качественно новый уровень угроз, к которому традиционные методы защиты оказались не готовы.
https://www.pcgamer.com/software/ai/great-now-even-malware-is-using-llms-to-rewrite-its-code-says-google-as-it-documents-new-phase-of-ai-abuse/
@linux_education
👍3❤1
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Linux: совет дня
Полезный Linux-совет: если нужно быстро понять, какие файлы недавно менялись, используй find с фильтрацией по времени.
Это помогает при отладке, поиске подозрительной активности и отслеживании свежих изменений в проекте. Подписывайся, больше фишек каждый день !
Быстрый совет по Linux
файлы, изменённые за последние 10 минут
find . -type f -mmin -10
изменённые за последний час
find /var/log -type f -mmin -60
изменённые за последние 24 часа
find . -type f -mtime -1
только директории, изменённые за последние 30 минут
find . -type d -mmin -30
показывать время изменения вместе с результатами
find . -type f -mmin -15 -exec ls -lh {} \;
@linux_education
Полезный Linux-совет: если нужно быстро понять, какие файлы недавно менялись, используй find с фильтрацией по времени.
Это помогает при отладке, поиске подозрительной активности и отслеживании свежих изменений в проекте. Подписывайся, больше фишек каждый день !
Быстрый совет по Linux
файлы, изменённые за последние 10 минут
find . -type f -mmin -10
изменённые за последний час
find /var/log -type f -mmin -60
изменённые за последние 24 часа
find . -type f -mtime -1
только директории, изменённые за последние 30 минут
find . -type d -mmin -30
показывать время изменения вместе с результатами
find . -type f -mmin -15 -exec ls -lh {} \;
@linux_education
🔥7❤1👍1
✔️Детектор движения на Wi-Fi, который можно собрать из хлама
Гики нашли способ сделать детектор движения без камер- на одних только Wi-Fi волнах. Такой датчик реагирует на малейшие изменения сигнала от роутера и срабатывает, когда в комнате появляется движение. Работает даже сквозь стены. И главное — схема в открытом доступе на GitHub, собрать можно за копейки.
Где пригодится:
- автоматическое включение света или отопления при появлении человека
- экономия энергии — устройства отключаются, если помещение пустое
- контроль за детьми: придёт уведомление, если ребёнок вышел из комнаты ночью
- точный климат-контроль
- уход за пожилыми: оповещение, если нет активности слишком долго
Такой DIY-датчик легко сделать из подручных деталей - полный гайд уже лежит на GitHub (https://github.com/francescopace/espectre).
https://github.com/francescopace/espectre
@linux_education
Гики нашли способ сделать детектор движения без камер- на одних только Wi-Fi волнах. Такой датчик реагирует на малейшие изменения сигнала от роутера и срабатывает, когда в комнате появляется движение. Работает даже сквозь стены. И главное — схема в открытом доступе на GitHub, собрать можно за копейки.
Где пригодится:
- автоматическое включение света или отопления при появлении человека
- экономия энергии — устройства отключаются, если помещение пустое
- контроль за детьми: придёт уведомление, если ребёнок вышел из комнаты ночью
- точный климат-контроль
- уход за пожилыми: оповещение, если нет активности слишком долго
Такой DIY-датчик легко сделать из подручных деталей - полный гайд уже лежит на GitHub (https://github.com/francescopace/espectre).
https://github.com/francescopace/espectre
@linux_education
👍4❤1
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Linux-совет: изолируй любую команду в одноразовой файловой системе
Когда хочешь протестировать скрипт, подозрительный бинарь или инсталлятор - не обязательно создавать отдельный контейнер. В Linux есть простой трюк: смонтировать временную файловую систему поверх каталога и выполнить команду так, будто она работает в «чистом» окружении.
Быстро, безопасно, без Docker.
Пример: заменить /tmp/testdir на пустой tmpfs и запускать всё внутри него, не трогая реальные файлы.
Изоляция через tmpfs - мини-песочница без Docker
создаём каталог и подменяем его на чистый tmpfs
sudo mkdir -p /tmp/safezone
sudo mount -t tmpfs -o size=100M tmpfs /tmp/safezone
запускаем тестируемую команду в изоляции
cd /tmp/safezone
bash suspicious_noscript.sh
снимаем изоляцию
cd /
sudo umount /tmp/safezone
@linux_education
Когда хочешь протестировать скрипт, подозрительный бинарь или инсталлятор - не обязательно создавать отдельный контейнер. В Linux есть простой трюк: смонтировать временную файловую систему поверх каталога и выполнить команду так, будто она работает в «чистом» окружении.
Быстро, безопасно, без Docker.
Пример: заменить /tmp/testdir на пустой tmpfs и запускать всё внутри него, не трогая реальные файлы.
Изоляция через tmpfs - мини-песочница без Docker
создаём каталог и подменяем его на чистый tmpfs
sudo mkdir -p /tmp/safezone
sudo mount -t tmpfs -o size=100M tmpfs /tmp/safezone
запускаем тестируемую команду в изоляции
cd /tmp/safezone
bash suspicious_noscript.sh
снимаем изоляцию
cd /
sudo umount /tmp/safezone
@linux_education
❤7
🧠 Как точно измерить использование памяти процессом в Linux
Когда система начинает «тормозить» или неожиданно заканчивается память, первое, что стоит проверить - какие процессы её съедают. Команды ps и top помогают получить общее представление, но цифры там часто обманчивы.
Процесс может выглядеть как прожорливый монстр, хотя значительная часть его памяти 0 shared, то есть разделяется с другими процессами. А наоборот, «лёгкий» процесс может скрытно потреблять больше через общие библиотеки и кэш.
Чтобы понять реальную картину, нужно копнуть глубже — в файловую систему /proc, а именно в файл smaps, где хранится подробная карта памяти каждого процесса.
Перед этим важно разобраться в трёх ключевых метриках:
- VSZ (Virtual Memory Size) — общий объём виртуальной памяти;
- RSS (Resident Set Size) — реальный объём памяти в RAM;
- PSS (Proportional Set Size) — точная оценка «реального» потребления с учётом разделяемых страниц.
💡 Эти метрики показывают, сколько памяти процесс действительно использует — и где она делится с другими.
Полный разбор и примеры смотри в оригинальном материале: blog.sysxplore.com/p/how-to-accurately-check-process-memory-usage-in-linux
@linux_education
Когда система начинает «тормозить» или неожиданно заканчивается память, первое, что стоит проверить - какие процессы её съедают. Команды ps и top помогают получить общее представление, но цифры там часто обманчивы.
Процесс может выглядеть как прожорливый монстр, хотя значительная часть его памяти 0 shared, то есть разделяется с другими процессами. А наоборот, «лёгкий» процесс может скрытно потреблять больше через общие библиотеки и кэш.
Чтобы понять реальную картину, нужно копнуть глубже — в файловую систему /proc, а именно в файл smaps, где хранится подробная карта памяти каждого процесса.
Перед этим важно разобраться в трёх ключевых метриках:
- VSZ (Virtual Memory Size) — общий объём виртуальной памяти;
- RSS (Resident Set Size) — реальный объём памяти в RAM;
- PSS (Proportional Set Size) — точная оценка «реального» потребления с учётом разделяемых страниц.
💡 Эти метрики показывают, сколько памяти процесс действительно использует — и где она делится с другими.
Полный разбор и примеры смотри в оригинальном материале: blog.sysxplore.com/p/how-to-accurately-check-process-memory-usage-in-linux
@linux_education
Sysxplore
How to Accurately Check Memory Consumption of a Process in Linux
When your Linux system starts feeling sluggish or running out of memory, one of the first things you’ll want to check is which processes are consuming the most RAM.
🔥3
💀Безопасники опубликовали список самых популярных — и самых опасных — паролей 2025 года. Картина знакомая:
123456
12345678
123456789
admin
1234
Aa123456
12345
password
123
1234567890
Ничего не меняется
Полный список: https://www.comparitech.com/news/minecraft-qwerty-and-india123-among-2025s-most-common-passwords-report/
@linux_education
123456
12345678
123456789
admin
1234
Aa123456
12345
password
123
1234567890
Ничего не меняется
Полный список: https://www.comparitech.com/news/minecraft-qwerty-and-india123-among-2025s-most-common-passwords-report/
@linux_education
🐍 Linux-совет, о котором знает очень мало людей
Когда вы пытаетесь размонтировать файловую систему (NFS, SSHFS, FTP, CIFS) и получаете вечное:
device is busy
часто lsof или fuser не показывают настоящий процесс, который держит монтирование.
Есть трюк, который почти никто не использует — прямой поиск через файловые дескрипторы процессов.
Вот команда, которая находит любой процесс, реально удерживающий путь:
for pid in /proc/[0-9]*; do
grep -q "your/mount/path" "$pid/fd"/* 2>/dev/null \
&& echo "PID: ${pid#/proc/}"
done
Что делает этот приём:
- перебирает каждый процесс в системе
- просматривает его открытые файловые дескрипторы
- находит тех, кто удерживает нужный путь
- работает даже в ситуациях, где lsof «слепой»
- позволяет точно определить виновника ошибки “device is busy”
Где полезно:
- зависший NFS после сетевого лага
- SSHFS, который удерживает сессию “наполовину”
- удалённый каталог, который держит старый процесс
- случаи, когда файловая система размонтировалась логически, но процесс всё ещё держит дескриптор
Этот метод - настоящий рентген Linux, спасает там, где все остальные инструменты бессильны.
@linux_education
Когда вы пытаетесь размонтировать файловую систему (NFS, SSHFS, FTP, CIFS) и получаете вечное:
device is busy
часто lsof или fuser не показывают настоящий процесс, который держит монтирование.
Есть трюк, который почти никто не использует — прямой поиск через файловые дескрипторы процессов.
Вот команда, которая находит любой процесс, реально удерживающий путь:
for pid in /proc/[0-9]*; do
grep -q "your/mount/path" "$pid/fd"/* 2>/dev/null \
&& echo "PID: ${pid#/proc/}"
done
Что делает этот приём:
- перебирает каждый процесс в системе
- просматривает его открытые файловые дескрипторы
- находит тех, кто удерживает нужный путь
- работает даже в ситуациях, где lsof «слепой»
- позволяет точно определить виновника ошибки “device is busy”
Где полезно:
- зависший NFS после сетевого лага
- SSHFS, который удерживает сессию “наполовину”
- удалённый каталог, который держит старый процесс
- случаи, когда файловая система размонтировалась логически, но процесс всё ещё держит дескриптор
Этот метод - настоящий рентген Linux, спасает там, где все остальные инструменты бессильны.
@linux_education
👍7🔥3❤1
👣 Rust for Malware Development
В этом репозитории содержатся исходный код различных методов, используемых авторами вредоносных программ, участниками Red Team, злоумышленниками, спонсируемыми государством хакерскими группами и т. д.
Эти методы хорошо исследованы и реализованы на Rust.
Отличный материал для погружения в кибербез.
🟠Github: https://github.com/Whitecat18/Rust-for-Malware-Development
@linux_education
В этом репозитории содержатся исходный код различных методов, используемых авторами вредоносных программ, участниками Red Team, злоумышленниками, спонсируемыми государством хакерскими группами и т. д.
Эти методы хорошо исследованы и реализованы на Rust.
Отличный материал для погружения в кибербез.
🟠Github: https://github.com/Whitecat18/Rust-for-Malware-Development
@linux_education
❤1
🛡️ Продвинутый Linux-совет по защите: включи AppArmor/SELinux профайлы для изоляции сетевых инструментов
Большинство атак начинается с получения минимального доступа к системе через пользовательский процесс.
Чтобы даже с доступом злоумышленник не смог двигаться дальше, усиливай изоляцию ключевых CLI-инструментов (curl, wget, ssh, netcat), создавая для них ограниченные профайлы AppArmor или SELinux.
Что это даёт:
• запрет на выполнение произвольных системных вызовов
• запрет на доступ к файловой системе вне разрешённого диапазона
• недоступность /proc и /sys → сложнее собрать информацию об окружении
• ограничение сетевых направлений (например, только outbound HTTPS)
• невозможность запускать подпроцессы или загружать модули ядра
🛡️ Как быстро включить защиту команд в Linux (AppArmor)
1) Проверить, что AppArmor активен
sudo aa-status
Создать профиль для команды (пример: curl)
sudo nano /etc/apparmor.d/usr.bin.curl
Загрузить профиль
sudo apparmor_parser -r /etc/apparmor.d/usr.bin.curl
Включить режим enforcing
sudo aa-enforce /etc/apparmor.d/usr.bin.curl
Теперь команда работает в изолированном профиле.
Итог: даже если вредонос получил shell, он буквально «ходит по клетке» — минимальный damage, невозможность lateral movement и быстрый детект.
Если хочешь — напишу готовый шаблон AppArmor-профайла для конкретных утилит.
@linux_education
Большинство атак начинается с получения минимального доступа к системе через пользовательский процесс.
Чтобы даже с доступом злоумышленник не смог двигаться дальше, усиливай изоляцию ключевых CLI-инструментов (curl, wget, ssh, netcat), создавая для них ограниченные профайлы AppArmor или SELinux.
Что это даёт:
• запрет на выполнение произвольных системных вызовов
• запрет на доступ к файловой системе вне разрешённого диапазона
• недоступность /proc и /sys → сложнее собрать информацию об окружении
• ограничение сетевых направлений (например, только outbound HTTPS)
• невозможность запускать подпроцессы или загружать модули ядра
🛡️ Как быстро включить защиту команд в Linux (AppArmor)
1) Проверить, что AppArmor активен
sudo aa-status
Создать профиль для команды (пример: curl)
sudo nano /etc/apparmor.d/usr.bin.curl
Загрузить профиль
sudo apparmor_parser -r /etc/apparmor.d/usr.bin.curl
Включить режим enforcing
sudo aa-enforce /etc/apparmor.d/usr.bin.curl
Теперь команда работает в изолированном профиле.
Итог: даже если вредонос получил shell, он буквально «ходит по клетке» — минимальный damage, невозможность lateral movement и быстрый детект.
Если хочешь — напишу готовый шаблон AppArmor-профайла для конкретных утилит.
@linux_education
👍5
This media is not supported in your browser
VIEW IN TELEGRAM
✔️ Усиление ядра через sysctl
Продвинутый совет по Linux: включи контроль целостности системных конфигов через fs.protected_symlinks и fs.protected_hardlinks.
Эти параметры ядра блокируют атаки, использующие подмену симлинков и хардлинков в системных каталогах. Даже при локальном доступе злоумышленник не сможет подменить файлы или перенаправить операции системных служб.
# Включаем защиту симлинков
echo 1 | sudo tee /proc/sys/fs/protected_symlinks
# Включаем защиту хардлинков
echo 1 | sudo tee /proc/sys/fs/protected_hardlinks
# Делаем постоянным
sudo sh -c 'cat >> /etc/sysctl.d/99-hardening.conf
@linux_education
Продвинутый совет по Linux: включи контроль целостности системных конфигов через fs.protected_symlinks и fs.protected_hardlinks.
Эти параметры ядра блокируют атаки, использующие подмену симлинков и хардлинков в системных каталогах. Даже при локальном доступе злоумышленник не сможет подменить файлы или перенаправить операции системных служб.
# Включаем защиту симлинков
echo 1 | sudo tee /proc/sys/fs/protected_symlinks
# Включаем защиту хардлинков
echo 1 | sudo tee /proc/sys/fs/protected_hardlinks
# Делаем постоянным
sudo sh -c 'cat >> /etc/sysctl.d/99-hardening.conf
@linux_education
👍6
IP-сабнеттинг можно свести к одной простой шпаргалке
На картинке — таблица, которая помогает мгновенно понять:
- размер группы
- подходящую маску
- значение для каждого октета в CIDR
- как быстро вычислять подсети без калькулятора
Столбцы 128 64 32 16 8 4 2 1 — это двоичные веса восьми бит одного октета.
С их помощью можно за секунду определить любую маску сети (например, /20, /27, /29) и понять, как разбить адреса на подсети.
Если ты работаешь с сетями, DevOps или инфраструктурой — эта таблица реально заменяет любые длинные объяснения CIDR и subnet mask.
Минимальная, понятная и рабочая шпаргалка — больше и не нужно.
@linux_education
На картинке — таблица, которая помогает мгновенно понять:
- размер группы
- подходящую маску
- значение для каждого октета в CIDR
- как быстро вычислять подсети без калькулятора
Столбцы 128 64 32 16 8 4 2 1 — это двоичные веса восьми бит одного октета.
С их помощью можно за секунду определить любую маску сети (например, /20, /27, /29) и понять, как разбить адреса на подсети.
Если ты работаешь с сетями, DevOps или инфраструктурой — эта таблица реально заменяет любые длинные объяснения CIDR и subnet mask.
Минимальная, понятная и рабочая шпаргалка — больше и не нужно.
@linux_education
🔥2❤1
🔥 Linux-совет: ищи по **процессам**, а не по файлам
В Linux можно использовать grep для поиска прямо по аргументам запущенных процессов — это помогает быстро понять, какой сервис работает, какой конфиг загружен или какой порт слушается.
ps aux | grep --color=auto pattern
Примеры:
Найти процессы Nginx
ps aux | grep nginx
Проверить, какой конфиг использует Python-приложение
ps aux | grep config.yaml
Узнать, какой процесс слушает порт
ps aux | grep 8080
Хитрый трюк: добавь пробел перед шаблоном, чтобы не ловить в вывод сам grep.
ps aux | grep " nginx"
@linux_education
В Linux можно использовать grep для поиска прямо по аргументам запущенных процессов — это помогает быстро понять, какой сервис работает, какой конфиг загружен или какой порт слушается.
ps aux | grep --color=auto pattern
Примеры:
Найти процессы Nginx
ps aux | grep nginx
Проверить, какой конфиг использует Python-приложение
ps aux | grep config.yaml
Узнать, какой процесс слушает порт
ps aux | grep 8080
Хитрый трюк: добавь пробел перед шаблоном, чтобы не ловить в вывод сам grep.
ps aux | grep " nginx"
@linux_education
👍5🤩1
This media is not supported in your browser
VIEW IN TELEGRAM
Быстрый Linux совет 🐧💡
Если нужно найти все файлы, которые содержат определённую строку, используй:
grep -rl string .
• -r выполняет рекурсивный поиск
• -l выводит только список файлов, где найдено совпадение
Изучай Linux с удовольствием 😎
@linux_education
Если нужно найти все файлы, которые содержат определённую строку, используй:
grep -rl string .
• -r выполняет рекурсивный поиск
• -l выводит только список файлов, где найдено совпадение
Изучай Linux с удовольствием 😎
@linux_education
👍6