🐧 Linux Junior. Программирование под Linux.
3.21K subscribers
168 photos
2 videos
1 file
100 links
Канал для программистов работающих с Linux.
Почти все Python девелоперы с нами ну и другие тоже подтянутся.

По рекламе: @jannytg
@anothertechrock
Download Telegram
👩‍💻 Команда 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42
🔥 Чем отличается 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 - — дурной тон: запускается лишний процесс, команда громоздкая и вообще не нужная.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍103
Как узнать, какие команды вы используете чаще всего?

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

#вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Чтобы получить топ-10 команд, которые вы вводите чаще всего, посчитайте частоту команд в истории. Это интересно и полезно для самоанализа.

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

#вопросы
👍8🔥2
👩‍💻 Утилита 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 окружения.
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
Docker простыми словами - канал шпаргалка для тех, кто использует Docker в работе программиста, тестировщика или на любой другой позиции.

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

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

Подписывайтесь, комментируйте и предлагайте свой контент в нашем новом сообществе: @justdocker
🔥 Копирование и вставка в 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


Пароль уже в буфере — вставляй куда нужно без вывода на экран.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥61
Как объединить вывод нескольких команд в один файл и при этом видеть результат на экране?

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

#вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
Команда 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

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

#вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3
🦇 Утилита 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
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2🥰1
🔥 Как сделать так, чтобы выполненные команды не записывались в историю

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

1️⃣ Пропустить конкретную команду

Самый простой и распространённый способ — поставить пробел в начале команды.

 ls -la # Перед ls стоит пробел


⚠️ Важно: это работает, если переменная HISTCONTROL содержит ignorespace.
Проверить можно так:

echo $HISTCONTROL


Если видите что-то вроде ignoredups:ignorespace или ignoreboth, значит всё ок. Если нет — можно добавить:

export HISTCONTROL=ignoredups:ignorespace


Теперь все команды, начинающиеся с пробела, не попадут в ~/.bash_history.

2️⃣ Не сохранять конкретную команду с помощью HISTIGNORE

Можно задать шаблоны, которые Bash не будет сохранять вовсе.

export HISTIGNORE="ls:pwd:exit"


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

Шаблон может содержать *:

export HISTIGNORE="ls *:cd *"


Всё, что начинается с ls или cd, будет игнорироваться.

3️⃣ Удалить команду из истории

Если команда уже выполнена, можно стереть её "задним числом". Для этого можно сперва посмотреть ее номер в истории, а затем удалить, указав этот номер:

history
history -d <номер>


⚠️ При работе в Bash история выполненных команд хранится в двух местах:

🔴 В памяти — это текущая сессия (то, что вы видите, выполняя history)
🔴 В файле ~/.bash_history — это сохранённая история, которая перезаписывается при выходе из shell.

При удалении команды из истории с помощью history -d <номер> Bash удаляет запись с указанным номером только из памяти. Если на этом остановиться и просто выйти из терминала, старая история из файла может перезаписать изменения, и команда вернётся.

Чтобы принудительно обновить файл на диске после удаления команды из истории, используйте опцию -w (write):

history -w


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

Чтобы избежать появления в истории самой команды history -d, можно объединить несколько команд в одну строку:

history -d $((HISTCMD-1)); history -w

Т.о., полностью удаление команды будет выглядеть так:

history  # Найти номер команды
history -d <номер> # Удалить команду по номеру
history -d $((HISTCMD-1)); history -w # Удалить из истории саму команду history -d и перезаписать файл истории


4️⃣ Отключить запись истории целиком

Если нужно поработать "в тени", можно временно отключить запись:

set +o history   # выключить запись в историю
set -o history # включить обратно
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍21
Как быстро узнать, где находится исполняемый файл любой команды?

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

#вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
Чтобы посмотреть, где находится исполняемый файл любой команды, используйте which:

which python


Команда покажет полный путь к программе, которую запускает система при вводе этого имени.

#вопросы
👍21
👩‍💻 Команда 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"].
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8