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

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

Ir al canal en Telegram

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

Mostrar más
3 098
Suscriptores
Sin datos24 horas
-37 días
-1030 días
Archivo de publicaciones
⚡️ Быстрое преобразование текста: Vim и sed Регулярные выражения в Vim и утилите sed позволяют за секунды отредактировать многотысячный файл. Ниже — подборка полезных однострочников для повседневных задач. 1️⃣ Изменение регистра букв 🔴 Первую букву в каждой строке сделать заглавной: Vim: :%s/^\w/\u&/g sed: sed -i 's/^\w/\u&/g' file.txt 🔴 Первую букву каждого слова сделать заглавной: Vim: :%s/\<\w/\u&/g sed: sed -Ei 's/\b[a-z]/\U&/g' file.txt Как это работает: спецсимвол \u переводит следующий символ в верхний регистр, \U переводит все последующие символы, а & обозначает найденное совпадение. 2️⃣ Очистка текста от мусора 🔴 Удалить все пустые строки (включая строки с пробелами и табуляцией): Vim: :g/^\s*$/d sed: sed -i '/^\s*$/d' file.txt 🔴 Удалить все строки-комментарии (начинающиеся с #): Vim: :g/^\s*#/d sed: sed -i '/^\s*#/d' file.txt (Команда :g/.../d в Vim полностью удаляет совпадающую строку, а не просто очищает её содержимое). 3️⃣ Форматирование отступов и пробелов 🔴 Заменить 4 пробела на один знак табуляции (\t): Vim: :%s/ /\t/g sed: sed -i 's/ /\t/g' file.txt 🔴 Удалить концевые пробелы (Trailing spaces) в конце строк: Vim: :%s/\s\+$//e sed: sed -i 's/[ \t]*$//' file.txt ⚠️ Заметка по ключу sed -i: Флаг -i перезаписывает файл «на месте». На macOS (BSD sed) команда потребует указать пустые кавычки для резервной копии: sed -i '' 's/.../.../' file.txt. Если хотите подстраховаться, используйте sed -i.bak, чтобы автоматически создать бэкап файла перед изменением.

Если нужно изменить логин пользователя вместе с переносом его домашней директории, используйте usermod с флагами -l, -d и -m: sudo usermod -l newname -d /home/newname -m oldname Флаг -l меняет имя, -d задаёт новый путь к home-каталогу, а -m принудительно перемещает всё содержимое со старого места на новое. #вопросы

Как изменить имя пользователя и переименовать его домашний каталог одной командой? Ответ через час. #вопросы

Права доступа -rwxr-sr-- равнозначны...
Anonymous voting

🔥 Смена владельца и группы файлов в Linux Помимо изменения прав доступа с помощью chmod, иногда нужно изменить владельца файла или группу, которой он принадлежит. Для этих операций обычно требуются права суперпользователя (root), поэтому используем sudo. 👤 Смена владельца Команда chown (от change owner) позволяет назначить нового владельца файла:
sudo chown [имя_пользователя] [имя_файла]
Пример:
sudo chown john report.txt
Теперь владельцем файла report.txt станет пользователь john. 👤👥 Смена владельца и группы одновременно Чтобы изменить владельца и группу файла или каталога, используем двоеточие:
sudo chown [имя_пользователя]:[группа] [имя_файла]
Пример:
sudo chown root:root /home/diego/Документы/Адреса.txt
После этого владелец и группа файла будут root:root. 👥 Смена только группы Если нужно изменить только группу, а владельца оставить прежним, можно:
sudo chown :[группа] [имя_файла]
или использовать специализированную команду chgrp (от change group):
sudo chgrp [группа] [имя_файла]
Пример:
sudo chgrp staff /home/diego/Документы/Адреса.txt
Теперь владельцем остаётся прежний пользователь, а группа меняется на staff. 📎 Пример на практике Сменим владельца и группу файла Адреса.txt на root:root:
diego@debian:~$ sudo chown root:root /home/diego/Документы/Адреса.txt
[sudo] пароль для diego: 
diego@debian:~$ ls -la /home/diego/Документы/Адреса.txt
-rw-r----- 1 root root 2 фев 17 21:15 /home/diego/Документы/Адреса.txt
Как видно, владелец и группа изменились с diego:diego на root:root.

Команда uniq предназначена для поиска одинаковых строк в массивах текста. Как вывести только уникальные строки (не имеющие дубликатов)?
Anonymous voting

🔥 tail для нескольких файлов и пользователей Вы, вероятно знакомы с multitail — он умеет следить за несколькими логами сразу. Но: 🔴 он не всегда установлен, 🔴 иногда нет прав на установку, особенно на продакшн-серверах. Не беда: с этим справится и обычный tail:
tail -f /var/logs/*.log
⚙️ Проблема с "висящими" tail На сервере с приложением часто работают несколько разработчиков или тестировщиков. Все смотрят логи через tail -f. Когда приложение перезапускают, старые процессы tail остаются в фоне — иногда на дни или даже недели. Это не критично, но выглядит неаккуратно и засоряет список процессов:
ps aux | grep tail
🔧 Решение: tail с автозавершением Можно сделать алиас, который будет следить за логом только пока жив процесс приложения:
alias TFapplog='tail -f --pid=$(cat /opt/app/tmp/app.pid) /opt/app/logs/app.log'
Как это работает: 🔴 --pid=$(cat /opt/app/tmp/app.pid)tail будет автоматически завершён, когда процесс приложения умрёт. 🔴 /opt/app/logs/app.log — путь к логу. ⚙️ Практика Добавьте этот алиас в ~/.bashrc или ~/.bash_profile. Теперь, даже если кто-то забудет завершить tail, он сам корректно закроется при рестарте приложения. Можно сделать несколько алиасов для разных приложений или логов — удобно и безопасно. 🟢 Бонус Для нескольких файлов и с PID можно использовать и так:
tail -f --pid=$(cat /opt/app/tmp/app.pid) /opt/app/logs/app1.log /opt/app/logs/app2.log
Все логи будут отображаться одновременно, и tail закроется при завершении процесса.

Команда > abc 2>&1
Anonymous voting

🔗 Жесткие ссылки vs Символьные ссылки В Linux существуют два основных типа ссылок на файлы: жесткие (hard) и символьные (soft / symlink). Они похожи тем, что позволяют обращаться к одному файлу через несколько имен, но работают по-разному и имеют свои особенности. 🔗 Жесткие ссылки Особенности: 🔴 Работают только внутри одной файловой системы. 🔴 Нельзя создавать для директорий (обычно, кроме системных инструментов). 🔴 Наследуют inode и права доступа исходного файла. 🔴 Любые изменения содержимого или прав исходного файла отражаются во всех жестких ссылках. 🔴 Даже если исходный файл удалён, содержимое остаётся доступным через жесткую ссылку. Пример использования:
$ echo "Hello World" > original.txt
$ ln original.txt hardlink.txt

$ ls -li
123456 -rw-r--r-- 2 user user 12 Oct 22 12:00 original.txt
123456 -rw-r--r-- 2 user user 12 Oct 22 12:00 hardlink.txt

$ echo "Added line" >> hardlink.txt
$ cat original.txt
Hello World
Added line
Здесь видно, что hardlink.txt и original.txt имеют один и тот же inode (123456), и изменения в одном отражаются на другом. 🔗 Символьные ссылки Особенности: 🔴 Могут пересекать границы файловых систем. 🔴 Можно создавать для директорий. 🔴 Имеют свой собственный inode и права доступа. 🔴 Связаны с именем (путём) исходного файла, а не с содержимым. 🔴 Удаление символьной ссылки не влияет на исходный файл. 🔴 Можно изменить путь, на который она указывает, без влияния на исходный файл. Пример использования:
$ ln -s /home/user/Documents/original.txt symlink.txt
$ ls -l
lrwxrwxrwx 1 user user 29 Oct 22 12:05 symlink.txt -> /home/user/Documents/original.txt

$ echo "Another line" >> /home/user/Documents/original.txt
$ cat symlink.txt
Hello World
Added line
Another line

$ rm symlink.txt
$ ls /home/user/Documents/original.txt
original.txt
Символьная ссылка указывает на путь, а не на данные. Удаление ссылки не затрагивает исходный файл.

Какая команда собирает переданные ей аргументы в строку и выполняет эту строку, как если бы это была команда, введённая прямо в оболочке?
Anonymous voting

👩‍💻 Утилита tldr Проект tldr-pages — это сборник поддерживаемых сообществом справочных страниц для инструментов командной строки, который призван стать более простым и доступным дополнением к традиционным справочным страницам man. TL; DR - это аббревиатура, используемая в Интернете, чтобы сказать, что публикация, статья, комментарий или страница руководства слишком длинные, и поэтому написавший "TL; DR" их не читал. Команда tldr позволяет выводить максимально сжатую сводку информации по консольным утилитам (назначение и список самых популярных опций). ⚙️ Установка
sudo apt install tldr  # Для Ubuntu/Debian
sudo pacman -S tldr    # Для Arch
⚙️ Пример использования
tldr tar
В результате получите наглядные примеры: как распаковать архив, добавить файлы и так далее. 📱 Ссылка на GitHub Tldr

👩‍💻 Команда fd — быстрая и удобная альтернатива find fd — это современная, быстрая и удобная альтернатива стандартной команде find. Она делает то же самое — ищет файлы и каталоги, — но проще в использовании, работает быстрее и выдает чистый, цветной, читаемый вывод. ⚙️ Установка В большинстве дистрибутивов Linux fd доступна в официальных репозиториях:
sudo apt install fd-find    # Для Debian/Ubuntu  
sudo dnf install fd-find    # Для Fedora  
sudo pacman -S fd           # Для Arch Linux  
⚙️ Синтаксис:
fd [паттерн] [директория]
⚙️ Базовое использование 1️⃣ Поиск по имени файла:
fd filename
Найдёт все файлы, имя которых содержит “filename”. 2️⃣ Поиск по шаблону:
fd 'pattern'
Поддерживаются регулярные выражения для шаблонов. 3️⃣ Поиск в определённой директории:
fd filename /path/to/dir
4️⃣ Исключение бинарных файлов (по умолчанию):
fd 'filename'
fd ищет только в текстовых файлах, игнорируя двоичные. 5️⃣ Поиск по типу файлов: • Только файлы: fd -t f • Только директории: fd -t d 6️⃣ Вывод полной информации:
fd -l
Показывает подробные пути к найденным объектам. 7️⃣ Поиск с учётом регистра:
fd -s filename
8️⃣ Пример поиска в проекте: Найти все файлы с расширением .rs в текущем каталоге и его подкаталогах:
fd '\.rs$'

👩‍💻 Команда lsof В Linux всё — это файл: обычные файлы, сокеты, устройства, каталоги, процессы. "lsof" расшифровывается как List Open Files — "список открытых файлов". Соответвенно, команда lsof позволяет просматривать информацию об открытых файлах и связанных с ними процессах: ✔️ какие файлы, сокеты и порты открыты ✔️ каким процессом они используются ✔️ кто блокирует нужный файл ✔️ что "занимает" устройство, диск или порт Эта утилита вам пригодится, если вы сталкиваетесь с ошибками доступа к файлам, например, при монтировании, удалении или использовании разделов. ⚙️ Синтаксис:
lsof [опции]
⚙️ Примеры использования 1️⃣ Проверить, кто занимает порт.
lsof -i :80
Покажет процесс (PID), который слушает порт 80. 2️⃣ Найти процесс, держащий файл "занятым".
lsof /path/to/file
Если файл нельзя удалить или смонтировать диск — это поможет выяснить, кто его использует. 3️⃣ Проверить активные сетевые соединения.
lsof -i
Выведет список всех TCP/UDP подключений (локальные и удалённые адреса, PID, программа). 4️⃣ Найти удалённые, но не освобождённые файлы.
lsof +L1
Полезно, если диск "заполнен", но место не освобождается — это покажет процессы, держащие "удалённые" файлы открытыми. 5️⃣ Вывести все файлы, открытые процессом.
lsof -p 1234
Покажет, какие файлы, сокеты и устройства открыты у процесса с PID 1234. 6️⃣ Посмотреть, кто использует каталог.
lsof +D /var/log/
Полезно при попытке размонтировать диск или директорию — можно увидеть, кто удерживает файлы внутри.

👩‍💻 Утилита 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 окружения.

👩‍💻 Утилита форматирования column column — это небольшая, но очень удобная консольная команда Linux, предназначенная для форматирования текста в столбцы. column берет текстовый ввод (обычно строки, разделённые пробелами, табами или другим символом) и выравнивает его в табличный формат. Это особенно удобно при работе с командами вроде cat, awk, grep, ls, mount, ps и др. ⚙️ Синтаксис:
column [опции] [файл]
⚙️ Основные флаги: -t — создаёт таблицу, выравнивая столбцы по ширине (самый частый вариант) -s <символ> — указывает разделитель полей (по умолчанию — пробел или таб) -n — не объединяет несколько разделителей, идущих подряд (считает их отдельными) -c <число> — устанавливает максимальную ширину вывода -x — заполняет таблицу построчно, а не по столбцам -o <строка> — задаёт строку-разделитель между столбцами ⚙️ Примеры использования: 1️⃣ Форматирование вывода в таблицу
cat /etc/passwd | column -t -s :
Разделитель в файле /etc/passwd — двоеточие, поэтому с -s : получаем аккуратную таблицу пользователей. 2️⃣ Использование с выводом других команд
ls -l | column -t
Выравнивает стандартный "грязный" вывод ls -l в читаемые столбцы. 3️⃣ Выравнивание CSV-файла
cat data.csv | column -t -s ,
Преобразует CSV-файл в выровненную таблицу прямо в терминале. 4️⃣ Форматирование вывода mount
mount | column -t
Вывод монтированных файловых систем становится удобнее для восприятия. 5️⃣ Таблица из произвольного списка echo -e "Name Score\nAlice 90\nBob 85\nCarol 95" | column -t Создаёт простую таблицу с двумя выровненными столбцами:
Name   Score
Alice  90
Bob    85
Carol  95

👩‍💻 Утилита ncdu ncdu (NCurses Disk Usage) — это консольная утилита Linux для анализа использования дискового пространства. Она похожа на du, но имеет интерактивный, удобный интерфейс прямо в терминале. ⚙️ Установка:
sudo apt install ncdu    # Debian/Ubuntu  
sudo dnf install ncdu    # Fedora  
sudo pacman -S ncdu      # Arch
ncdu показывает, какие каталоги и файлы занимают больше всего места на диске, и позволяет: ✔️ быстро перемещаться по дереву каталогов, ✔️ сортировать по размеру, ✔️ удалять файлы прямо из интерфейса, ✔️ искать, что «съедает» место. Результаты сканирования можно сохранить в файл (ncdu -o out.json) и потом просмотреть (ncdu -f out.json). ⚙️ Примеры использования 1️⃣ Анализ текущего каталога. Просто запустите ncdu без параметров, чтобы проанализировать текущий каталог:
ncdu
2️⃣ Анализ конкретного каталога. Укажите путь к каталогу, который хотите проанализировать:
ncdu /var/log
3️⃣ Исключение определённых файлов или каталогов. Если вы хотите исключить определённые файлы или каталоги из анализа, используйте опцию --exclude:
ncdu --exclude '*.log' /var/log
4️⃣ Сканирование удалённого сервера через SSH. Вы можете использовать ncdu для сканирования дискового пространства на удалённом сервере через SSH:
ssh user@remote-server "ncdu /"

170+ вакансий, где упоминается «Linux” : https://talanto.work/jobs/25417942-422f-482e-a0a8-b926e4645104

Что произойдет, если пользователь попытается удалить командой rm файл, доступный только для чтения (права доступа 444)?
Anonymous voting

🚀 Перемещайся по файловой системе молниеносно: CDPATH Многие знают про: 🔴 автодополнение по TAB, 🔴 ~ для домашнего каталога, 🔴 cd - — переключение между текущей и предыдущей папками:
$ cd -
/home/xoadmin/Documents
$ cd -
/home/xoadmin/Music
Но если вы часто работаете с одними и теми же каталогами, вводить длинные пути быстро надоедает. 💭 Проблема Допустим, вы часто заходите в каталог /home/smith/Family/Memories/Photos Чтобы попасть туда, каждый раз приходится писать:
cd ~/Family/Memories/Photos
А хотелось бы просто:
cd Photos
Однако, если в текущей папке нет подкаталога Photos, Bash выдаст:
bash: cd: Photos: No such file or directory
📎 Решение: CDPATH Переменная CDPATH говорит Bash, где ещё искать каталоги при выполнении cd.
CDPATH=$HOME/Family/Memories
Теперь, где бы вы ни находились:
$ pwd
/etc
$ cd Photos
/home/smith/Family/Memories/Photos
Работает! 🙂 Несколько путей Можно указать сразу несколько мест (через двоеточие):
CDPATH=$HOME:$HOME/Projects:$HOME/Family/Memories:/usr/local
Bash будет проверять их по порядку. Первое совпадение — и переход произойдёт именно туда. ⚙️ Постоянная настройка Чтобы не прописывать CDPATH вручную при каждом запуске терминала, добавьте строку в ~/.bashrc (для конкретного пользователя) или /etc/profile (для всех пользователей системы).
export CDPATH=$HOME:$HOME/Sources:/usr/local
🔍 Пример из практики Пусть у вас есть каталог ~/Sources, где хранятся проекты:
echo $CDPATH
/home/xoadmin/Sources
Теперь:
$ pwd
/home/xoadmin/Music
$ cd picom
/home/xoadmin/Sources/picom
Без лишнего ввода — просто cd picom. ⚠️ Пара моментов Если каталог найден через CDPATH, cd выведет полный путь:
$ cd Photos
/home/smith/Family/Memories/Photos
Это нормально — просто признак, что каталог был найден не в текущей директории. Текущее место (.) можно тоже включить в CDPATH, чтобы cd вела себя стандартно:
export CDPATH=.:$HOME/Projects
🟢 В сухом остатке CDPATH — это как "умный поиск" для cd. Если вы часто прыгаете между проектами, архивами или каталогами с данными, он экономит десятки нажатий и делает навигацию в консоли почти мгновенной.

🔥 Уменьшение размера лог-файлов В обычном состоянии, если приложение запущено и пишет в лог файл, его не рекомендуется удалять, поскольку в *nix, открытый файловый дескриптор связан не с именем файла, а с iNode. И если мы удалим лог-файл, приложение может не начать писать в новый файл с нуля, а продолжать писать в старый, который для нас уже будет недоступен по имени (мы же его удалили). Затем, когда приложение остановится и закроет дескриптор, данные удалятся с файловой системы. (Большинство программ при записи в лог каждый раз открывают и закрывают файл, и тогда этой проблеме они не подвержены). Поэтому очистку файла следует делать либо так (очистим файл, не удаляя его):
> application.log
Либо так (файл будет урезан до указанного размера):
truncate --size=1M application.log
Но эта команда именно урежет, т.е. в файле останутся старые данные, а свежие как раз и будут урезаны. Поэтому можно делать вот так, сохраняя последние 1000 строк:
echo "$(tail -n 1000 application.log)" > application.log