NetworkAdmin.ru – Telegram
NetworkAdmin.ru
4.75K subscribers
226 photos
25 videos
2 files
499 links
Авторский блог про сетевое и системное администрирование.

Сайт: networkadmin.ru
Реклама: @dad_admin
Биржа: https://telega.in/c/networkadminru
Download Telegram
Успех гарантирован

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
😁29👍6🤡41👎1
⛔️ Ограничиваем ресурсы в Linux

Control Groups (или просто cgroups) - это фича ядра Linux, позволяющая ограничивать ресурсы, выделенные для процессов: CPU, память, диск, сеть и т.д.

⭐️ Пример: вы хотите, чтобы процесс stress не съедал всю память и CPU:


# Создаём cgroup
sudo cgcreate -g memory,cpu:/limitgroup

# Ограничим память до 500MB
sudo cgset -r memory.limit_in_bytes=$((500*1024*1024)) limitgroup

# Ограничим CPU (50% одного ядра)
sudo cgset -r cpu.cfs_quota_us=50000 limitgroup
sudo cgset -r cpu.cfs_period_us=100000 limitgroup

# Запускаем процесс внутри cgroup
sudo cgexec -g memory,cpu:/limitgroup stress --vm 1 --vm-bytes 700M --cpu 1


Процесс превысит лимит - будет убит OOM-килером.
Все параметры и статистику можно смотреть в /sys/fs/cgroup/.

#linux #cgroups

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
👀 Диагностика сетевых проблем с mtr и ss

🌟 mtr (My Traceroute) - сочетает ping и traceroute, выводит маршрут и потери пакетов до цели. Очень наглядно показывает, где в пути начинается деградация.

▪️ Пример:


mtr -rw -c 50 8.8.8.8


Покажет 50 запросов, каждый hop, потери (%) и задержку (ms).
Если видите 30–50% потерь на каком-то промежуточном IP - скорее всего, это и есть проблемный участок.

🌟 ss (socket statistics) - замена netstat. Помогает найти открытые порты, "зависшие" соединения и выяснить, какой процесс что слушает.

▪️ Примеры:

1️⃣ Просмотр всех TCP/UDP портов с PID:


ss -tulpn


2️⃣ Кто держит порт 443:


ss -ltnp | grep ':443'


3️⃣ Зависшие соединения в состоянии CLOSE-WAIT:


ss -tan state close-wait


⭐️ Сценарий диагностики:

1. Сначала mtr до внешнего хоста - проверка трассировки и потерь.
2. Потом ss - смотрим, что на машине: может, переполнен backlog, слушающий порт не отвечает или слишком много соединений.


#mtr #ss #debug

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍132
💬 Зачем столько каталогов с бинарниками в Unix

Вы когда-нибудь задумывались, почему в Unix-подобных системах столько директорий для исполняемых файлов? Почему mount в /bin, а htop в /usr/bin, а свои скрипты многие кладут в /usr/local/bin?

⭐️ Быстрый разбор:

/bin - базовые утилиты, которые нужны системе для загрузки и восстановления (например, cp, ls, mount).

/sbin - то же, что /bin, но для системного администрирования (fsck, reboot, iptables).

/usr/bin - всё остальное: утилиты для обычной работы пользователей (vim, git, curl).

/usr/sbin - админ-инструменты, не нужные на этапе загрузки (apache2, sshd, postfix).

/usr/local/bin и /usr/local/sbin - то, что вы ставите вручную, не через пакетный менеджер. Сюда удобно кидать своё ПО и скрипты, чтобы не мешать системным файлам.


📜 Интересный факт: всё это уходит корнями в 70-е. Тогда у разработчиков Unix не хватало места на одном диске, и они добавили второй, назвав его /usr. На него перенесли часть системы, включая bin и sbin. Так и появилась современная иерархия.

🌟 Сейчас в большинстве дистрибутивов /bin и /sbin - это просто символические ссылки на /usr/bin и /usr/sbin. Например, в Debian 11 и Fedora всё давно живёт в /usr.

Иерархия стала анахронизмом, но сохраняется ради совместимости. Логичнее было бы всё централизовать, а смысловое разделение оставить только между системным (/usr) и пользовательским (/usr/local) ПО.

⚡️ Совет: пользуйтесь /usr/local/bin для собственных скриптов и утилит - это хорошая практика.

#linux #unix

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍213
🔍 Проверка контрольной суммы ISO-образа Windows: защита от подделок

Скачивание ISO-образов Windows с неофициальных источников может привести к установке модифицированных версий с вредоносным ПО. Для обеспечения безопасности рекомендуется проверять контрольные суммы файлов.

🏃 Проверка с помощью PowerShell. В PowerShell можно использовать командлет Get-FileHash для вычисления хеш-суммы файла:


Get-FileHash "C:\Path\to\your\file.iso" -Algorithm SHA256


По умолчанию используется алгоритм SHA256, но можно указать другие: SHA1, SHA384, SHA512, MD5.

⭐️ Проверка с помощью certutil. Также можно использовать встроенную утилиту certutil:


certutil -hashfile "C:\Path\to\your\file.iso" SHA256


📁 Сравнение с оригинальными хешами. Полученные хеш-суммы следует сравнить с официальными:

1. На сайте Visual Studio Downloads (требуется учетная запись Microsoft).
2. На ресурсе RG-Adguard, где можно искать по хешу.

🔎 Автоматическая проверка соответствия. Для автоматизации проверки можно использовать следующий скрипт в PowerShell:


$expectedHash = "c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d"
(Get-FileHash "C:\Path\to\your\file.iso" -Algorithm SHA256).Hash -eq $expectedHash


Если результат True, файл подлинный; если False - файл может быть поврежден или подделан.

#windows #security

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92
💥 Контейнеризация с Podman: альтернатива Docker без демона

Если напрягает громоздкость Docker и хотите более гибкий инструмент - стоит обратить внимание на Podman. Это альтернатива Docker, которая полностью совместима с его CLI, но не требует запуска отдельного демона. Да, так и есть - никаких dockerd, sudo systemctl start docker и прочего.

Podman - это инструмент для управления контейнерами и образами, разработанный Red Hat. Он использует стандарт OCI (Open Container Initiative), а значит, большинство Docker-образов и команд будут работать "из коробки".

🌟 Ключевые особенности:

- Без демона: каждый контейнер запускается как обычный процесс, что упрощает отладку и снижает риски.
- Rootless режим: контейнеры можно запускать от обычного пользователя, без sudo и потенциальных угроз для всей системы.
- Совместимость с Docker CLI: команды podman run, podman build, podman pull и даже alias docker=podman - работают почти идентично.
- Интеграция с systemd: можно легко генерировать systemd-юниты из контейнеров (podman generate systemd).


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


# Установка на Ubuntu
sudo apt install podman

# Запуск контейнера nginx
podman run -d -p 8080:80 nginx

# Список контейнеров
podman ps

# Просмотр логов
podman logs <container-id>

# Остановка и удаление
podman stop <id> && podman rm <id>


▪️ А что с Pod?

В отличие от Docker, Podman реализует концепцию Pods (как в Kubernetes), где можно запускать сразу несколько контейнеров с общей сетью и IPC. Это отличный способ протестировать Kubernetes-архитектуру локально без сложных инструментов.


podman pod create --name mypod -p 8080:80
podman run -dt --pod=mypod nginx


Когда Podman - лучший выбор?

- Вам нужен rootless контейнерный запуск для большей безопасности.
- Вы хотите обойтись без демона и уменьшить нагрузку на систему.
- Вы планируете использовать systemd для управления контейнерами.
- Вы работаете в серверной среде, где минимализм важнее.


#podman

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62🤔2🔥1
Когда пришел просить отпуск

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
13😁5👍4
🌀 Решение для зависшей виртуальной машины в ESXi

Иногда в работе с VMWare ESXi можно столкнуться с ситуацией, когда виртуальная машина зависает и не реагирует ни на выключение, ни на перезагрузку через vSphere Web Client. Но это все ещё не повод перезагружать весь хост целиком

💜 Решение: остановка зависшей ВМ через консоль ESXi

1️⃣ Подключаемся к ESXi через SSH или открываем локальную консоль.

2️⃣ Смотрим список всех активных ВМ:


esxcli vm process list


3️⃣ Находим зависшую машину по имени и запоминаем её WorldID.

4️⃣ Пробуем завершить ВМ мягко (предпочтительный способ):


esxcli vm process kill --type=soft -w 12345678


Если не помогает, можно применить более жёсткие методы:

--type=hard - принудительное завершение, аналог kill -9
--type=force - экстренное завершение, применяется в крайнем случае

▪️ Альтернатива: esxtop

Можно использовать и утилиту esxtop:


esxtop


Нажимаем V, чтобы отобразить список процессов виртуальных машин. Ищем нужную ВМ и при необходимости завершаем процесс.

#VMware #ESXi

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍124👎1
⛔️ lsof - больше, чем просто список открытых файлов

Утилиту lsof (list open files) чаще всего используют для просмотра открытых файлов в Linux - и на этом, как правило, всё. Но возможности этой команды куда шире. Давайте разберёмся.

🔎 Основная задача: поиск открытых, но удалённых файлов

Это частый кейс: удалили лог-файл (/var/log/nginx/access.log), не перезапустили сервис - и место продолжает быть занятым.


lsof | grep '(deleted)'
# или так, короче:
lsof +L1


💎 Полезные команды по категориям

📍 Открытые файлы в каталоге:


lsof +D /var/log


📍 Открытые файлы от пользователя:


lsof -u user
# Посчитать, сколько файлов открыто:
lsof -u user | wc -l
# Исключить пользователя:
lsof -u^user | wc -l


📍 Завершить все процессы пользователя, открывшие файлы:


kill -9 $(lsof -t -u user)


📍 Файлы, открытые конкретным PID:


lsof -p 12345


💩 Сетевой режим - неочевидный, но мощный

📍 Список всех сетевых соединений (TCP и UDP):


lsof -ni


📍 Кто слушает порт 80:


lsof -ni TCP:80


📍 TCP соединения к конкретному IP:


lsof -ni TCP@192.168.1.10


📍 Сетевые соединения конкретного пользователя:


lsof -ai -u nginx


📍 UDP соединения:


lsof -iUDP


lsof - это инструмент не только для отладки “куда делось место”, но и для быстрого анализа сетевых соединений, отлова "висячих" файлов и поиска активных пользователей.

#linux #lsof

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍163
Откуда Windows «знает», что файл из интернета?

Когда вы скачиваете файл из браузера, а потом открываете его свойства, Windows может предупредить: «Файл получен с другого компьютера и может быть небезопасным». Это происходит не случайно.

Как Windows узнаёт источник?

Файл, скачанный на NTFS-диск, получает специальную метку в альтернативном потоке данных (Alternate Data Stream, ADS) с именем Zone.Identifier. Эта метка добавляется браузером автоматически и никак не зависит от расширения — она будет даже у mp3, .txt или .jpg.


▪️ Посмотреть содержимое метки:


Get-Content -Path ".\hard_rock.mp3" -Stream Zone.Identifier


Или в Блокноте:


notepad.exe hard_rock.mp3:Zone.Identifier


▪️ Пример содержимого:


[ZoneTransfer]
ZoneId=3
ReferrerUrl=https://ya.ru
HostUrl=https://ya.ru/file.mp3


🌟 Что значит ZoneId:

0 - Мой компьютер
1 - Локальная интрасеть
2 - Доверенные сайты
3 - Интернет (по умолчанию для всего, что скачано)
4 - Ограниченные сайты


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

▪️ Как убрать предупреждение:

1. Через свойства файла → Разблокировать

2. Через PowerShell:


Unblock-File .\hard_rock.mp3


#windows #security

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🔥7🤔31
Ты это, заходи если что

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
😁31🔥3
🌐 Настройка NGINX как TCP/UDP Reverse Proxy

Когда речь заходит о NGINX, большинство сразу думают о HTTP-прокси. Но на самом деле он умеет работать и с TCP/UDP, начиная с версии 1.9.0 (с поддержкой модуля stream). Это отличный способ пробросить нестандартные протоколы - от MySQL до DNS.

▪️ Пример: TCP Reverse Proxy (например, для проброса SSH)
Включаем модуль stream и прописываем в конфигурации:


# /etc/nginx/nginx.conf
stream {
upstream ssh_backend {
server 192.168.1.100:22;
}

server {
listen 2222;
proxy_pass ssh_backend;
}
}


Теперь при подключении к NGINX по порту 2222, трафик будет перенаправляться на внутренний сервер по SSH-порту 22.

▪️ Пример: UDP Reverse Proxy (например, DNS)


stream {
upstream dns_backend {
server 192.168.1.53:53;
}

server {
listen 53 udp;
proxy_pass dns_backend;
}
}


Важно: UDP-прокси работает не со всеми типами UDP-протоколов - требуется тестирование.

▪️ Возможности stream-модуля:

📍 Load-balancing для TCP/UDP (с least_conn, round-robin)
📍 Проксирование SSL, SSH, MySQL, RDP и других нестандартных протоколов
📍 Поддержка access log, limit_conn, geo-блокировки
📍 Возможность защиты backend-ов без дополнительного софта


▪️ Полезные опции:


proxy_timeout 10s;
proxy_connect_timeout 5s;
proxy_protocol on;


proxy_protocol - если используется PROXY protocol от клиента (например, HAProxy).
timeout - не даём соединениям висеть вечно.

#nginx #reverseproxy

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥162😱1
Как понять, сколько памяти действительно использует процесс в Linux?

Многие, особенно после Windows, теряются при анализе памяти в Linux. Диспетчер задач в Win наглядно показывает, сколько ОЗУ занято, сколько свободно - всё просто. В Linux же понимание, что и сколько потребляет, требует большего погружения.

Разберемся на примере анализа потребления памяти процессом, например, nginx или php-fpm.

1️⃣ Находим PID процесса


ps ax | grep nginx


Допустим, PID мастер-процесса - 1947.

2️⃣ Используем pmap. Эта утилита показывает, какие участки памяти использует процесс и сколько они занимают.

📍 Виртуальная память (VIRT/VSZ):


pmap 1947 -p


Внизу увидим итоговое значение виртуальной памяти - все, включая разделяемые библиотеки и даже то, что может быть в swap. Для многопроцессных сервисов (как nginx) эта цифра будет одинаковой у всех дочерних процессов. Поэтому она мало информативна в отрыве от контекста.

📍 Резидентная память (RES/RSS):


pmap 1947 -x


Это объем оперативной памяти, реально занятой процессом (без учета swap). Но и тут не всё идеально - при наличии форков каждый из них покажет одинаковую RSS, хотя они могут разделять память.

📍 Приватная память:


pmap 1947 -d


А вот здесь интересно: writeable/private показывает именно ту часть памяти, которую процесс использует исключительно сам. Без общих библиотек и форков. Это значение важно при планировании числа одновременно работающих процессов (например, php-fpm).

Как применять эти данные?

Если планируешь запустить 50 PHP-процессов, и каждый из них использует ~30 МБ приватной памяти, нужно минимум 1.5 ГБ ОЗУ только под них. А ещё есть сама ОС, веб-сервер, БД и кэш - нужно считать с запасом, иначе словишь oom-killer.

Где берёт данные pmap?

Из /proc/<PID>/smaps, но pmap красиво их парсит. Хочешь больше деталей - загляни туда напрямую.


cat /proc/1947/smaps


Анализ потребления памяти в Linux - это не только top или htop. Используй pmap, чтобы понять реальное потребление и не попасть в просак при настройке сервисов.

#linux #memory

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍152
This media is not supported in your browser
VIEW IN TELEGRAM
Сисадмин, который не умеет использовать командную строку bash – так себе специалист.

Если посетить несколько собеседований уровня от миддл, то можно убедиться, что вопросы про опыт работы в консоли появляются довольно часто.

Сходу научиться всем командам bash нереально – их очень много.

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

Подпишись, освоишь bash на изи 👍
🫡8👍4🤡4🔥1😱1💩1
Удалённое управление принтерами через PowerShell

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

Разберем пример пошаговой настройки сетевого принтера:

1️⃣ Подключение к удалённому ПК:


Enter-PSSession -ComputerName Comp1


2️⃣ Установка драйвера в хранилище Windows:


pnputil.exe -i -a "\\server1\drivers\KYOCERA\OEMsetup.inf"


pnputil добавляет драйвер в систему, используя .inf файл. Путь может быть сетевым.

3️⃣ Установка драйвера печати:


Add-PrinterDriver -Name "Kyocera Classic Universaldriver PCL6"


4️⃣ Создание TCP/IP порта для принтера:


Add-PrinterPort -Name "IP_192.168.10.26" -PrinterHostAddress "192.168.10.26"


5️⃣ Добавление самого принтера:


Add-Printer -Name "Ricoh IM 2702" `
-DriverName "Kyocera Classic Universaldriver PCL6" `
-PortName "IP_192.168.10.26" -Verbose


Все это можно выполнить вручную или автоматизировать через сценарии - особенно удобно при массовом развёртывании принтеров или переездах.

#windows #printer

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25
Автоматическое монтирование дисков в Linux через systemd

Многие по привычке используют fstab для автоподключения дисков в линукс. Но systemd предлагает более гибкий и надёжный механизм - монтирование через unit-файлы.

Это особенно полезно:

📍 в средах с динамически подключаемыми дисками
📍 при работе с нестабильными устройствами (например, сетевыми томами)
📍 для точного контроля зависимостей и порядка монтирования

▪️ Пример: монтируем диск /dev/sdb1 в /mnt/data

1️⃣ Создаём unit-файл для монтирования:


sudo systemctl edit --force --full mnt-data.mount


Пример содержимого:


[Unit]
Denoscription=Монтирование диска в /mnt/data
After=network.target

[Mount]
What=/dev/sdb1
Where=/mnt/data
Type=ext4
Options=defaults

[Install]
WantedBy=multi-user.target


Обратите внимание: имя unit-файла mnt-data.mount формируется по пути монтирования: /mnt/data → mnt-data.mount

2️⃣ Активируем и проверяем


sudo systemctl daemon-reexec
sudo systemctl enable mnt-data.mount
sudo systemctl start mnt-data.mount


Проверим статус:


systemctl status mnt-data.mount


⭐️ Преимущества systemd-монтажа:

📍 Учитываются зависимости (можно настроить Requires= и After=)
📍 Возможность рестартов и таймаутов
📍 Удобство в контейнерах и виртуальных средах
📍 Логирование и отладка через journalctl


🌟 Важно: если диск может не быть доступен при загрузке, рассмотрите опции nofail или отложенное монтирование через automount.

#linux #systemd

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍141
CI/CD на минималках: как быстро развернуть GitLab Runner на своём сервере

Если вы используете GitLab и хотите автоматизировать сборки, тесты или деплой - вам нужен GitLab Runner. Это агент, который обрабатывает пайплайны и запускает описанные в .gitlab-ci.yml задачи.

🔎 Что нужно?

📍 Сервер (виртуалка или физика) с Linux
📍 GitLab проект
📍 Пара минут времени

⚙️ Установка GitLab Runner. Официальная установка для Debian/Ubuntu:


curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/noscript.deb.sh | sudo bash
sudo apt install gitlab-runner


▪️ Регистрация Runner'а

Берём токен в GitLab:
Settings → CI/CD → Runners → Expand → Registration token

И запускаем регистрацию:


sudo gitlab-runner register


▪️ Ответы на вопросы:

URL GitLab: https://gitlab.com или адрес вашего GitLab
Token: тот, что скопировали
Описание: любое имя
Теги: по желанию
Executor: shell, docker, virtualbox и др. (начать можно с shell)


▪️ Пример .gitlab-ci.yml для начала:


stages:
- test

test_job:
stage: test
noscript:
- echo "Тестируем Runner"
- uname -a


Добавьте файл в корень репозитория, закоммитьте и запушьте. После пуша GitLab запустит пайплайн, и ваш Runner выполнит команду.

Зачем это нужно?

📍 Автоматизация тестов, сборки, деплоя
📍 Локальный контроль - runner работает на вашем железе
📍 Безопасность - код не уходит в сторонние облака
📍 Можно изолировать окружения (через Docker executor)


#gitlab #linux

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Не забывайте про защиту от несанкционированного доступа, кошачьего в том числе 😎

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👌14😁7🔥1🙈1
🔒 Безопасность Python-скриптов: как защитить код и данные

Python - язык простой и удобный, но в плане безопасности исходников у него есть слабое место: скрипты легко читаются, модифицируются и анализируются. Если ты разрабатываешь утилиту, обрабатываешь конфиденциальные данные или просто хочешь защититься от «любопытных», стоит продумать меры защиты. Разберём основные подходы:

1️⃣ Компиляция в байткод

Python автоматически компилирует .py в .pyc, но и их можно дизассемблировать. Более надёжный способ - сборка в .pyd/.so (динамическую библиотеку):


pip install cython
cythonize -i mynoscript.py


На выходе - скомпилированный бинарник. Исходный код спрятан, но не полностью защищён от реверса.

2️⃣ Шифрование и упаковка. Можно шифровать скрипты и расшифровывать их только в момент выполнения:

Использовать PyArmor, который шифрует байткод:


pip install pyarmor
pyarmor obfuscate mynoscript.py


Использовать Nuitka или PyInstaller - обфускация + упаковка в исполняемый файл:


pyinstaller --onefile mynoscript.py


3️⃣ Изоляция через виртуальное окружение. Размещай код в venv, где минимум привилегий и стороннего ПО.

Для чувствительных задач - запускай скрипты через Docker, изолируя переменные окружения и доступ к файловой системе.

4️⃣ Безопасное хранение секретов. Не храни API-ключи и пароли в коде:

📍 Используй .env файл + библиотеку python-dotenv
📍 Храни секреты в HashiCorp Vault, AWS SSM или аналогах
📍 Шифруй конфиги с GPG, если нужно хранить локально


Полной защиты от реверса не будет - Python не компилируемый в машинный код язык. Но затруднить анализ, защитить данные и повысить безопасность вполне реально.

#python #security

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍122🔥1
⭐️ Полезные трюки с grep и регулярками в unix-консоли

Сегодня расскажу про несколько простых приемов, которые помогут вам эффективнее работать с текстом и конфигами в терминале. Речь пойдёт о символах ^ и $ - они обозначают начало и конец строки в регулярных выражениях.

1️⃣ Символ ^ - начало строки

Очень удобно, когда нужно исключить строки, начинающиеся с комментариев (#), но оставить те, где # идёт в середине строки:


grep -E -v '^#' nginx.conf


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

1. Наведите курсор после ^
2. Нажмите Ctrl + V, затем Tab

Получится поиск по строкам с табом и # в начале:


grep -E -v '^ #' nginx.conf


(Скопированная команда не сработает — таб символ нужно вставить вручную в консоли!)

Также ^ помогает искать по началу имени файла:


ls | grep ^error


2️⃣ Символ $ - конец строки

Допустим, в директории есть файлы *.png и *.png.webp. Если сделать:


ls | grep .png


Вы получите оба варианта. А чтобы отфильтровать только те, что заканчиваются на .png:


ls | grep .png$


Можно объединить два условия:


ls | grep ^error | grep .png$


3️⃣ Комбинация ^$ - пустая строка

Очень удобно, если хотите вычистить конфиг от пустых строк и комментариев:


grep -E -v '^#|^$' nginx.conf


Эти трюки работают с любой текстовой утилитой (grep, sed, awk) и экономят кучу времени при разборе логов, конфигов и вывода в терминале.

#linux #grep

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Оптимизируем работу в Linux 🚀

Linux — сердце цифровой инфраструктуры 21 века. Эта ОС лежит в основе облаков, дата-центров и серверов. А для ИТ-специалистов Linux — стандарт де-факто: мощный инструмент для автоматизации, кибербезопасности и администрирования.

Совместно с каналом NetworkAdmin.ru подготовили дельные лайфхаки для облегчения и ускорения работы с Linux — читайте в карточках! На канале есть много другой полезной информации для специалистов в области сетевого администрирования, посмотреть можете здесь.

#BellintegratorTeam #советыBell
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍2🔥2🤔1😡1