3309
Канал для программистов работающих с Linux. Почти все Python девелоперы с нами ну и другие тоже подтянутся. По рекламе: @jannytg @anothertechrock
💡 Использование опций команды apt-get для очистки системы
Большинство из нас, работающих с системами на базе Debian, регулярно используют команду apt-get для установки и обновления пакетов. Но как часто мы задумываемся об очистке системы?
Давайте рассмотрим три полезные команды для очистки ненужных файлов: apt-get clean, apt-get autoclean и apt-get autoremove.
1️⃣ apt-get clean
Команда apt-get clean очищает локальный репозиторий от извлеченных файлов пакетов, находящихся в каталоге /var/cache/apt/archives/. Она удаляет все файлы пакетов, кроме файлов блокировки и пустых подкаталогов.
Эта команда полезна для освобождения дискового пространства, особенно если вы часто устанавливаете и удаляете пакеты.
Например, до выполнения команды apt-get clean в каталоге /var/cache/apt/archives/ могут находиться следующие файлы:
/var/cache/apt/archives/db6.1-util_6.1.27+dfsg1-0.7ubuntu2_amd64.deb
/var/cache/apt/archives/db-util_2%3a6.121~exp1ubuntu1_all.deb
/var/cache/apt/archives/lock
/var/cache/apt/archives/postfix_3.4.6-2ubuntu2_amd64.deb
/var/cache/apt/archives/sasl2-bin_2.2.25+dfsg-1build2_amd64.deb
apt-get autoclean похожа на clean, но она удаляет только те пакеты, которые больше не могут быть загружены из репозиториев и, следовательно, больше не нужны. Это предотвращает переполнение кэша устаревшими файлами.sudo apt-get autoclean
apt-get autoremove удаляет пакеты, которые были установлены автоматически как зависимости для других пакетов, но теперь больше не требуются. sudo apt-get autoremove
The following packages were automatically installed and are no longer required:
g++-8 gir1.2-mutter-4 libapache2-mod-php7.2 libcrystalhd3
libdouble-conversion1 libgnome-desktop-3-17 libigdgmm5 libllvm8
liblouisutdml8 libmutter-4-0 libmysqlclient20 libpoppler85 linsydc++-8-dev
libtagc0 libvpx5 libx265-165 php7.2 php7.2-cli php7.2-common php7.2-json
php7.2-opcache php7.2-readline
Use 'sudo apt-get autoremove' to remove them.
Комбинация 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:] — все видимые символы.
👩💻 Команда 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?
Ответ через час.
#вопросы