3309
Канал для программистов работающих с Linux. Почти все Python девелоперы с нами ну и другие тоже подтянутся. По рекламе: @jannytg @anothertechrock
👩💻 Команда gzip в Linuxgzip — это стандартная утилита в Linux для сжатия и распаковки файлов. Она уменьшает размер файлов, экономит место и ускоряет передачу данных по сети. Поддерживает разные уровни сжатия (от -1 — быстро до -9 — максимально).gzip применяется для уменьшения размеров логов и бэкапов, упаковки результатов сборки, сжатия данных перед передачей по сети, автоматических задач (cron, CI/CD).
В этом посте мы рассмотрим несколько сценариев использования gzip.
🐧 Сжатие с оптимизацией. Чтобы сжать файл с максимальной степенью сжатия, выполните:
gzip -9 имя_файла
gzip может сжимать данные не только из файлов, но и через стандартный ввод. Например, можно сжать вывод другой команды:mysqldump имя_базы_данных | gzip > backup.sql.gz
pigz имя_файла
pigz поддерживает все те же параметры, что и gzip, но работает быстрее на многоядерных системах.gzip -l имя_файла.gz
-v:gzip -lv имя_файла.gz
-r:gzip -r имя_каталога
gzip -dr имя_каталога
gzip используется вместе с командой tar. Например:tar -czf архив.tar.gz имя_каталога
-c создает архив, -z указывает на использование сжатия через gzip, а -f определяет имя файла архива. tar -xzf архив.tar.gz
cat /var/log/syslog | gzip -9 | nc -w 3 192.168.1.10 8888
❓ Как быстро узнать, какой файл в каталоге самый большой?
Ответ через час.
#вопросы
🎥 Вебинар по Linux: С Windows на Linux: первый шаг системного администратора
На вебинаре вы узнаете:
- В чем принципиальные отличия Linux и Windows
- Какие базовые команды нужны для работы в консоли Linux
- Как устроена файловая система Linux и где искать нужные файлы
В результате вебинара вы:
- Научитесь выполнять базовые команды в терминале Linux
- Поймете структуру файловой системы и принципы работы с файлами
- Сможете устанавливать программы и управлять пакетами
- Разберетесь, как адаптироваться к Linux после Windows
👉 Для участия зарегистрируйтесь: https://vk.cc/cUMPNt
🎁 Все участники вебинара получат специальные условия на полное обучение курса "Administrator Linux. Basic"
Курс создан для тех, кто хочет перейти от случайного опыта к уверенной работе с сервером. Вы освоите основы операционной системы, научитесь работать в Bash, поймёте, как устроены сети, научитесь запускать веб-сервисы, работать с MySQL, Docker, Git, Prometheus и Grafana. Это фундамент, без которого невозможен дальнейший рост.
👉 Повысить свои навыки: https://vk.cc/cUMPUk
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Утилита xargs в Unix-подобных операционных системах считывает данные из стандартного ввода и использует их для построения и выполнения команд. С ее помощью можно, например, удалить список файлов, полученный от другой команды:
ls *.log | xargs rm
find, grep и многими другими.rm:rm *.log
rm file{1..100}.txt
xargs тоже может пригодиться. Например, можно удалить только те файлы, имена которых содержат определённое слово:ls | grep "temp" | xargs rm
fzf, можно удалять файлы выборочно:ls | fzf -m | xargs -r rm
xargs их удаляет. Очень удобно.
🔥 Расширенные права доступа (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::---
setfacl -m u:john:r file.txt
setfacl -m g:designers:rw file.txt
setfacl -x u:john file.txt
setfacl -b file.txt
setfacl -d -m g:team:rw /srv/docs
mask в выводе getfacl — это "ограничитель" максимальных разрешений ACL. Даже если пользователю выданы права rwx, но в качестве mask стоит rw-, то выполнение будет заблокировано.setfacl -m m:rw file.txt
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.
Чтобы выявить процессы, занимающие больше всего памяти, используйте ps, sort и head:
ps -eo pid,comm,%mem --sort=-%mem | head
%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, включая ошибки при старте, сбои запросов и сбои баз данных.
Эти логи предоставляют ценную информацию о производительности системы, событиях безопасности и помогают при устранении проблем.
Регулярный мониторинг и анализ этих логов помогают поддерживать здоровье системы и выявлять потенциальные проблемы до того, как они перерастут в серьёзные.
Чтобы посмотреть, где находится исполняемый файл любой команды, используйте which:
which python
🔥 Как сделать так, чтобы выполненные команды не записывались в историю
В Linux есть несколько способов не записывать команду в историю — в зависимости от того, нужно ли исключить одну конкретную команду, определённый тип команд или вообще ничего не сохранять в истории.
1️⃣ Пропустить конкретную команду
Самый простой и распространённый способ — поставить пробел в начале команды.
ls -la # Перед ls стоит пробел
ignorespace.echo $HISTCONTROL
ignoredups:ignorespace или ignoreboth, значит всё ок. Если нет — можно добавить:export HISTCONTROL=ignoredups:ignorespace
export HISTIGNORE="ls:pwd:exit"
*:export HISTIGNORE="ls *:cd *"
ls или cd, будет игнорироваться.history
history -d <номер>
history)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 и перезаписать файл истории
set +o history # выключить запись в историюЧитать полностью…
set -o history # включить обратно
Команда tee в Linux читает стандартный ввод и одновременно выводит его на экран и записывает в файл(ы), что позволяет просматривать вывод и сохранять его для последующего использования.
ls -lh | tee files.txt
tee затирает файл. Чтобы дописать в конец, нужно использовать опцию -a.tee имеет большой потенциал использования.sudo echo "text" > /etc/config
echo "text" | sudo tee /etc/config
tee запускается с правами root и записывает корректно.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 вставит что-то другое.
✔️ Команда xclipxclip — утилита, которая позволяет работать с буферами обмена прямо из терминала. Она умеет читать данные из stdin и записывать их в нужный буфер, а также доставать оттуда содержимое.
⚙️ Копирование из файла
xclip < notes.txt
xclip -selection clipboard < notes.txt
ls | grep log | xclip -selection clipboard
xclip -selection clipboard -o
xclip -selection clipboard -o | wc -w
alias ccopy="xclip -sel c"
alias cpaste="xclip -sel c -o"
echo "important text" | ccopy
cpaste
xclip выходит далеко за рамки простого копирования текста. Вот несколько примеров, где он действительно экономит время и клики:grep "ERROR" /var/log/syslog | tail -n 5 | xclip -sel c
cat build.log | grep version | xclip -sel c
cpaste
find . -type f -name "*.sh" | head -n 1 | xclip -sel c
vim $(cpaste)
grep "API_KEY" .env | cut -d= -f2 | xclip -sel c
generate-password | xclip -sel c
👩💻 Утилита symlinkssymlinks — это консольный инструмент в 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 — показывать подробный отчет (выводит все ссылки)symlinks -v /usr/local/bin
sudo symlinks -rd /opt/
symlinks -rv /home/user/projects
❓ Как узнать, какие команды вы используете чаще всего?
Ответ через час.
#вопросы
👩💻 Команда yes
Команда yes в Linux — это простая утилита, которая бесконечно выводит строку (по умолчанию y) в стандартный вывод.
Эта команда часто применяется для автоматизации скриптов или тестирования.
⚙️ Синтаксис:
$ yes [строка]
⚙️ Примечания:y.yes бесконечно генерирует вывод, поэтому почти всегда ее используют вместе с пайпами (|) или ограничителями (head).y можно автоматизировать. Здесь все запросы будут автоматически подтверждаться y:yes | apt-get install package
no. Здесь на все запросы ответ будет n:yes n | command
yes можно использовать для загрузки процессора. Этот процесс будет сильно нагружать CPU, пока его не остановить (Ctrl+C):yes > /dev/null
yes "строка" | head -n 1000 > file.txtЧитать полностью…
❓ Как очистить текст от нечитаемых символов, например, при копировании из PDF?
Ответ через час.
#вопросы
Комбинация find, du и sort позволит найти 10 самых "тяжёлых" файлов с путями и размерами.
find . -type f -exec du -h {} + | sort -rh | head -n 10
🔥 Разница между su и su -
Ни для кого не секрет, что Linux - система, с которой можно работать от разных пользователей. Сегодня я запускаю сессию от Паши, завтра от Пети.
Когда вы в сессии открываете терминал, стартует оболочка, которая подстраивает окружение под конкретного юзера: выполняет скрипты, определяет переменные.
Бывает, приходится, работая в сессии одного пользователя, переключиться на другого, например, чтобы использовать ресурсы, ограниченные правами доступа. Для этого мы используем команду su (substitute user), которая позволяет сменить пользователя в текущей оболочке:
$ su vasya
$ export USER1VAR="vasya"
$ su xoadmin
$ printenv | grep USER
USER=xoadmin
USER1VAR=vasya
su -: $ su - xoadmin
su -, наш рабочий каталог переключается на домашний для целевого пользователя. Мелочь, но факт: $ pwdЧитать полностью…
/home/vasya/Music
$ su - xoadmin
$ pwd
/home/xoadmin
👩💻 Команды apt и apt-get
Это две команды, предназначенные для установки, удаления и обновления программного обеспечения на системе.
✅ apt-getapt-get - это одна из первых команд, использовавшихся для управления пакетами в системах Debian и Ubuntu.
🟩 Преимущества apt-get:
✔️ Широкая поддержка. apt-get является стандартной командой для управления пакетами в Debian и Ubuntu, что делает ее широко распространенной и надежной.
✔️ Подробные выводы. При выполнении команд apt-get выводит подробную информацию о процессе установки или удаления пакета, что позволяет пользователям следить за процессом.
🟧 Недостатки apt-get:
✔️ Медленное обновление индексов пакетов. apt-get иногда может работать медленно из-за обновления индексов пакетов перед выполнением команды.
✔️ Неудобство в использовании. Использование apt-get требует ввода длинных команд, что может быть неудобно для новичков.
✅ aptapt - это более новая команда, предназначенная для упрощения управления пакетами в системах Debian и Ubuntu.
Она является частью более современного инструмента APT (Advanced Package Tool), который объединяет несколько функций в одном интерфейсе.
🟩 Преимущества apt:
✔️ Упрощенное использование. apt предоставляет более простой и интуитивно понятный интерфейс для управления пакетами, что делает его более удобным в использовании.
✔️ Более быстрое обновление индексов пакетов. apt автоматически обновляет индексы пакетов перед выполнением команды, что уменьшает время ожидания пользователя.
🟧 Недостатки apt:
✔️ Менее подробные выводы. При выполнении команд apt вывод может быть менее подробным по сравнению с apt-get, что затрудняет отслеживание процесса установки или удаления пакета.
✔️ Ограниченная поддержка сторонних репозиториев. apt может иметь ограниченную поддержку сторонних репозиториев по сравнению с apt-get, хотя это не так часто встречается.
❓ Как удалить список файлов, сгенерированный другой командой?
Ответ через час.
#вопросы
👩💻 Полезные опции команды curl
Команда curl — одна из самых мощных и часто используемых утилит в Linux. Она предназначена для отправки запросов по различным интернет-протоколам (HTTP, HTTPS, FTP и др.) прямо из терминала.
В большинстве дистрибутивов curl уже предустановлен.
⚙️ Примеры использования
⏺Указание времени выполнения команды
Некоторые операции выполняются бесконечно, что может привести к зависанию системы. Чтобы прервать выполнение команды cURL по истечении определенного времени, можно установить таймер (время указывается в секундах):
$ curl -m 60 example.com
Также есть возможность указать, в течении какого времени держать соединение активным. Это позволит избежать бесконечных попыток соединения с недоступным узлом. $ curl --connect-timeout 60 example.com
-u. $ curl -u username:password ftp://example.com
Данную опцию можно использовать с любым протоколом, но FTP является самым распространённым для простой передачи файлов.$ curl -u username:password ftp://example.com/readme.txt
curl использует HTTP-прокси, но можно указать и другие. Чтобы направить трафик через прокси, используется ключ -x.$ curl -x 192.168.1.1:8080 http://example.com
Данная команда обязует cURL подключиться к прокси по адресу 192.168.1.1 на порту 8080 перед обращением на example.com$ curl -x 192.168.1.1:8080 ftp://example.com/readme.txtЧитать полностью…
❓ Как посмотреть, какие процессы занимают больше всего памяти?
Ответ через час.
#вопросы
👩💻 Команда read в Linux
Команда read в Linux используется для чтения ввода от пользователя или из стандартного потока и сохранения его в переменные. Она особенно полезна в скриптах, когда нужно запросить у пользователя данные.
⚙️ Синтаксис:
read [опции] переменные
-p "текст" — выводит приглашение перед вводом.-t <сек> — ограничение по времени (таймаут ожидания ввода).-n <число> — считать только указанное количество символов (без ожидания Enter).-s — скрытый ввод (подходит для паролей).-a массив — сохраняет слова ввода в массив.-r — отключает спецсимволы обратной косой черты (\).read не задан аргумент, вся строка присваивается переменной REPLY:echo "Hello, world!" | (read; echo "$REPLY")
read -p "Press any key to continue " -n 1
read -p "Press any key to continue (autocontinue in 30 seconds) " -t 30 -n 1
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
read -s -p "Введите пароль: " password
echo "Is your password really $password? "
read -a words
echo "Первое слово: ${words[0]}"
echo "Второе слово: ${words[1]}"
words будет содержать ["Linux", "Bash"].
Читать полностью…
❓ Как быстро узнать, где находится исполняемый файл любой команды?
Ответ через час.
#вопросы
🦇 Утилита batbat — это современная замена классической команды cat, которая выводит содержимое файлов, но делает это намного удобнее и красивее.
🦇 Достоинства bat:
✔️ Выводит содержимое файлов с подсветкой синтаксиса (как в редакторах кода)
✔️ Показывает нумерацию строк
✔️ Умеет подсвечивать различия при сравнении файлов
✔️ Поддерживает постраничный просмотр (через less)
✔️ Может заменять cat в привычных командах
🦇 Установка:
sudo apt install bat # Ubuntu / Debian
sudo dnf install bat # Fedora
sudo pacman -S bat # Arch Linux
bat часто используют:
❓ Как объединить вывод нескольких команд в один файл и при этом видеть результат на экране?
Ответ через час.
#вопросы
Docker простыми словами - канал шпаргалка для тех, кто использует Docker в работе программиста, тестировщика или на любой другой позиции.
Первый канал по Docker. Поискав в телеграме каналы по docker и не найдя ничего, я решил обьединить контент в одном месте.
По содержанию в канале:
- вопросы с собеседований
- команды докера
- книги
- тесты для проверки ваших знаний
- обучающие видео
- чат для обсуждения
Подписывайтесь, комментируйте и предлагайте свой контент в нашем новом сообществе: @justdocker
Чтобы получить топ-10 команд, которые вы вводите чаще всего, посчитайте частоту команд в истории. Это интересно и полезно для самоанализа.
history | awk '{print $2}' | sort | uniq -c | sort -nr | head
🔥 Чем отличается su от sudo
Обе команды связаны с повышением прав, но делают это по-разному.
📌 Основная идеяsu — substitute user ➡️ «заменить пользователя»sudo — substitute user and do ➡️ «выполнить как другой пользователь»
⚙️ Как работает susu переключает вас на другого пользователя внутри текущей сессии. Для этого нужно знать пароль целевой учётки, а не своей.
user@dev:/$ su john
Пароль: ****
john@dev:/$ whoami
john
su без дефиса, как в этом примере, просто меняет пользователя, но оставляет окружение старого. О su - мы еще поговорим.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 - john.ssh user@pc
export a="test"
su john
echo $a
# test
$a сохранилась.su - john
echo $a
# ничего не выводит
su — просто смена пользователя, старое окружение остаётся;su - — полная имитация входа в систему под новым пользователем.sudo тоже может запустить shell с разным уровнем "чистоты" окружения:sudo -s # shell с правами root, окружение текущее
sudo -i # shell как при входе под root (загружается /root/.profile и т.п.)
sudo -i.sudo -i ≈ sudo su -sudo su - — дурной тон: запускается лишний процесс, команда громоздкая и вообще не нужная.
Читать полностью…
Для замены, замещения или удаления символов из стандартного ввода используется консольная команда tr. С ее помощью можно удалить нечитаемые символы:
tr -cd '\11\12\15[:print:]' < bad.txt > clean.txt
-c — инвертирует набор, т.е. все символы, не входящие в указанный диапазон, будут выбраны-d — удаляет выбранные символы (вместо замены)\11, \12, \15 — это табуляция (\t), перевод строки (\n) и возврат каретки (\r), записанные в восьмеричном (octal) виде. Каждое число — это ASCII-код символа.[:print:] — все видимые символы.
🔥 Расширение фигурных скобок (brace expansion)
Фигурные скобки {} в Bash позволяют разворачивать выражения в последовательность аргументов.
Простой пример:
echo {1..10}
# 1 2 3 4 5 6 7 8 9 10echo {10..1}
# 10 9 8 7 6 5 4 3 2 1echo {1..501..100}
# 1 101 201 301 401 501echo {501..1..100}
# 501 401 301 201 101 1seq, фигурные скобки умеют работать с буквами:echo {A..P}
# A B C D E F G H I J K L M N O Pecho {A..P..2}
# A C E G I K M Omkdir ~/Sources/{test1,test2,test3}diff {orig,patched}/path/to/prog.ccp -p file.txt{,.bak}
# создаст file.txt и file.txt.bak{} ломают расширение!echo file{1.. 2}.txt # не сработаетtr:echo {A..P..2} | tr -d " "
# ACEGIKMOalias nth="echo {A..Z} | tr -d ' ' | cut -c"
nth 10
# J[] — это сопоставление с шаблоном имён файлов, а фигурные {} — просто генерация последовательности.ls file[1-9].txt
# отберёт существующие файлы
ls file{1..9}.txt
# попытается вывести все файлы последовательности, даже если их нетtouch {a,b,c}.{hpp,cpp}
# создаст a.cpp a.hpp b.cpp b.hpp c.cpp c.hppmkdir -p {source,help{/pages,/yelp,/images}}.Читать полностью…
├── help
│ ├── images
│ ├── pages
│ └── yelp
└── source