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

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

رفتن به کانال در Telegram

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

نمایش بیشتر
3 117
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-57 روز
-1830 روز
آرشیو پست ها
👩‍💻 Утилита 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

👩‍💻 Передача файлов с помощью scp Команда scp используется для безопасного копирования файлов между локальным компьютером и удаленным сервером, а также между двумя удаленными серверами, используя протокол SSH. Она позволяет передавать файлы и каталоги по зашифрованному каналу, что гарантирует конфиденциальность данных. ⚙️ Синтаксис:
scp [опции] <источник> <назначение>
⚙️ Примеры использования ⏺ Копирование файла на удалённый сервер:
scp file.txt user@remote_host:/path/to/destination  
⏺ Скачивание файла с сервера:
scp user@remote_host:/path/to/file.txt ./  
⏺ Передача директории:
scp -r папка user@remote_host:/path/to/destination  
-r — ключ для копирования директории ⏺ Указание порта SSH: Если вдруг используется нестандартный порт, мы можем его передать установив флаг -P:
scp -P 2222 file.txt user@remote_host:/path/to/destination 
📥 Для оптимизации передачи больших файлов можно их сжать с помощью флага -C.

Команда enable -n
Anonymous voting

Инженеры перебрали... Linux-кейсов 🤩 23 апреля K2 Cloud и K2Тех проведут онлайн - митап — pебята будут разбирать реальные ин
Инженеры перебрали... Linux-кейсов 🤩 23 апреля K2 Cloud и K2Тех проведут онлайн - митап — pебята будут разбирать реальные инженерные кейсы из практики про поломанный SSH, обновление ядер, поломку сети в ВМ и балансировщики с одинаковыми конфигами, но разными результатами. А ещё можно принести свой кейс на разбор и получить приз. Подробности и регистрация по ссылке.

Для вывода определенных столбцов текстовых файлов удобно пользоваться командой awk:
awk '{print $2, $5}' data.txt
Эта команда покажет второй и пятый столбцы. Отлично подходит для логов и CSV без кавычек. #вопросы

Как вывести только определённые столбцы из текстового файла? Ответ через час. #вопросы

💡 Использование опций команды apt-get для очистки системы Большинство из нас, работающих с системами на базе Debian, регулярно используют команду apt-get для установки и обновления пакетов. Но как часто мы задумываемся об очистке системы? Давайте рассмотрим три полезные команды для очистки ненужных файлов: apt-get clean, apt-get autoclean и apt-get autoremove. 1️⃣ apt-get clean Команда apt-get clean очищает локальный репозиторий от извлеченных файлов пакетов, находящихся в каталоге /var/cache/apt/archives/. Она удаляет все файлы пакетов, кроме файлов блокировки и пустых подкаталогов. Эта команда полезна для освобождения дискового пространства, особенно если вы часто устанавливаете и удаляете пакеты. Например, до выполнения команды apt-get clean в каталоге /var/cache/apt/archives/ могут находиться следующие файлы:
/var/cache/apt/archives/db6.1-util_6.1.27+dfsg1-0.7ubuntu2_amd64.deb
/var/cache/apt/archives/db-util_2%3a6.121~exp1ubuntu1_all.deb
/var/cache/apt/archives/lock
/var/cache/apt/archives/postfix_3.4.6-2ubuntu2_amd64.deb
/var/cache/apt/archives/sasl2-bin_2.2.25+dfsg-1build2_amd64.deb
После выполнения команды sudo apt-get clean этот каталог будет очищен, и оставлены будут только файлы блокировки и пустые подкаталоги. 2️⃣ apt-get autoclean Команда apt-get autoclean похожа на clean, но она удаляет только те пакеты, которые больше не могут быть загружены из репозиториев и, следовательно, больше не нужны. Это предотвращает переполнение кэша устаревшими файлами. Выполнение следующей команды очистит кэш от бесполезных пакетов, оставляя только актуальные и доступные для загрузки файлы:
sudo apt-get autoclean
3️⃣ apt-get autoremove Команда apt-get autoremove удаляет пакеты, которые были установлены автоматически как зависимости для других пакетов, но теперь больше не требуются. Использование этой команды после удаления пакетов помогает поддерживать чистоту системы и предотвращает накопление ненужных файлов. Пример использования:
sudo apt-get autoremove
После выполнения команды вы увидите список пакетов, которые больше не нужны, например:
The following packages were automatically installed and are no longer required:
g++-8 gir1.2-mutter-4 libapache2-mod-php7.2 libcrystalhd3
libdouble-conversion1 libgnome-desktop-3-17 libigdgmm5 libllvm8
liblouisutdml8 libmutter-4-0 libmysqlclient20 libpoppler85 linsydc++-8-dev
libtagc0 libvpx5 libx265-165 php7.2 php7.2-cli php7.2-common php7.2-json
php7.2-opcache php7.2-readline
Use 'sudo apt-get autoremove' to remove them.
🔥 Эти простые команды помогут вам поддерживать вашу систему на базе Debian в чистоте и порядке, освобождая дисковое пространство и оптимизируя работу системы.

👩‍💻 Команда gzip в Linux gzip — это стандартная утилита в Linux для сжатия и распаковки файлов. Она уменьшает размер файлов, экономит место и ускоряет передачу данных по сети. Поддерживает разные уровни сжатия (от -1 — быстро до -9 — максимально). gzip применяется для уменьшения размеров логов и бэкапов, упаковки результатов сборки, сжатия данных перед передачей по сети, автоматических задач (cron, CI/CD). В этом посте мы рассмотрим несколько сценариев использования gzip. 🐧 Сжатие с оптимизацией. Чтобы сжать файл с максимальной степенью сжатия, выполните:
gzip -9 имя_файла
Это удобно для критических случаев, где важнее уменьшить размер файла, чем скорость обработки. 🐧 Сжатие через стандартный ввод. Команда gzip может сжимать данные не только из файлов, но и через стандартный ввод. Например, можно сжать вывод другой команды:
mysqldump имя_базы_данных | gzip > backup.sql.gz
Эта команда создаст резервную копию базы данных, одновременно сжимая её, что особенно полезно для экономии места при больших базах. 🐧 Использование нескольких процессоров: pigz. Классический вариант gzip использует только одно ядро процессора для сжатия. Но можно воспользоваться параллельной версией утилиты — pigz. Эта версия распределяет задачу сжатия на несколько ядер, что значительно ускоряет процесс:
pigz имя_файла
pigz поддерживает все те же параметры, что и gzip, но работает быстрее на многоядерных системах. 🐧 Просмотр содержимого сжатого файла. Чтобы просмотреть статистику сжатого файла без его распаковки, используйте команду:
gzip -l имя_файла.gz
Вывод покажет размер до и после сжатия, степень сжатия и имя исходного файла. Для более детализированного отчета добавьте параметр -v:
gzip -lv имя_файла.gz
Это полезно для оценки эффективности сжатия файлов перед их распаковкой. 🐧 Рекурсивное сжатие/распаковка файлов. Для сжатия всех файлов в каталоге и его подкаталогах используйте рекурсивную опцию -r:
gzip -r имя_каталога
Эта команда пройдется по всей структуре каталога и сожмет каждый файл. Чтобы распаковать все файлы в каталоге рекурсивно, используйте:
gzip -dr имя_каталога
🐧 Работа с архивами tar.gz. Часто gzip используется вместе с командой tar. Например:
tar -czf архив.tar.gz имя_каталога
Здесь -c создает архив, -z указывает на использование сжатия через gzip, а -f определяет имя файла архива. Для распаковки архива:
tar -xzf архив.tar.gz
🐧 Пример эффективного сжатия данных Сжать лог-файлы перед отправкой по сети:
cat /var/log/syslog | gzip -9 | nc -w 3 192.168.1.10 8888
Эта команда сжимает лог и отправляет его по сети с помощью netcat.

Какая команда используется для копирования файлов и директорий?
Anonymous voting

Комбинация find, du и sort позволит найти 10 самых "тяжёлых" файлов с путями и размерами.
find . -type f -exec du -h {} + | sort -rh | head -n 10
#вопросы

Как быстро узнать, какой файл в каталоге самый большой? Ответ через час. #вопросы

🔥 Разница между su и su - Ни для кого не секрет, что Linux - система, с которой можно работать от разных пользователей. Сегодня я запускаю сессию от Паши, завтра от Пети. Когда вы в сессии открываете терминал, стартует оболочка, которая подстраивает окружение под конкретного юзера: выполняет скрипты, определяет переменные. Бывает, приходится, работая в сессии одного пользователя, переключиться на другого, например, чтобы использовать ресурсы, ограниченные правами доступа. Для этого мы используем команду su (substitute user), которая позволяет сменить пользователя в текущей оболочке:
$ su vasya
После выполнения команды создастся дочерняя оболочка, которая переймет все переменные окружения родителя, определит пользовательские (USER, HOME ...) и выполнит локальные "Васины" скрипты: /home/vasya/.bashrc и т.д.:
$ export USER1VAR="vasya"

$ su xoadmin
$ printenv | grep USER
USER=xoadmin
USER1VAR=vasya
Какая-то каша выходит. Половина Васиных переменных, половина юзера xoadmin. Такой способ полезен, когда нам нужно быстро поменять пользователя и не требуется его окружение в изначальном виде. Если нужно полностью воссоздать среду, как при чистом входе в систему, следует использовать su -:
$ su - xoadmin
Окружение родителя мы не наследуем и запускаем оболочку типа "login shell", которая выполнит дополнительные скрипты инициализации "/etc/profile", "~/.bash_profile". Также, когда мы используем su -, наш рабочий каталог переключается на домашний для целевого пользователя. Мелочь, но факт:
$ pwd
/home/vasya/Music
$ su - xoadmin
$ pwd
/home/xoadmin