juniorlinux | Unsorted

Telegram-канал juniorlinux - 🐧 Linux Junior. Программирование под Linux.

3309

Канал для программистов работающих с Linux. Почти все Python девелоперы с нами ну и другие тоже подтянутся. По рекламе: @jannytg @anothertechrock

Subscribe to a channel

🐧 Linux Junior. Программирование под Linux.

🦇 Утилита bat

bat — это современная замена классической команды cat, которая выводит содержимое файлов, но делает это намного удобнее и красивее.

🦇 Достоинства bat:

✔️ Выводит содержимое файлов с подсветкой синтаксиса (как в редакторах кода)
✔️ Показывает нумерацию строк
✔️ Умеет подсвечивать различия при сравнении файлов
✔️ Поддерживает постраничный просмотр (через less)
✔️ Может заменять cat в привычных командах

🦇 Установка:

sudo apt install bat   # Ubuntu / Debian
sudo dnf install bat # Fedora
sudo pacman -S bat # Arch Linux

🦇 Практическая польза

bat часто используют:

🔴 Для чтения конфигов и логов с подсветкой,
🔴 В скриптах и DevOps-инструментах (как улучшенный cat),
🔴 Для ревью кода прямо в терминале,
🔴 Как быструю замену IDE, если нужно просто глянуть файл красиво.

📎 Репозиторий с примерами, скриншотами и инструкциями - https://github.com/sharkdp/bat

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

Как объединить вывод нескольких команд в один файл и при этом видеть результат на экране?

Ответ через час.

#вопросы

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

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

Первый канал по Docker. Поискав в телеграме каналы по docker и не найдя ничего, я решил обьединить контент в одном месте.

По содержанию в канале:
- вопросы с собеседований
- команды докера
- книги
- тесты для проверки ваших знаний
- обучающие видео
- чат для обсуждения

Подписывайтесь, комментируйте и предлагайте свой контент в нашем новом сообществе: @justdocker

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

Чтобы получить топ-10 команд, которые вы вводите чаще всего, посчитайте частоту команд в истории. Это интересно и полезно для самоанализа.

history | awk '{print $2}' | sort | uniq -c | sort -nr | head

#вопросы

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

🔥 Чем отличается su от sudo

Обе команды связаны с повышением прав, но делают это по-разному.

📌 Основная идея

su — substitute user ➡️ «заменить пользователя»
sudo — substitute user and do ➡️ «выполнить как другой пользователь»

⚙️ Как работает su

su переключает вас на другого пользователя внутри текущей сессии. Для этого нужно знать пароль целевой учётки, а не своей.

user@dev:/$ su john
Пароль: ****
john@dev:/$ whoami
john


Вы стали Джоном и работаете от его имени.
su без дефиса, как в этом примере, просто меняет пользователя, но оставляет окружение старого. О su - мы еще поговорим.

⚙️ Как работает sudo

sudo запускает одну команду от имени другого пользователя (по умолчанию — root). При этом спрашивается ваш пароль, а не пароль того, под кем выполняется команда.
user@dev:/$ sudo -u john whoami
john


Чтобы это работало, у пользователя user должны быть разрешения в /etc/sudoers:
user ALL=(ALL:ALL) ALL


Редактируется через visudo:
sudo visudo


Проверить конфигурацию можно так:
sudo visudo -c


💡 visudo защищает от ошибок: если синтаксис неправильный, файл не сохранится.

⚙️ su с дефисом

Иногда можно заметить команду su - john.
Зачем дефис?

Он очищает окружение и запускает оболочку, как будто вы вошли в систему под новым пользователем.

Посмотрим на примере:
ssh user@pc
export a="test"
su john
echo $a
# test


Переменная $a сохранилась.
А теперь с дефисом:
su - john
echo $a
# ничего не выводит


Переменные исчезли — новая, "чистая" среда.

📎 Коротко:

su — просто смена пользователя, старое окружение остаётся;
su - — полная имитация входа в систему под новым пользователем.

⚙️ Аналоги у sudo

sudo тоже может запустить shell с разным уровнем "чистоты" окружения:

sudo -s   # shell с правами root, окружение текущее
sudo -i # shell как при входе под root (загружается /root/.profile и т.п.)


Если в /root/.profile прописать переменную, то она появится только при sudo -i.

✔️ sudo -i ≈ sudo su -
Но писать sudo su - — дурной тон: запускается лишний процесс, команда громоздкая и вообще не нужная.

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

Для замены, замещения или удаления символов из стандартного ввода используется консольная команда tr. С ее помощью можно удалить нечитаемые символы:

tr -cd '\11\12\15[:print:]' < bad.txt > clean.txt


Опции:
🔴-c — инвертирует набор, т.е. все символы, не входящие в указанный диапазон, будут выбраны
🔴-d — удаляет выбранные символы (вместо замены)

Диапазон символов для выборки:
🔴 \11, \12, \15 — это табуляция (\t), перевод строки (\n) и возврат каретки (\r), записанные в восьмеричном (octal) виде. Каждое число — это ASCII-код символа.
🔴 [:print:] — все видимые символы.

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

#вопросы

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

🔥 Расширение фигурных скобок (brace expansion)

Фигурные скобки {} в Bash позволяют разворачивать выражения в последовательность аргументов.

Простой пример:

echo {1..10}
# 1 2 3 4 5 6 7 8 9 10


Можно в обратную сторону:
echo {10..1}
# 10 9 8 7 6 5 4 3 2 1


⚙️ Шаг в диапазоне

Третий параметр задаёт шаг:
echo {1..501..100}
# 1 101 201 301 401 501


Можно и в обратную сторону:
echo {501..1..100}
# 501 401 301 201 101 1


⚙️ Последовательности букв

В отличие от seq, фигурные скобки умеют работать с буквами:
echo {A..P}
# A B C D E F G H I J K L M N O P


Шаг тоже поддерживается:
echo {A..P..2}
# A C E G I K M O


⚙️ Перечисления и практические приёмы

Создать сразу несколько директорий:
mkdir ~/Sources/{test1,test2,test3}


Сравнить оригинал и патч одной командой:
diff {orig,patched}/path/to/prog.c


Сделать бэкап файла:
cp -p file.txt{,.bak}
# создаст file.txt и file.txt.bak

💡 Если перед запятой ничего нет, Bash просто подставляет существующее значение.

⚠️ Важно: пробелы внутри {} ломают расширение!
echo file{1.. 2}.txt  # не сработает


⚙️ Форматирование вывода

Можно убрать пробелы из вывода, передав вывод в tr:
echo {A..P..2} | tr -d " "
# ACEGIKMO


Создадим псевдоним для получения n-й буквы алфавита:
alias nth="echo {A..Z} | tr -d ' ' | cut -c"
nth 10
# J


⚙️ {} vs []

Квадратные скобки [] — это сопоставление с шаблоном имён файлов, а фигурные {} — просто генерация последовательности.

ls file[1-9].txt
# отберёт существующие файлы


ls file{1..9}.txt
# попытается вывести все файлы последовательности, даже если их нет


⚙️ Группировка и вложенность

Комбинация наборов:
touch {a,b,c}.{hpp,cpp}
# создаст a.cpp a.hpp b.cpp b.hpp c.cpp c.hpp


Вложенные расширения:
mkdir -p {source,help{/pages,/yelp,/images}}


Структура получится такая:
.
├── help
│ ├── images
│ ├── pages
│ └── yelp
└── source

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

Приведенная команда cat дает такой вывод ⬆️

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

Как найти самые часто встречающиеся IP-адреса в логах?

Ответ через час.

#вопросы

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

👩‍💻 Команда shred

Обычно для удаления файлов в Linux используется команда rm. Но файлы, удаленные с помощью этой команды, не удаляются окончательно с диска. Их содержимое остается на диске до тех пор, пока занятое ими пространство не будет перезаписано другими данными. Поэтому информацию возможно восстановить.

Но что, если нам нужно удалить файлы так, чтобы их никто не восстановил? Для этого существует команда shred.

Она перезаписывает содержимое файла случайными данными несколько раз, а затем по желанию удаляет его. Это делает восстановление практически невозможным.

⚙️ Команда:

shred [опции] файл


Опции:
-n — перезаписать файл n раз
-z — делает финальную перезапись нулями, чтобы скрыть сам факт использования shred.
-u, --remove — после перезаписи удаляет файл (по умолчанию файл не удаляется).
-v — выводит прогресс в терминал
-f — принудительно снимает защиту от записи (если файл read-only).

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

1️⃣ Перезаписать файл и оставить его на месте:
shred secret.txt


2️⃣ Перезаписать файл 5 раз и удалить его:
shred -n 5 -u secret.txt


3️⃣ Перезаписать файл 1 раз, затем заполнить нулями и удалить:

shred -n 1 -z -u secret.txt

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

💻 Что означает 2>&1?

Это про стандартные потоки вывода. Они имеют файловые дескрипторы:

stdout — 1 (общий поток вывода)
stderr — 2 (поток с ошибками)

Получается (2>&1) = stderr > stdout — направляем поток с ошибками в стандартный поток вывода. Ошибки будут выводиться на экран в терминале.

🤔 Логичным было бы сделать конструкцию 2>1. Но увы, эта схема отработает другую логическую операцию. Поток с ошибками stderr будет писать все данные в файл, у которого название будет 1.

Для этого и требуется указать символ & (амперсанд) перед stdout. Это будет интерпретировано как файловый дескриптор, а не обычный файл.

🤔 А почему тогда не &2>&1 ?
Символ & интерпретируется как файловый дескриптор только в контексте перенаправления.

Операция command &2>&1 анализируется следующим образом. command & 2>&1 — команда command будет выполнятся в фоновом режиме. А затем начнет выполнятся команда 2 с перенаправлением на стандартный вывод stdout.

Есть альтернатива с оператором |&.

|& это сокращенный вариант от 2>&1 |

Пример:

script.sh |& tee -a /var/log/script.log


Все что script.sh выведет в потоки stdout и stderr, будет перенаправлено в файл script.log.

В официальной документации можно подробнее изучить эту штуку.

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

👩‍💻 Команда rsync

rsync - один из самых популярных инструментов командной строки для резервного копирования. Он позволяет осуществлять быструю инкрементную передачу и синхронизацию файлов.

✔️ Как сделать локальный бэкап:

rsync -av /source/directory/ /destination/directory/


✔️ Как сделать удаленный бэкап через ssh:

rsync -av -e ssh /source/directory/ user@remote_host:/destination/directory/


Rsync можно использовать для зеркалирования данных, инкрементного резервного копирования, копирования файлов между системами, а также в качестве замены команд scp, sftp и cp.

⚙️ Установка:

sudo apt install rsync


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

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

🎛Основные логи в Linux

Основные логи в Linux содержат информацию о различных событиях, происходящих в операционной системе, включая процесс загрузки, работу приложений, действия пользователей и сообщения ядра.

Эти логи, хранящиеся в специальных файлах, могут быть полезны для выявления и устранения проблем.

Основные категории логов в Linux включают: системные лог-файлы, лог-файлы событий, лог-файлы служб и лог-файлы приложений.

Многие из них располагаются в каталоге var/log.

Наиболее распространенными логами являются:

1️⃣ /var/log/boot.log — журнал загрузки системы (в нем хранится вся информация, связанная с этапами загрузки ОС).

2️⃣ /var/log/kern.log — журнал ядра (в нем хранятся сообщения и предупреждения, поступающие непосредственно из ядра Linux.

3️⃣ /var/log/syslog или /var/log/messages — журналы, в которых хранится информация об общей активности в системе (включая сообщения этапа загрузки).

4️⃣ /var/log/auth.log или /var/log/secure — журналы аутентификации и безопасности (в них хранятся записи обо всех попытках входа в систему, включая как успешные, так и неудачные).

5️⃣ /var/log/debug — журнал отладки (в нем хранится подробная отладочная информация системы и приложений).

6️⃣ /var/log/daemon.log — журнал демонов (содержит информацию о событиях, связанных с различными запущенными в системе демонами/службами).

7️⃣ /var/log/maillog или /var/log/mail.log — журналы почтовых серверов (в них хранится информация, относящаяся к почтовым серверам и архивированию электронных писем).

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

💡 Короткий совет по Linux

Если вы хотите очистить пустые каталоги, команда find может упростить эту работу:

$ find . -type d -empty -exec rmdir -v {} +


Параметр -type d выполняет поиск каталогов, -empty выбирает пустые каталоги, а -exec rmdir {} выполняет команду rmdir для их удаления.

Команда rmdir гарантирует, что каталог пуст перед его удалением.

В качестве альтернативы, для выполнения той же задачи можно использовать эту команду:

$ find . -type d -empty -delete

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

👩‍💻 Что такое командная оболочка (shell) в Linux?

Shell или командная оболочка представляет собой не только командный интерпретатор, обеспечивающий взаимодействие пользователя с ядром операционной системы, но и язык программирования, включающий операторы условного ветвления, циклы, переменные и другие конструкции.

При входе пользователя в систему или открытии терминала операционная система запускает командную оболочку.

Пользователь увидит приглашение оболочки, состоящее из имени пользователя, имени хоста, текущего пути и символа $ или #, отражающего его привилегии.

Вводимые пользователем команды бывают внутренними (встроенными в оболочку) и внешними (выполняемыми как отдельные программы).

⚡️При необходимости определить тип команды, пользователь может использовать команду type <имя_команды>.

В nix-системах существует два основных типа оболочек:

оболочки на основе Bourne shell
оболочки на основе C shell.

Типичными представителями оболочек типа Bourne shell являются:

- sh (Bourne shell)
- bash (Bourne Again shell)
- ksh (Korn shell)
- zsh (Z Shell)


К оболочкам типа C Shell относятся:

- csh (C shell)
- tcsh (TENEX/TOPS C shell)

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

Команда tee в Linux читает стандартный ввод и одновременно выводит его на экран и записывает в файл(ы), что позволяет просматривать вывод и сохранять его для последующего использования.

ls -lh | tee files.txt


Результат выведется в терминал и одновременно запишется в файл. По умолчанию tee затирает файл. Чтобы дописать в конец, нужно использовать опцию -a.

Команда tee имеет большой потенциал использования.

⚙️ Пример 1.

Если попытаться записать в системный файл так:

sudo echo "text" > /etc/config


— ничего не выйдет (перенаправление выполняется от имени обычного пользователя).

А вот так сработает:

echo "text" | sudo tee /etc/config

Потому что tee запускается с правами root и записывает корректно.

⚙️ Пример 2.

Можно записывать системные логи "на лету". Например, мониторить сеть и одновременно вести лог:

ping google.com | tee -a ping.log

Так можно просматривать пинг в реальном времени и получить лог-файл после остановки.

#вопросы

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

🔥 Копирование и вставка в Linux: не только Ctrl+C / Ctrl+V

В Linux работа с копированием устроена чуть глубже, чем просто привычные сочетания клавиш. В X11-среде (GNOME, Xfce, KDE и др.) есть два буфера обмена, и они ведут себя по-разному:

🔎 Clipboard — системный буфер. Заполняется при Ctrl+C, вставляется через Ctrl+V.

🔎 Primary selection — заполняется при выделении текста мышью. Вставляется средней кнопкой мыши (или одновременным нажатием левой и правой на тачпаде).

Буферы независимы: выделили текст — он уже доступен для вставки, но Ctrl+V вставит что-то другое.

✔️ Команда xclip

xclip — утилита, которая позволяет работать с буферами обмена прямо из терминала. Она умеет читать данные из stdin и записывать их в нужный буфер, а также доставать оттуда содержимое.

⚙️ Копирование из файла

xclip < notes.txt


Теперь содержимое notes.txt можно вставить средней кнопкой мыши.

⚙️ Копирование в системный буфер

xclip -selection clipboard < notes.txt


Теперь текст вставится по Ctrl+V — как обычно.

⚙️ Копирование вывода команды

ls | grep log | xclip -selection clipboard


Результат команды окажется в буфере обмена — удобно вставить путь или имя файла в другой терминал или чат.

⚙️ Вставка из буфера

xclip -selection clipboard -o


Выведет содержимое системного буфера в stdout. Можно использовать в конвейере:

xclip -selection clipboard -o | wc -w


✔️ Немного автоматизации

Создай алиасы, чтобы не набирать флаги каждый раз:

alias ccopy="xclip -sel c"
alias cpaste="xclip -sel c -o"


Теперь:

echo "important text" | ccopy
cpaste


— скопирует и вставит содержимое в системный буфер.

💡 Где это пригодится

Практическое применение xclip выходит далеко за рамки простого копирования текста. Вот несколько примеров, где он действительно экономит время и клики:

1️⃣ Работа с логами и длинными командами

grep "ERROR" /var/log/syslog | tail -n 5 | xclip -sel c


Вывели последние ошибки и сразу скопировали их — можно вставлять в чат или тикет.

2️⃣ Передача данных между терминалами

cat build.log | grep version | xclip -sel c


В другой вкладке:

cpaste


Так можно быстро перекидывать строки между сессиями (например, dev и prod).

3️⃣ Копирование путей или имён файлов

find . -type f -name "*.sh" | head -n 1 | xclip -sel c
vim $(cpaste)


Ни одной мышиной операции — путь к файлу скопирован и подставлен в команду.

4️⃣ Безопасное копирование токенов и ключей

grep "API_KEY" .env | cut -d= -f2 | xclip -sel c


Токен копируется в буфер, не отображаясь в терминале и не попадая в историю.

5️⃣ Быстрое копирование результата из скрипта

generate-password | xclip -sel c


Пароль уже в буфере — вставляй куда нужно без вывода на экран.

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

👩‍💻 Утилита symlinks

symlinks — это консольный инструмент в Linux, который помогает управлять символьными ссылками (symbolic links, или "ярлыками" в файловой системе). Она позволяет искать, проверять и исправлять ссылки в заданном каталоге.

На большинстве систем утилита ставится пакетом symlinks:

sudo apt install symlinks      # Ubuntu, Debian
sudo dnf install symlinks # Fedora
sudo pacman -S symlinks # Arch


⚙️ Синтаксис:

symlinks [опции] [каталог]


⚙️ Опции:
-c — заменить абсолютные / беспорядочные ссылки на относительные
-d — удалить битые ссылки
-o — предупреждать о ссылках между файловыми системами
-r — проверять рекурсивно подкаталоги
-s — сокращать длинные ссылки (отображаются в выводе только если не указан параметр -c)
-t — показывать, что будет сделано с помощью -c
-v — показывать подробный отчет (выводит все ссылки)

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

1️⃣ Найти все симлинки в каталоге /usr/local/bin:

symlinks -v /usr/local/bin


Команда выведет список ссылок и покажет, какие из них "good" — рабочие, а какие "dangling" — битые (ведут в несуществующий файл).

2️⃣ Проверить рекурсивно и удалить битые ссылки:

sudo symlinks -rd /opt/


3️⃣ Только проверить, не изменяя ничего:

symlinks -rv /home/user/projects


⚙️ Практический смысл:

🔎 Проверка целостности системы или проекта. После обновлений или чисток пакетов остаются "битые" ссылки — ведущие в никуда.
🔎 Подготовка окружения для деплоя или контейнера. При переносе проекта, создании Docker-образа или сборке пакета абсолютные пути могут сломаться (например, /home/user/... внутри контейнера не существует).
🔎 Чистка симлинков после ручной установки софта. Когда программы ставятся вручную, часто создаются симлинки в /usr/local/bin → /opt/.... После удаления директории /opt/app ссылки остаются.
🔎 Работа с большими файловыми архивами или бэкапами. При создании резервных копий с помощью rsync или копировании проекта на другой диск относительные ссылки часто "ломаются", потому что пути изменились.
🔎 Упрощение диагностики. Можно быстро увидеть, какие файлы — ссылки и куда они ведут. Это удобно, например, при разборе чужой системы или CI/CD окружения.

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

Как узнать, какие команды вы используете чаще всего?

Ответ через час.

#вопросы

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

👩‍💻 Команда yes

Команда yes в Linux — это простая утилита, которая бесконечно выводит строку (по умолчанию y) в стандартный вывод.

Эта команда часто применяется для автоматизации скриптов или тестирования.

⚙️ Синтаксис:

$ yes [строка]


⚙️ Примечания:

↘️ Если строка не указана — будет бесконечно выводиться y.
↘️ Если указать строку — будет бесконечно выводиться именно она.
↘️ Чтобы остановить вывод, нужно нажать Ctrl+C.
↘️ yes бесконечно генерирует вывод, поэтому почти всегда ее используют вместе с пайпами (|) или ограничителями (head).

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

1️⃣ Иногда программы запрашивают подтверждение (Do you want to continue? [y/n]). Ввод y можно автоматизировать. Здесь все запросы будут автоматически подтверждаться y:
yes | apt-get install package


2️⃣ Подтверждение с no. Здесь на все запросы ответ будет n:
yes n | command


3️⃣ Тестирование производительности:
yes можно использовать для загрузки процессора. Этот процесс будет сильно нагружать CPU, пока его не остановить (Ctrl+C):
yes > /dev/null


4️⃣ Быстрая генерация больших файлов. Эта команда создаст файл с 1000 одинаковыми строками:
yes "строка" | head -n 1000 > file.txt

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

Как очистить текст от нечитаемых символов, например, при копировании из PDF?

Ответ через час.

#вопросы

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

👩‍💻 Команда watch в Linux

Вам знакома ситуация, когда ждешь чего-то важного, будь то подключение пользователя или копирование файлов по FTP? Постоянно приходится вводить одну и ту же команду для проверки результата. А это порой бывает утомительно.

Для таких случаев и пригодится команда watch. Она используется для периодического запуска другой команды и отображения её вывода в терминале с обновлением через заданный интервал времени. Это удобно для "живого мониторинга" изменений в системе.

⚙️ Синтаксис:

watch [опции] команда


По умолчанию watch запускает команду каждые 2 секунды.

⚙️ Опции:
-n <сек> — задать интервал обновления в секундах (по умолчанию 2).
-d — подсвечивать изменения между обновлениями.
-t — убрать заголовок (без отображения времени и команды).
-g — завершить выполнение, когда вывод изменится.

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

1️⃣ Мониторинг свободного места на диске. Каждые 5 секунд обновляется информация о дисках:
watch -n 5 df -h


2️⃣ Наблюдение за процессами. Отслеживание процессов apache, обновление каждые 2 секунды:
watch -n 2 ps aux | grep apache


3️⃣ Подсветка изменений. При изменении значений в /proc/meminfo изменённые строки будут подсвечены:
watch -d cat /proc/meminfo


4️⃣ Отслеживание использования CPU конкретным процессом. Каждую секунду выводится загрузка CPU и памяти процессом firefox:
watch -n 1 "ps -C firefox -o %cpu,%mem,cmd"


5️⃣ Завершение при изменении. watch будет следить за состоянием файла и завершится, как только его атрибуты изменятся:
watch -g ls -l file.txt

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

Эта команда находит 10 наиболее часто встречающихся IP-адресов в файле access.log:

grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' access.log | sort | uniq -c | sort -nr | head

Покажет топ IP по количеству обращений. Незаменимо для анализа веб-серверов.

#вопросы

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

🔥 Что такое демоны (daemons) в Linux?

Демоны, или "daemons", в операционных системах работают в фоновом режиме и следят за различными аспектами системы для обеспечения ее нормальной работы.

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

В Linux они подобны службам в Windows и выполняют определенные задачи в определенное время или в ответ на события.

Демоны могут быть запущены при старте системы и продолжают работу в качестве системных служб.

Они не требуют вмешательства пользователя для своего запуска и работают в фоновом режиме.

Создаются они процессом инициализации системы при загрузке с помощью метода fork(), создавая копию существующего процесса.

Демоны могут быть идентифицированы в системе по их процессам, их имена обычно заканчиваются на "d".

Их можно отслеживать с помощью различных команд, таких как ps, top, htop и pstree. Команда pstree отображает процессы в виде древовидной диаграммы, что помогает лучше понять, какие демоны работают в системе.

ℹ️ В системе могут работать различные демоны, вот некоторые из них:

🔴 systemd: родитель всех процессов с PID=1, аналог init.
🔴 rsyslogd: регистрирует системные сообщения с дополнительными функциями по сравнению с syslogd.
🔴 udisksd: обрабатывает операции с устройствами хранения данных, такие как монтирование и размонтирование.
🔴 logind: управляет входом пользователей в систему.

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

Гринатом — ИТ-интегратор Росатома — ищет эксперта инфраструктуры Linux в Санкт-Петербурге!

👨‍💻Вам предстоит администрирование ОС Linux и Windows, управление виртуализацией, поддержка ключевых сервисов и обеспечение их стабильности, настройка и сопровождение систем мониторинга и централизованного логирования, автоматизация развертывания и конфигурации сервисов и задач, а также организация систем резервного копирования и восстановления.

🤝Мы предложим работу в аккредитованной ИТ-компании, «белую зарплату» 2 раза в месяц, обучение за счёт компании, оформление по ТК и ДМС (со стоматологией) с первого дня. От кандидатов ждём навыки работы с операционными системами и опыт в импортозамещении и развитии отечественных решений.

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

Что такое /dev/null и почему туда направляют данные?

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

1️⃣ Убрать из вывода всю ненужную инфу (предупреждения, ошибки и т.д.):

$ find / -name "*.conf" 2>/dev/null


2️⃣ Передать утилите пустой ресурс в качестве аргумента. Делаться это может с целью исключения пользовательских и системных конфигов и применения дефолтных настроек на стороне программы:

$ picom --config /dev/null


3️⃣ Полностью очистить файл:

$ cat /dev/null > bigfile   


Окей, принято, а чем является этот самый /dev/null?

В сущности - это cимвольное псевдо-устройство, которое создается на этапе запуска системы и работает с потоками данных:
$ ls -l
crw-rw-rw- 1 root root 1, 3 Sep 6 08:37 null


О типе устройства говорит первый бит режима файла - c "character".

Ресурс удаляет все записанное в него и возвращает при чтении EOF (End of File). Когда мы взаимодействуем с /dev/null, неявно отрабатывает специальный драйвер ядра, в который и зашита логика.

Если интересно, можно порыться в исходниках с реализацией: drivers/char/mem.c. Код имеет отношение не только к /dev/null, но и к другим символьным устройствам.

Развернем более подробную информацию:

$ stat /dev/null

File: /dev/null
Size: 0 Blocks: 0 IO Block: 4096   character special file
Access: (0666/crw-rw-rw-)  Uid: (0/ root)   Gid: (0/ root)
Access: 2025-01-25 14:42:20.101000002 +0300
...


Этот вывод показывает, что файл имеет размер 0 байт, для него выделено 0 блоков на диске, дата создания = дата запуска системы:

$ who -b  
system boot  2025-01-25 14:42


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

$ echo hello | /dev/null
-bash2: /dev/null: Permission denied


Поскольку файл не исполняемый, мы не можем использовать конвейер |. Единственный способ — использовать перенаправление файлов >, >>.

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

😱 Как вернуть удалённый скрипт

Рассмотрим ситуацию, когда случайно/специально удалился исполняющийся bash-скрипт.

Чтобы не попадать в такие ситуации, всегда храните исходники в git — это избыточно, но бекапы никто не отменял.

Скрипт удалён с диска, но продолжает работать в фоне, значит его можно как-нибудь восстановить.

Создадим подопытный скрипт. touch /tmp/script.sh:

#!/bin/bash
sleep 1000
exit


Делаем его исполняемым chmod +x /tmp/script.sh и запускаем в фоне /tmp/script.sh &.

Символ & может служить разделителем между командами command & command, две команды выполнятся параллельно.

Скрипт запустили, он крутится в фоне. Удалим сам файл:

rm -f /tmp/script.sh

Ключ -f позволит удалить без лишних вопросов.

Восстанавливаем:

lsof -c 'script.sh'


На экран выведется простыня. Нам нужна строка, где в конце указан путь к удаленному скрипту:

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
script.sh 261899 root 255r REG 8,1 51 130773 /tmp/script.sh


Берем PID = 261899, берем FD = 255 и делаем так:

cat /proc/261899/fd/255


А вот и исходник скрипта:

File: /proc/261899/fd/255
#!/bin/bash
sleep 1000
exit


Вот полезная инфа, которая была использована в гайде:
man 5 proc # /proc/[pid]/fd/
man lsof

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

👩‍💻 Команда killall

Если у вас будет открыто несколько окон с одинаковыми приложениями, то команда killall уничтожит их все. При этом не обязательно знать PID, в отличии от команды kill.

killall — команда, которая останавливает процессы с одним и тем же названием.

Команда ищет все подходящие в папке /proc


Предположим, нам необходимо закрыть окна калькулятора:

killall gcalctool


Если не указывать аргументы при использовании команды, то по умолчанию будет отправлен сигнал SIGTERM.

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

killall -s 1 gcalctool


Иногда не удается запомнить все правила использования команд. Но можно воспользоваться командой man, чтобы получить справку по их применению:

man killall


Как проверить, что процесс убит?

Чтобы удостовериться в том, что процесс был действительно отменен, воспользуйтесь одним из доступных способов:

ps aux | grep


pidof


pgrep


В случае успешного выполнения этих команд ничего не будет выведено.

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

Как освободить оперативную память в Linux

sync


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

echo 1 > /proc/sys/vm/drop\_caches


Очищает кэши страниц, инодов и дэнджлиста в оперативной памяти. Потребуются права администратора.

sudo sysctl -w vm.drop_caches=3


Тоже происходит очистка кэша страниц, инодов и дэнджлиста.

sudo systemctl restart systemd-journald


Происходит перезапуск службы журнала системы.

sudo systemctl restart rsyslog


Перезапуск службы системного журнала rsyslog.

Если у вас есть ненужные дисковые разделы или устройства, вы можете их отмонтировать или удалить с помощью команды umount или fdisk.

А так же, если у вас имеются неиспользуемые процессы, то вы можете воспользоваться командой kill или killall для их завершения и освобождения памяти, которую они занимают.

Читать полностью…

🐧 Linux Junior. Программирование под Linux.

👩‍💻 Команда ps

Как правило, команда перечисляет и отображает все запущенные процессы в ядре Linux. Основная функциональность заключается в отображении информации о процессе, включая уникальный идентификатор процесса (PID), терминал или пользователя, связанного с процессом, и команду, запускающую процесс.

1️⃣ Список процессов, связанных с текущей оболочкой

Использование простой команды ps выводит список запущенных в данный момент процессов в оболочке.

ps


В выводе есть четыре столбца: PID, TTY, TIME и CMD. Давайте разберем, что означают эти четыре аббревиатуры.

• PID: это сокращенная форма "Process ID". Каждый запущенный процесс имеет определенный идентификатор, отличающий его от других процессов.

• TTY: расшифровывается как "Terminal Type", демонстрирующий терминал, используемый для запуска указанного процесса.

• TIME: это примерно то время, в течение которого процесс использовал центральный процессор, а не количество времени, в течение которого процесс был запущен.

• CMD: этот элемент показывает команду, использованную при запуске процесса.

2️⃣ Использование команды для просмотра всех запущенных процессов

ps -A


ps -e


Команда не связана с каким-либо терминальным сеансом всякий раз, когда TTY является вопросительным знаком.

3️⃣ Просмотр процессов, связанных с терминалом

ps -T


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

4️⃣ Отображать процессы, не связанные с терминалом

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

ps -a


Руководитель сеанса - это процесс, который запускает другие процессы, например, bash.

5️⃣ Список всех запущенных процессов с полным именем команды

Чтобы перечислить все запущенные в данный момент процессы с полным названием команды, введите следующую команду:

ps -ax

Читать полностью…
Subscribe to a channel