🐧 Linux Junior. Программирование под Linux.
رفتن به کانال در Telegram
Канал для программистов работающих с Linux. Почти все Python девелоперы с нами ну и другие тоже подтянутся. По рекламе: @jannytg @anothertechrock
نمایش بیشتر3 059
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-47 روز
-1430 روز
در حال بارگذاری دادهها
کانالهای مشابه
ابر برچسبها
اشارات ورودی و خروجی
---
---
---
---
---
---
جذب مشترکین
نوامبر '26نوامبر '26
نوامبر '26
+2
در 0 کانالها
اکتبر '26
+7
در 0 کانالها
Get PRO
سپتامبر '26
+10
در 0 کانالها
Get PRO
اوت '26
+8
در 0 کانالها
Get PRO
ژوئیه '26
+7
در 0 کانالها
Get PRO
ژوئن '26
+14
در 0 کانالها
Get PRO
مه '26
+6
در 0 کانالها
Get PRO
آوریل '26
+13
در 0 کانالها
Get PRO
مارس '26
+6
در 0 کانالها
Get PRO
فوریه '26
+4
در 0 کانالها
Get PRO
ژانویه '26
+6
در 0 کانالها
Get PRO
دسامبر '25
+7
در 0 کانالها
Get PRO
نوامبر '25
+11
در 0 کانالها
Get PRO
اکتبر '25
+11
در 0 کانالها
Get PRO
سپتامبر '25
+29
در 1 کانالها
Get PRO
اوت '25
+7
در 0 کانالها
Get PRO
ژوئیه '25
+11
در 0 کانالها
Get PRO
ژوئن '25
+6
در 0 کانالها
Get PRO
مه '25
+9
در 0 کانالها
Get PRO
آوریل '25
+28
در 1 کانالها
Get PRO
مارس '25
+74
در 1 کانالها
Get PRO
فوریه '25
+18
در 0 کانالها
Get PRO
ژانویه '25
+13
در 0 کانالها
Get PRO
دسامبر '24
+12
در 0 کانالها
Get PRO
نوامبر '24
+3
در 0 کانالها
Get PRO
اکتبر '24
+7
در 0 کانالها
Get PRO
سپتامبر '24
+22
در 0 کانالها
Get PRO
اوت '24
+11
در 0 کانالها
Get PRO
ژوئیه '24
+9
در 0 کانالها
Get PRO
ژوئن '24
+4
در 0 کانالها
Get PRO
مه '24
+9
در 0 کانالها
Get PRO
آوریل '24
+15
در 0 کانالها
Get PRO
مارس '24
+7
در 0 کانالها
Get PRO
فوریه '24
+19
در 0 کانالها
Get PRO
ژانویه '24
+23
در 0 کانالها
Get PRO
دسامبر '23
+24
در 0 کانالها
Get PRO
نوامبر '23
+15
در 0 کانالها
Get PRO
اکتبر '23
+14
در 0 کانالها
Get PRO
سپتامبر '23
+26
در 0 کانالها
Get PRO
اوت '23
+30
در 0 کانالها
Get PRO
ژوئیه '23
+29
در 0 کانالها
Get PRO
ژوئن '23
+42
در 0 کانالها
Get PRO
مه '23
+835
در 0 کانالها
Get PRO
آوریل '23
+39
در 0 کانالها
Get PRO
مارس '23
+18
در 0 کانالها
Get PRO
فوریه '23
+17
در 0 کانالها
Get PRO
ژانویه '23
+11
در 0 کانالها
Get PRO
دسامبر '22
+3
در 0 کانالها
Get PRO
نوامبر '22
+8
در 0 کانالها
Get PRO
اکتبر '22
+105
در 0 کانالها
Get PRO
سپتامبر '22
+20
در 0 کانالها
Get PRO
اوت '22
+21
در 0 کانالها
Get PRO
ژوئیه '22
+50
در 0 کانالها
Get PRO
ژوئن '22
+638
در 0 کانالها
Get PRO
مه '22
+946
در 0 کانالها
Get PRO
آوریل '22
+6 365
در 0 کانالها
| تاریخ | رشد مشترکین | اشارات | کانالها | |
| 15 نوامبر | +1 | |||
| 14 نوامبر | 0 | |||
| 13 نوامبر | 0 | |||
| 12 نوامبر | 0 | |||
| 11 نوامبر | 0 | |||
| 10 نوامبر | 0 | |||
| 09 نوامبر | 0 | |||
| 08 نوامبر | 0 | |||
| 07 نوامبر | 0 | |||
| 06 نوامبر | 0 | |||
| 05 نوامبر | 0 | |||
| 04 نوامبر | 0 | |||
| 03 نوامبر | 0 | |||
| 02 نوامبر | 0 | |||
| 01 نوامبر | +1 |
پستهای کانال
🔥 Красивый вывод в CLI: форматируем текст в таблицы с помощью column
При работе с логами, CSV-файлами или выводом команд данные часто сбиваются в трудночитаемую кучу текста. Чтобы не писать громоздкие скрипты на
awk, в Linux есть специальная утилита — column (из пакета util-linux).
Она автоматически рассчитывает ширину колонок и выравнивает текст в аккуратные столбцы.
1️⃣ Базовое выравнивание по пробелам (-t)
Флаг -t (--table) превращает любой стандартный ввод в таблицу, где разделителем по умолчанию считается пробел или табуляция.
echo -e "Name Role Server\nAlex Admin SVR-01\nKonstantin Developer SVR-02" | column -t
Вывод:
Name Role Server Alex Admin SVR-01 Konstantin Developer SVR-022️⃣ Работа со своими разделителями (-s и -o) Часто данные разделены двоеточием, запятой или табуляцией (как в CSV или /etc/passwd).
-s (--separator) — указывает, какой символ считать разделителем входных данных.
-o (--output-separator) — задает символ/строку разделителя для выходной таблицы (по умолчанию это два пробела).
Пример: читаем первые 5 пользователей из /etc/passwd
head -n 5 /etc/passwd | column -t -s ':' -o ' | '
Вывод:
root | x | 0 | 0 | root | /root | /bin/bash daemon | x | 1 | 1 | daemon | /usr/sbin | /usr/sbin/nologin bin | x | 2 | 2 | bin | /bin | /usr/sbin/nologin sys | x | 3 | 3 | sys | /dev | /usr/sbin/nologin sync | x | 4 | 65534 | sync | /bin | /bin/sync3️⃣ Преобразование таблицы в JSON (-J) Современная версия column умеет на лету конвертировать текстовые таблицы в формат JSON. Для этого используются флаги
-J (--json) и -n (задать имя массива).
echo -e "id name\n1 server1\n2 server2" | column -t -J -n servers
Вывод:
{
"servers": [
{"id": "1", "name": "server1"},
{"id": "2", "name": "server2"}
]
}
🟣 Где это применяют на практике?
column удобно встраивать в каналы (Pipes) при просмотре логов или выводе других команд:
# Красивый вывод точки монтирования и дискового пространства df -h | column -t
| 2 | Чтобы выдать пользователю права sudo без перетирания его текущих групп, используйте usermod с ключами -aG:
sudo usermod -aG sudo username
Ключ -a (append) критически важен: он дополняет список групп, а не заменяет существующие.
#вопросы | 497 |
| 3 | ❓ Как добавить существующего пользователя в группу администраторов (sudo)?
Ответ через час.
#вопросы | 498 |
| 4 | Какая команда создаёт пустой файл, если он не существует? | 784 |
| 5 | 👩💻 Команда read в Linux
Команда read в Linux используется для чтения ввода от пользователя или из стандартного потока и сохранения его в переменные. Она особенно полезна в скриптах, когда нужно запросить у пользователя данные.
⚙ Синтаксис:
read [опции] переменные
⚙ Опции:
-p "текст" — выводит приглашение перед вводом.
-t <сек> — ограничение по времени (таймаут ожидания ввода).
-n <число> — считать только указанное количество символов (без ожидания Enter).
-s — скрытый ввод (подходит для паролей).
-a массив — сохраняет слова ввода в массив.
-r — отключает спецсимволы обратной косой черты (\).
Если команде read не задан аргумент, вся строка присваивается переменной REPLY:
echo "Hello, world!" | (read; echo "$REPLY")
⚙ Примеры использования:
1⃣ Простая приостановка с ожиданием нажатия любой клавиши:
read -p "Press any key to continue " -n 1
2⃣ Добавление временного ограничения с автоматическим продолжением:
read -p "Press any key to continue (autocontinue in 30 seconds) " -t 30 -n 1
3⃣ Создание цикла для более сложной логики управления выполнением:
REPLY=""
until [ "$REPLY" = "y" ]; do
# executing some command
read "Press 'y' to continue or 'n' to break, any other key to repeat this step" -n 1
if [ "$REPLY" = 'n' ]; then exit 1; fi
done
4⃣ Скрытый ввод (например, пароль):
read -s -p "Введите пароль: " password
echo "Is your password really $password? "
5⃣ Чтение в массив:
read -a words
echo "Первое слово: ${words[0]}"
echo "Второе слово: ${words[1]}"
Если ввести Linux Bash, массив words будет содержать ["Linux", "Bash"]. | 734 |
| 6 | 📚 Стек каталогов в Linux: утилиты pushd, popd и dirs
Стандартная команда cd - позволяет быстро вернуться только в одну предыдущую директорию. Но если в процессе работы нужно параллельно прыгать между 3–5 папочками (например, /var/www/html, /etc/apache2, /etc/ssl/certs и ~/Web/src), возможности cd - быстро заканчиваются.
Для навигации по нескольким путям в Bash и Zsh предусмотрен стек каталогов и три встроенные команды: dirs, pushd и popd.
1️⃣ Просмотр стека: dirs
Стек — это список директорий, сохраненных в памяти текущей сессии терминала.
dirs — выводит текущий стек в одну строку.
dirs -v — выводит стек списком с индексами (номерами):
$ dirs -v
0 /etc/ssl/certs
1 /etc/apache2
2 /var/www/html
3 ~/Web/src
Индекс 0 — это всегда ваша текущая рабочая директория.
2️⃣ Перемещение и добавление: pushd
Команда pushd (push directory) добавляет путь на вершину стека и сразу переходит в него.
↘️ Переход в новую директорию с сохранением в стек:
pushd /etc/apache2
↘️ Переключение между двумя верхними директориями (0 и 1):
Вызов pushd без аргументов меняет местами текущую и предыдущую папку в стеке (аналог cd -):
pushd
↘️ Быстрый переход по номеру из dirs -v:
Чтобы перейти к директории с конкретным номером (без изменения порядка остальных):
pushd +2 — сдвигает стек так, что элемент №2 становится текущим (вершиной).
pushd -0 — переход к самому первому (нижнему) элементу стека.
3️⃣ Удаление из стека: popd
Команда popd (pop directory) удаляет верхний элемент из стека и автоматически перемещает вас в следующий за ним.
popd — удалить текущую директорию из стека и перейти в предыдущую.
popd +1 — удалить конкретный элемент под номером 1, оставаясь в текущей папке.
dirs -c — полностью очистить весь стек.
⚠️ Подводный камень: что делать, если случайно сбил стек обычной cd?
Если вы активно пользовались стеком, а потом случайно выполнили обычную команду cd /some/path, верхний элемент стека (индекс 0) просто перезапишется новым путем, а прошлый путь «вылетит».
Как спасти ситуацию:
Используйте команду pushd -. Она подхватит путь из переменной $OLDPWD (куда вы только что перешли) и вернет предыдущую папку обратно в стек:
$ dirs
~/Web/src /var/www/html /etc/apache2
$ cd /etc/ssl/certs
# Ой, случайно перешли через cd!
$ dirs
/etc/ssl/certs /var/www/html /etc/apache2
# ~/Web/src пропал!
$ pushd -
# Восстанавливаем стек
~/Web/src /etc/ssl/certs /var/www/html /etc/apache2
Лайфхак: Для удобства можно сделать полезный алиас в .bashrc:
alias slurp='pushd - && pushd'
Он возвращает случайно затертую папку в стек и оставляет вас в том каталоге, куда вы перешли через cd.
⚠️ Инструмент исторический. В скриптах — мастхэв, но для интерактивной работы в 2026 году проще настроить Tmux или поставить zoxide. | 639 |
| 7 | Если система тормозит и обычный reboot виснет, можно применить «жёсткую» перезагрузку с помощью ключа -f (force):
sudo reboot -f
Команда мгновенно перезагрузит ядро, минуя стандартную процедуру остановки системных служб через initd/systemd. Используйте осторожно.
#вопросы | 711 |
| 8 | ❓ Как отправить сервер в перезагрузку, даже если система зависла и не откликается на стандартные команды?
Ответ через час.
#вопросы | 696 |
| 9 | Как называются два файла на одном разделе, которые ссылаются на один и тот же inode? | 969 |
| 10 | ⚙️ Как устроена автоматизация задач через cron в Linux
Если вам нужно регулярное выполнение скрипта без ручного запуска, вам поможет cron. Это системный демон (crond), который раз в минуту проверяет свое расписание и запускает запланированные задачи.
Все задачи хранятся в специальной таблице — crontab.
🟪 Синтаксис расписания
Запись состоит из 5 полей времени и самой команды:
* * * * * /path/to/command
│ │ │ │ │
│ │ │ │ └── День недели (0–7, где 0 и 7 — воскресенье)
│ │ │ └──── Месяц (1–12)
│ │ └─────── День месяца (1–31)
│ └──────── Час (0–23)
└────────── Минута (0–59)
🚩Полезные спецсимволы:
* — любое значение (каждую минуту, каждый час и т.д.);
, — перечисление значений (1,15,30 — в 1, 15 и 30 минут);
- — диапазон (1-5 в поле дня недели означает "с понедельника по пятницу");
/ — шаг интервала (*/15 — каждые 15 минут).
🟪 Примеры:
🔎 0 4 * * *
каждый день в 04:00
🔎 */30 9-18 * * 1-5
каждые 30 минут в рабочие часы по будням
🔎 0 0 * * 0
каждое воскресенье в полночь
❗️ Проверить или составить сложное выражение удобнее всего на crontab.guru.
🟪 Практический пример
Допустим, нужно раз в неделю чистить старые логи приложения в папке ~/myapp/logs. Создаем скрипт clear_logs.sh:
#!/bin/bash
# Задаем PATH, чтобы cron гарантированно нашел утилиту find
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
LOG_DIR="$HOME/myapp/logs"
DAYS_TO_KEEP=7
find "$LOG_DIR" -type f -name "*.log" -mtime +$DAYS_TO_KEEP -exec rm -f {} \;
Делаем файл исполняемым:
chmod +x ~/scripts/clear_logs.sh
Открываем редактор crontab:
crontab -e
Добавляем задачу:
0 0 * * 0 /home/user/scripts/clear_logs.sh >> /home/user/scripts/clear_logs.log 2>&1
Что здесь происходит:
0 0 * * 0 — запуск каждое воскресенье в 00:00.
>> .../clear_logs.log — перенаправление стандартного вывода (stdout) в файл лога.
2>&1 — перенаправление ошибок (stderr) туда же, чтобы не потерять информацию о сбоях.
🚩 Базовые команды для работы
crontab -l — посмотреть список текущих задач пользователя
crontab -e — открыть редактор для создания/изменения задач
crontab -r — удалить все задачи текущего пользователя
⚠️ Важно: при редактировании через crontab -e обязательно оставляйте пустую строку в самом конце файла, иначе последняя задача может не выполниться. | 950 |
| 11 | По умолчанию rsync только добавляет и обновляет файлы, но не трогает то, что было удалено в исходной папке. Чтобы получить точную зеркальную копию, добавьте ключ --delete:
rsync -av --delete /src/ /dst/
Будьте внимательны: всё, что есть в /dst/, но отсутствует в /src/, будет безотзывно удалено!
#вопросы | 745 |
| 12 | ❓ Как удалить на приемнике файлы, которых больше нет в источнике, при синхронизации через rsync?
Ответ через час.
#вопросы | 703 |
| 13 | Скрытые файлы - это... | 949 |
| 14 | Как распаковать .tar.gz, .tar.bz2, .tar.xz и .tar.zst в Linux
Для работы с архивами в Linux используется утилита tar.
Многие по привычке заучивают разные флаги сжатия для каждого формата (-z, -j, -J), однако в современном Linux всё гораздо проще.
💡 Главный лайфхак: универсальная команда
Современный GNU tar умеет автоматически определять алгоритм сжатия по содержимому файла. Вам больше не нужно запоминать специальные ключи под каждый формат!
Чтобы распаковать любой архив (.tar, .tar.gz, .tar.bz2, .tar.xz, .tar.zst, .tgz, .txz), достаточно одной универсальной команды:
tar -xvf archive.tar.gz
Разбор базовых ключей:
-x (eXtract) — извлечь файлы из архива
-v (Verbose) — показывать список извлекаемых файлов в консоли (опционально)
-f (File) — указать путь к файлу архива (обязательно должен идти последним перед именем файла)
✔️ Распаковка в конкретную папку (-C)
По умолчанию tar распаковывает содержимое в текущую директорию. Чтобы извлечь файлы в другой каталог, используйте ключ -C (--directory):
tar -xvf archive.tar.xz -C /path/to/target_dir/
⚠️ Указанная директория должна существовать заранее, tar не создает целевую папку автоматически.
✔️ Как сначала посмотреть содержимое архива (без распаковки)?
Чтобы проверить, запакованы ли файлы в отдельную папку или они рассыплются по вашей текущей директории, используйте ключ -t (List):
tar -tvf archive.tar.bz2
✔️ Справочник: специфические ключи сжатия (для истории)
Если вы работаете на старых UNIX-системах или пишете строгие скрипты, явное указание алгоритма сжатия может пригодиться:
.tar.gz / .tgz (Gzip): ключ -z
tar -xvzf archive.tar.gz
.tar.bz2 / .tbz2 (Bzip2): ключ -j
tar -xvjf archive.tar.bz2
.tar.xz / .txz (XZ / LZMA): ключ -J
tar -xvJf archive.tar.xz
.tar.zst / .tzst (Zstandard): ключ --zstd
tar --zstd -xvf archive.tar.zst
📌 Резюме: Забудьте про запоминание флагов -z, -j и -J. Просто используйте tar -xvf для любых .tar.* архивов! | 873 |
| 15 | Посмотреть очередь задач, созданных через at, можно командой atq (или at -l).
Она выведет список с ID задач. Чтобы отменить конкретную задачу из очереди, используйте atrm (или at -d) с указанием её ID:
atrm 4
#вопросы | 750 |
| 16 | ❓ Как посмотреть список всех запланированных однократных задач at и отменить нужную?
Ответ через час.
#вопросы | 720 |
| 17 | JoJo AI — не очередной «чат с нейросетью», а полноценный помощник в привычном Telegram.
Большинство AI-ботов в Telegram устроены одинаково: узкий функционал, сухие ответы, жёсткие команды и ощущение, что общаешься с терминалом, а не с помощником. JoJo AI собран иначе.
Чем JoJo AI отличается от других ботов:
1. Всё в одном чате
Многие боты умеют либо отвечать на вопросы, либо рисовать картинки. JoJo AI совмещает тексты, идеи, объяснения и генерацию изображений — без переключения между разными ботами.
2. Живой диалог вместо набора команд
Многие боты требуют строгий формат: /команда, шаблон, ключевые слова. JoJo AI понимает обычную речь — можно писать так, как пишешь человеку.
3. Человечный тон, а не «робот из FAQ»
Типичный AI-бот выдаёт сухие, шаблонные ответы. JoJo AI ориентирован на понятное, дружелюбное общение — без канцелярита и без ощущения, что читаешь инструкцию к технике.
4. Возможность заработать на рефералах - 70% от их пополнений начисляются вам и вы сразу можете их вывести.
t.me/jojoai99bot | 745 |
| 18 | Для чего нужна популярная в Linux утилита grep? | 824 |
| 19 | ⚡️ Быстрое преобразование текста: 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, чтобы автоматически создать бэкап файла перед изменением. | 889 |
| 20 | Если нужно изменить логин пользователя вместе с переносом его домашней директории, используйте usermod с флагами -l, -d и -m:
sudo usermod -l newname -d /home/newname -m oldname
Флаг -l меняет имя, -d задаёт новый путь к home-каталогу, а -m принудительно перемещает всё содержимое со старого места на новое.
#вопросы | 794 |
