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

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

@juniorlinux

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

По рекламе: @jannytg
@anothertechrock
Subscribers
3.08K
Photos
159
Videos
2
Links
92
Recent Posts 20 shown
Post #592 294
⚙️ Как устроена автоматизация задач через 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 обязательно оставляйте пустую строку в самом конце файла, иначе последняя задача может не выполниться.
  • 👍 2
Post #591 532
По умолчанию rsync только добавляет и обновляет файлы, но не трогает то, что было удалено в исходной папке. Чтобы получить точную зеркальную копию, добавьте ключ --delete:

rsync -av --delete /src/ /dst/

Будьте внимательны: всё, что есть в /dst/, но отсутствует в /src/, будет безотзывно удалено!

#вопросы
Post #590 519
❓ Как удалить на приемнике файлы, которых больше нет в источнике, при синхронизации через rsync?

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

#вопросы
Post #588 827
Как распаковать .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.* архивов!
  • ❤ 4
  • 🔥 2
  • 🤩 2
Post #587 750
Посмотреть очередь задач, созданных через at, можно командой atq (или at -l).

Она выведет список с ID задач. Чтобы отменить конкретную задачу из очереди, используйте atrm (или at -d) с указанием её ID:

atrm 4

#вопросы
  • 👍 1
Post #586 720
❓ Как посмотреть список всех запланированных однократных задач at и отменить нужную?

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

#вопросы
  • 🤔 1
Post #585 745
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
  • ❤ 6
  • 🤔 2
  • 👍 1
  • 🙏 1
Post #584 882
  • 👍 1
  • 🥰 1
Post #583 969
⚡️ Быстрое преобразование текста: 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, чтобы автоматически создать бэкап файла перед изменением.
  • ❤ 3
  • 🔥 2
  • 👌 1
  • 💯 1
Post #582 910
Если нужно изменить логин пользователя вместе с переносом его домашней директории, используйте usermod с флагами -l, -d и -m:

sudo usermod -l newname -d /home/newname -m oldname

Флаг -l меняет имя, -d задаёт новый путь к home-каталогу, а -m принудительно перемещает всё содержимое со старого места на новое.

#вопросы
  • ❤ 12
Post #581 828
❓ Как изменить имя пользователя и переименовать его домашний каталог одной командой?

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

#вопросы
Post #579 1.15K
🔥 Смена владельца и группы файлов в 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.
  • ❤ 2
Post #578 1.07K
  • ❤ 1
Post #577 1.18K
🔥 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 закроется при завершении процесса.
  • 👍 2
Post #575 1.15K
🔗 Жесткие ссылки 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


Символьная ссылка указывает на путь, а не на данные. Удаление ссылки не затрагивает исходный файл.
  • 🔥 3
Post #573 1.35K
👩‍💻 Утилита tldr

Проект tldr-pages — это сборник поддерживаемых сообществом справочных страниц для инструментов командной строки, который призван стать более простым и доступным дополнением к традиционным справочным страницам man.

TL; DR - это аббревиатура, используемая в Интернете, чтобы сказать, что публикация, статья, комментарий или страница руководства слишком длинные, и поэтому написавший "TL; DR" их не читал.

Команда tldr позволяет выводить максимально сжатую сводку информации по консольным утилитам (назначение и список самых популярных опций).

⚙️ Установка

sudo apt install tldr  # Для Ubuntu/Debian
sudo pacman -S tldr # Для Arch


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

tldr tar


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

📱 Ссылка на GitHub Tldr
  • 👍 2
Older posts →

About this channel

How can I read @juniorlinux without a Telegram account?
TGViewer shows the public web preview Telegram publishes for 🐧 Linux Junior. Программирование под Linux.: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does 🐧 Linux Junior. Программирование под Linux. have?
🐧 Linux Junior. Программирование под Linux. (@juniorlinux) has 3.08K subscribers on Telegram, refreshed roughly every 30 minutes.
Does 🐧 Linux Junior. Программирование под Linux. know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →