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

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

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

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

نمایش بیشتر
3 098
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-37 روز
-1030 روز
آرشیو پست ها
🔥 Расширенные права доступа (ACL) в Linux Обычная модель прав в Linux проста: есть владелец, группа и все остальные. Для большинства случаев этого хватает, но не всегда. А что если нужно, чтобы user1 и user2 имели разные права к одному и тому же файлу? Или чтобы у определённого пользователя был доступ только к подкаталогу? Тут на сцену выходит ACL — Access Control List. ✔️ Что такое ACL ACL позволяет задавать права не только для владельца и группы, а для любого пользователя или группы. Это похоже на “дополнительный слой” поверх обычных разрешений. 🔍 Проверка наличия ACL Посмотрим на файл:
ls -l report.txt
-rw-r-----+ 1 marina staff 2048 Oct 22 11:20 report.txt
Плюсик + после прав (rw-r-----+) говорит, что у файла есть ACL. Подробнее:
getfacl report.txt
Результат может выглядеть так:
# file: report.txt
# owner: marina
# group: staff
user::rw-
user:john:r--
group::r--
mask::r--
other::---
Мы видим, что кроме владельца и группы, есть отдельная запись для пользователя john. ✏️ Назначение ACL Выдать пользователю john права на чтение файла:
setfacl -m u:john:r file.txt
Выдать группе designers права на запись:
setfacl -m g:designers:rw file.txt
❌ Удалить конкретную запись ACL:
setfacl -x u:john file.txt
Сбросить все расширенные права (оставив только базовые chmod-права):
setfacl -b file.txt
🗂 Установка ACL по умолчанию для каталога ACL можно "прикрепить" к каталогу, чтобы новые файлы наследовали права автоматически. Пример: всем пользователям группы team разрешить читать и писать в каталог /srv/docs:
setfacl -d -m g:team:rw /srv/docs
Теперь любой файл, созданный внутри /srv/docs, получит те же права. 🟢 Полезно знать mask в выводе getfacl — это "ограничитель" максимальных разрешений ACL. Даже если пользователю выданы права rwx, но в качестве mask стоит rw-, то выполнение будет заблокировано. Маску можно менять отдельно:
setfacl -m m:rw file.txt
⚙️ Пример из жизни Пусть в /var/www/project лежит сайт, над которым работают два человека: admin и editor. Админ имеет полный доступ, а редактор — только чтение и запись контента:
chown -R admin:admin /var/www/project
setfacl -R -m u:editor:rw /var/www/project/content
setfacl -d -m u:editor:rw /var/www/project/content
Первая команда setfacl назначает права доступа для уже существующих файлов и каталогов в /var/www/project/content. Вторая устанавливает шаблон прав, который унаследуют будущие файлы и папки, созданные в /var/www/project/content. Теперь editor сможет редактировать файлы в /content (в том числе и все созданные в дальнейшем), но не затронет код приложения.

👩‍💻 Полезные опции команды curl Команда curl — одна из самых мощных и часто используемых утилит в Linux. Она предназначена для отправки запросов по различным интернет-протоколам (HTTP, HTTPS, FTP и др.) прямо из терминала. В большинстве дистрибутивов curl уже предустановлен. ⚙️ Примеры использованияУказание времени выполнения команды Некоторые операции выполняются бесконечно, что может привести к зависанию системы. Чтобы прервать выполнение команды cURL по истечении определенного времени, можно установить таймер (время указывается в секундах):
$ curl -m 60 example.com
Также есть возможность указать, в течении какого времени держать соединение активным. Это позволит избежать бесконечных попыток соединения с недоступным узлом. Эта опция тоже в качестве аргумента принимает значение в секундах. А команда выглядит так:
$ curl --connect-timeout 60 example.com
Указание логина и пароля Утилита cURL позволяет указывать имя пользователя и пароль при подключении. Чаще всего это нужно при аутентификации на FTP-сервере. Для этого используется ключ -u.
$ curl -u username:password ftp://example.com
Данную опцию можно использовать с любым протоколом, но FTP является самым распространённым для простой передачи файлов. Если нужно скачать файл, запускаем ту же команду, только указываем полный путь к нужному документу:
$ curl -u username:password ftp://example.com/readme.txt
Использование прокси cURL можно указать, чтобы подключение выполнялось через прокси-сервер. По умолчанию curl использует HTTP-прокси, но можно указать и другие. Чтобы направить трафик через прокси, используется ключ -x.
$ curl -x 192.168.1.1:8080 http://example.com
Данная команда обязует cURL подключиться к прокси по адресу 192.168.1.1 на порту 8080 перед обращением на example.com Прокси можно использовать и с другими протоколами. Ниже показан пример использования прокси-сервера для получения файла с FTP-сервера.
$ curl -x 192.168.1.1:8080 ftp://example.com/readme.txt

Effective group id можно установить при помощи следующих прав доступа:
Anonymous voting

Чтобы выявить процессы, занимающие больше всего памяти, используйте ps, sort и head:
ps -eo pid,comm,%mem --sort=-%mem | head
Этот конвейер выводит PID, команду и процент использования памяти. Можно заменить %mem на %cpu, чтобы отсортировать по загрузке процессора. #вопросы

Как посмотреть, какие процессы занимают больше всего памяти? Ответ через час. #вопросы

ℹ️ Системные логи 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, включая ошибки при старте, сбои запросов и сбои баз данных. Эти логи предоставляют ценную информацию о производительности системы, событиях безопасности и помогают при устранении проблем. Регулярный мониторинг и анализ этих логов помогают поддерживать здоровье системы и выявлять потенциальные проблемы до того, как они перерастут в серьёзные.

👩‍💻 Команда 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"].

Чтобы посмотреть, где находится исполняемый файл любой команды, используйте which:
which python
Команда покажет полный путь к программе, которую запускает система при вводе этого имени. #вопросы

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

🔥 Как сделать так, чтобы выполненные команды не записывались в историю В 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   # включить обратно

🦇 Утилита 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

Команда 2>&1 > abc
Anonymous voting

Команда 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
Так можно просматривать пинг в реальном времени и получить лог-файл после остановки. #вопросы

Как объединить вывод нескольких команд в один файл и при этом видеть результат на экране? Ответ через час. #вопросы

🔥 Копирование и вставка в 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
Пароль уже в буфере — вставляй куда нужно без вывода на экран.

Docker простыми словами - канал шпаргалка для тех, кто использует Docker в работе программиста, тестировщика или на любой дру
Docker простыми словами - канал шпаргалка для тех, кто использует Docker в работе программиста, тестировщика или на любой другой позиции. Первый канал по Docker. Поискав в телеграме каналы по docker и не найдя ничего, я решил обьединить контент в одном месте. По содержанию в канале: - вопросы с собеседований - команды докера - книги - тесты для проверки ваших знаний - обучающие видео - чат для обсуждения Подписывайтесь, комментируйте и предлагайте свой контент в нашем новом сообществе: @justdocker