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

По рекламе: @jannytg
@anothertechrock
Download Telegram
Как объединить вывод нескольких команд в один файл и при этом видеть результат на экране?

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

#вопросы
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
ℹ️ Системные логи Linux

Системные логи, которые часто можно найти в директории /var/log на системах Linux, являются важным инструментом для мониторинга и устранения проблем в системе. Вот краткие заметки о некоторых распространённых системных логах:

🟣 syslog: Лог общего назначения, который содержит сообщения от различных системных служб и приложений. Это основной файл журнала, в который поступают сообщения из многих других логов.

🟣 auth.log: Записывает сообщения, связанные с аутентификацией, включая успешные и неудачные попытки входа, изменения паролей и события аутентификации пользователей.

🟣 kern.log: Записывает сообщения, относящиеся к ядру системы, такие как ошибки оборудования, загрузка модулей ядра и другие активности ядра.

🟣 messages: Универсальный лог-файл, который записывает различные системные сообщения, включая старты и завершения работы системы, а также другие события, связанные с системой.

🟣 dmesg: Отображает сообщения из кольцевого буфера ядра, предоставляя реальный временной обзор событий, связанных с ядром, и обнаружением оборудования во время загрузки системы.

🟣 cron: Записывает сообщения, связанные с заданиями cron и запланированными задачами, включая время их выполнения и ошибки, возникшие при их выполнении.

🟣 secure: Записывает сообщения, связанные с безопасностью, включая попытки аутентификации, повышение привилегий и другие события безопасности.

🟣 apache/access.log и apache/error.log: Логи, специфичные для веб-сервера Apache. access.log записывает логи HTTP-доступа, а error.log фиксирует ошибки и предупреждения сервера Apache.

🟣 nginx/access.log и nginx/error.log: Подобные логам Apache, эти логи специфичны для веб-сервера Nginx и записывают события доступа и ошибки.

🟣 mysql/error.log: Записывает ошибки и предупреждения, возникшие у сервера базы данных MySQL, включая ошибки при старте, сбои запросов и сбои баз данных.

Эти логи предоставляют ценную информацию о производительности системы, событиях безопасности и помогают при устранении проблем.

Регулярный мониторинг и анализ этих логов помогают поддерживать здоровье системы и выявлять потенциальные проблемы до того, как они перерастут в серьёзные.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Как посмотреть, какие процессы занимают больше всего памяти?

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

#вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
Чтобы выявить процессы, занимающие больше всего памяти, используйте ps, sort и head:

ps -eo pid,comm,%mem --sort=-%mem | head


Этот конвейер выводит PID, команду и процент использования памяти. Можно заменить %mem на %cpu, чтобы отсортировать по загрузке процессора.

#вопросы
7👍1
Effective group id можно установить при помощи следующих прав доступа:
Anonymous Quiz
11%
0777
17%
2666
20%
4744
8%
1711
43%
Посмотреть ответ