Открываем удалённую оболочку без SSH
Если на обоих компьютерах есть
На первом компьютере:
На втором:
Ты получишь удалённую оболочку.
Если на обоих компьютерах есть
netcat (nc):На первом компьютере:
nc -lvnp 4444 -e /bin/bashНа втором:
nc <IP> 4444Ты получишь удалённую оболочку.
Используй это только в своей сети и на своих устройствах. На многих современных версиях nc опция -e отключена именно из соображений безопасности.
Узнать, что мешает ноутбуку экономить заряд
Если аккумулятор разряжается слишком быстро, стоит посмотреть, какие процессы постоянно нагружают процессор.
Для этого существует утилита:
• процессы, чаще всего пробуждающие процессор;
• устройства, потребляющие больше всего энергии;
• рекомендации по снижению энергопотребления.
Например, можно обнаружить, что какое-то приложение будит процессор сотни раз в секунду, из-за чего он не переходит в режим энергосбережения.
Кроме мониторинга,
Эта команда включает рекомендуемые энергосберегающие настройки до следующей перезагрузки.
Если аккумулятор разряжается слишком быстро, стоит посмотреть, какие процессы постоянно нагружают процессор.
Для этого существует утилита:
sudo powertop
powertop анализирует активность системы и показывает:• процессы, чаще всего пробуждающие процессор;
• устройства, потребляющие больше всего энергии;
• рекомендации по снижению энергопотребления.
Например, можно обнаружить, что какое-то приложение будит процессор сотни раз в секунду, из-за чего он не переходит в режим энергосбережения.
Кроме мониторинга,
powertop умеет автоматически применять некоторые оптимизации: sudo powertop --auto-tuneЭта команда включает рекомендуемые энергосберегающие настройки до следующей перезагрузки.
Создать именованный канал между программами
В Linux существует специальный тип файлов — FIFO (именованный канал). Он позволяет двум независимым процессам обмениваться данными так, будто они читают и записывают обычный файл.
Создать такой канал можно одной командой:
В одном терминале:
Во втором:
Сообщение мгновенно появится в первом терминале.
В отличие от обычных файлов, данные не сохраняются на диске — они сразу передаются между процессами.
В Linux существует специальный тип файлов — FIFO (именованный канал). Он позволяет двум независимым процессам обмениваться данными так, будто они читают и записывают обычный файл.
Создать такой канал можно одной командой:
mkfifo mypipeВ одном терминале:
cat mypipeВо втором:
echo "Привет!" > mypipeСообщение мгновенно появится в первом терминале.
В отличие от обычных файлов, данные не сохраняются на диске — они сразу передаются между процессами.
Посмотреть, какие процессы используют сеть
Если интернет работает медленно или вы хотите узнать, какая программа подключается к сети, используйте:
Команда покажет открытые TCP и UDP-порты, а также процессы, которым они принадлежат.
Например:
В отличие от устаревшей
Если интернет работает медленно или вы хотите узнать, какая программа подключается к сети, используйте:
ss -tulpnКоманда покажет открытые TCP и UDP-порты, а также процессы, которым они принадлежат.
Например:
Netid State Local Address:Port
tcp LISTEN 0.0.0.0:22 users:(("sshd",pid=742))
tcp LISTEN 127.0.0.1:5432 users:(("postgres",pid=931))В отличие от устаревшей
netstat, утилита ss работает быстрее и уже входит в большинство современных дистрибутивов.Посмотреть историю изменений файла через auditd
Linux умеет отслеживать, кто и когда изменял определённые файлы.
Установка:
Добавить наблюдение: sudo auditctl -w /etc/passwd -p wa
Теперь система будет записывать изменения файла.
Посмотреть события:
Можно узнать: кто изменил файл, когда это произошло, каким процессом.
Linux умеет отслеживать, кто и когда изменял определённые файлы.
Установка:
sudo apt install auditdДобавить наблюдение: sudo auditctl -w /etc/passwd -p wa
Теперь система будет записывать изменения файла.
Посмотреть события:
sudo ausearch -f /etc/passwdМожно узнать: кто изменил файл, когда это произошло, каким процессом.
journalctl — просмотр всех системных логов
В современных Linux многие службы пишут логи через
Посмотреть последние события:
Логи конкретного сервиса:
Следить в реальном времени:
Посмотреть ошибки только за сегодня:
В современных Linux многие службы пишут логи через
systemd.Посмотреть последние события:
journalctl -xeЛоги конкретного сервиса:
journalctl -u nginxСледить в реальном времени:
journalctl -fПосмотреть ошибки только за сегодня:
journalctl --since today -p errПроверить, куда уходит время загрузки Linux
Команда:
Покажет общее время запуска системы.
Например: Startup finished in 4.2s
А эта команда покажет самые медленные службы:
Пример:
18s docker.service
12s NetworkManager.service
8s snapd.service
Можно увидеть, что именно замедляет загрузку.
Команда:
systemd-analyzeПокажет общее время запуска системы.
Например: Startup finished in 4.2s
А эта команда покажет самые медленные службы:
systemd-analyze blameПример:
18s docker.service
12s NetworkManager.service
8s snapd.service
Можно увидеть, что именно замедляет загрузку.
Сделать снимок состояния процесса
Linux позволяет сохранить состояние работающей программы.
Установить:
Создать checkpoint:
Позже процесс можно восстановить:
То есть программа может «заморозиться» на одном компьютере и продолжить работу позже.
Linux позволяет сохранить состояние работающей программы.
Установить:
sudo apt install criuСоздать checkpoint:
criu dump -t PID -D checkpoint/Позже процесс можно восстановить:
criu restore -D checkpoint/То есть программа может «заморозиться» на одном компьютере и продолжить работу позже.
Минимальный набор для понимания и настройки маршрутизации в Linux
1. Интерфейсы и адреса:
Показывает IP-адреса интерфейсов.
Показывает сами интерфейсы и их состояние (
Например:
2. Таблица маршрутизации:
Главная команда.
Например:
Читай это как:
3. Узнать конкретный маршрут
Очень важная команда:
Linux покажет, какой маршрут он реально выберет.
Например:
Это часто лучший способ отладки маршрутизации.
4. Добавить маршрут:
Удалить:
Такие изменения обычно временные и могут исчезнуть после перезагрузки или перезапуска сетевого менеджера.
5. Проверить IP forwarding
Если Linux должен быть роутером между сетями:
Включить временно:
6.
Когда одной таблицы маршрутов недостаточно:
Например:
Это уже policy routing.
7. Все таблицы:
Полезно, когда смотришь на сложную систему и
1. Интерфейсы и адреса:
ip addrПоказывает IP-адреса интерфейсов.
ip linkПоказывает сами интерфейсы и их состояние (
UP/DOWN).Например:
eth0 → 192.168.1.100/24
eth1 → 10.0.0.1/242. Таблица маршрутизации:
ip routeГлавная команда.
Например:
default via 192.168.1.1 dev eth0
10.0.0.0/24 dev eth1
192.168.1.0/24 dev eth0Читай это как:
10.0.0.0/24 → eth1
192.168.1.0/24 → eth0
всё остальное → 192.168.1.1 через eth03. Узнать конкретный маршрут
Очень важная команда:
ip route get 8.8.8.8Linux покажет, какой маршрут он реально выберет.
Например:
8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.100Это часто лучший способ отладки маршрутизации.
4. Добавить маршрут:
sudo ip route add 10.10.0.0/24 via 192.168.1.254 dev eth0Удалить:
sudo ip route del 10.10.0.0/24Такие изменения обычно временные и могут исчезнуть после перезагрузки или перезапуска сетевого менеджера.
5. Проверить IP forwarding
Если Linux должен быть роутером между сетями:
sysctl net.ipv4.ip_forwardВключить временно:
sudo sysctl -w net.ipv4.ip_forward=16.
ip ruleКогда одной таблицы маршрутов недостаточно:
ip ruleНапример:
0: from all lookup local
32765: from 10.0.0.0/24 lookup 100
32766: from all lookup main
32767: from all lookup defaultЭто уже policy routing.
7. Все таблицы:
ip route show table allПолезно, когда смотришь на сложную систему и
ip route показывает далеко не всё.BleachBit — утилита для очистки кэша, временных файлов, истории и другого мусора.
1. Смотрим, что можно очистить:
2. Смотрим, что будет удалено:
3. Очищаем выбранные категории
Например:
4. Запускаем GUI:
В интерфейсе:
Выбираешь нужное → Preview → проверяешь → Clean.
Главное: сначала
И не запускай очистку от
1. Смотрим, что можно очистить:
bleachbit --list2. Смотрим, что будет удалено:
bleachbit --preview3. Очищаем выбранные категории
Например:
bleachbit --clean firefox.cache4. Запускаем GUI:
bleachbitВ интерфейсе:
Firefox
├── Cache
├── Cookies
└── History
System
├── Temporary files
└── Trash
Выбираешь нужное → Preview → проверяешь → Clean.
Практический пример:
Нужно освободить место после работы браузера:
bleachbit --clean firefox.cache
Проверить место: df -h
Главное: сначала
--preview, потом --clean. И не запускай очистку от
root, если для этого нет необходимости.Тестирование стабильности системы
Чтобы протестировать систему, можно нагрузить CPU, память, дисковую подсистему и I/O с помощью утилиты stress.
Ее основные возможности:
- CPU нагрузка: Задание количества рабочих потоков, которые нагружают процессор.
- Память: Создание нагрузки через аллокацию памяти.
- Диски: Стресс-тест записи данных на диск.
- I/O: Симуляция интенсивных операций ввода-вывода.
Примеры использования:
1. Нагрузка на CPU с 4 потоками в течение 30 секунд:
2. Нагрузка на CPU, память и I/O одновременно:
Чтобы протестировать систему, можно нагрузить CPU, память, дисковую подсистему и I/O с помощью утилиты stress.
Ее основные возможности:
- CPU нагрузка: Задание количества рабочих потоков, которые нагружают процессор.
- Память: Создание нагрузки через аллокацию памяти.
- Диски: Стресс-тест записи данных на диск.
- I/O: Симуляция интенсивных операций ввода-вывода.
Примеры использования:
1. Нагрузка на CPU с 4 потоками в течение 30 секунд:
stress --cpu 4 --timeout 30
2. Нагрузка на CPU, память и I/O одновременно:
stress --cpu 2 --vm 1 --vm-bytes 256M --io 2 --timeout 60
Даже если не запущен ни один терминал или его эмулятор, на заднем дворе графического рабочего стола продолжают выполняться несколько сеансов терминалов.
Получить доступ к этим виртуальным консолям, в большинстве дистрибутивов Linux можно с помощью комбинаций клавиш, начиная с
Для начала, проще заранее узнать сколько вирт. терминалов есть в системе, выполнив:
(Увидим список. Номер в tty это нужная клавиша
После перехода к сеансу вы увидите приглашение к регистрации в системе, где нужно ввести имя пользователя и пароль.
Для переключения из одной виртуальной консоли в другую используйте клавиши
Чтобы вернуться в графическое окружение рабочего стола, нажмите
Получить доступ к этим виртуальным консолям, в большинстве дистрибутивов Linux можно с помощью комбинаций клавиш, начиная с
CTRL+ALT+F1до CTRL+ALT+F6.Для начала, проще заранее узнать сколько вирт. терминалов есть в системе, выполнив:
ps ax | grep -v grep | grep getty(Увидим список. Номер в tty это нужная клавиша
F1 – F6)После перехода к сеансу вы увидите приглашение к регистрации в системе, где нужно ввести имя пользователя и пароль.
Для переключения из одной виртуальной консоли в другую используйте клавиши
ALT и F1 – F6 . (как в списке)Чтобы вернуться в графическое окружение рабочего стола, нажмите
ALT+F7. (перебери оставшиеся эфки, эта может не сработать)Повысить производительность можно штатными средствами, например, следующая команда скажет процессору работать на максимальной производительности при электропитании от сети.
При «разгонах» может быть полезным диагностировать систему с помощью сенсоров
«Нагрузить» процессор можно командой stress, например
Указанные программы находятся в пакетах
Для получения информации от сенсоров их следует один раз предварительно настроить, запустив от администратора команду
Запустив программы одновременно, можно увидеть как при создании нагрузки растут: частоты, температура, обороты вентилятора.
Частоту ядер процессора удобно отслеживать с помощью команды
# cpuspeed -CПри «разгонах» может быть полезным диагностировать систему с помощью сенсоров
$ sensors«Нагрузить» процессор можно командой stress, например
$ stress –cpu 16Указанные программы находятся в пакетах
cpuspeed, lm_sensors и stress.Для получения информации от сенсоров их следует один раз предварительно настроить, запустив от администратора команду
sensors-detect. Запустив программы одновременно, можно увидеть как при создании нагрузки растут: частоты, температура, обороты вентилятора.
Частоту ядер процессора удобно отслеживать с помощью команды
$ watch "cat /proc/cpuinfo|grep MHz"Узнаем дату создания файла
Это можно сделать с помощью
Нужная информация записана в графе ‘Создан’(‘
Но есть одна проблема. На некоторых дистрибутивах Linux при использовании утилиты stat это поле будет пустым. Все дело в том, что вывод данной информации появился только в
Но есть второй способ! С помощью
Чтобы получить inode:
А для просмотра файловой системы:
Теперь чтобы получить дату создания файла, используйте команду:
Теперь в терминале найдите поле, в котором хранится дата создания —
Это можно сделать с помощью
stat. Утилита stat выводит подробные сведения о файле.stat /dir/to/some/file.txtНужная информация записана в графе ‘Создан’(‘
Birth’)Но есть одна проблема. На некоторых дистрибутивах Linux при использовании утилиты stat это поле будет пустым. Все дело в том, что вывод данной информации появился только в
statx(2). Враппер (оболочка) для нее был добавлен в библиотеку glibc версии 2.28. А поддержка этого враппера появилась в наборе базовых системных утилит GNU coreutils 8.31Но есть второй способ! С помощью
debugfs. Процедура использования у нее несколько более запутанная. Связано это с тем, что для просмотра даты создания файла через debugfs, нужно узнать номер его inode и файловую систему.Чтобы получить inode:
ls -i /dir/to/some/file.txtА для просмотра файловой системы:
df /dir/to/some/file.txtТеперь чтобы получить дату создания файла, используйте команду:
sudo debugfs -R 'stat <inode>' /file/systemТеперь в терминале найдите поле, в котором хранится дата создания —
crtimeСистемные службы и systemd
systemd — система инициализации и менеджер служб, который управляет запуском и остановкой служб в Linux. Он заменяет более старые системы, такие как SysVinit.
Пример:
Чтобы проверить статус службы, например, nginx, используем: systemctl status nginx
Чтобы запустить или остановить службу:
Чтобы настроить службу на автоматический запуск при загрузке системы:
systemd — система инициализации и менеджер служб, который управляет запуском и остановкой служб в Linux. Он заменяет более старые системы, такие как SysVinit.
Пример:
Чтобы проверить статус службы, например, nginx, используем: systemctl status nginx
Чтобы запустить или остановить службу:
sudo systemctl start nginx
sudo systemctl stop nginxЧтобы настроить службу на автоматический запуск при загрузке системы:
sudo systemctl enable nginxСжатие и шифрование папки
Создаем зашифрованный архив
Пример:
Команда
Создаем зашифрованный архив
secure_backup.tar.gz.gpg из директории /home/user/data, используя пароль для шифрования.Пример:
tar -czf - /home/user/data | gpg --symmetric --cipher-algo AES256 -o secure_backup.tar.gz.gpgКоманда
tar создает архив, который затем шифруется с помощью gpg с использованием симметричного шифрования.Создаем файл устройства
В качестве примера рассмотрим процесс создания дополнительного файла loop-устройства.
Для начала следует получить список доступных в системе файлов loop-устройств:
Далее представим, что команда ls вывела 15 файлов loop-устройств (от
где
идентификатор
вспомогательный идентификатор
В качестве примера рассмотрим процесс создания дополнительного файла loop-устройства.
Для начала следует получить список доступных в системе файлов loop-устройств:
ls -al /dev | grep loopДалее представим, что команда ls вывела 15 файлов loop-устройств (от
loop0 до loop14). Исходя из этого, следует создать файл с именем loop15:mknod -m 0777 /dev/loop15 b 7 17где
-m - флаг, задающий права доступа0777 - права доступа/dev/loop15 - название /dev файлаb - обозначение блочного устройстваидентификатор
7 - фиксирован для всех файлов loop-устройств вспомогательный идентификатор
15 - указывает на номер файла loop-устройства.Расшифровка и распаковка архива
Восстанавливаем файлы из зашифрованного архива
Команда:
Что происходит:
После ввода правильного пароля файлы будут восстановлены в текущую директорию с сохранением структуры каталогов.
Момент: запускайте команду из директории, в которой хотите восстановить файлы. Если архив содержит абсолютный или относительный путь
Восстанавливаем файлы из зашифрованного архива
secure_backup.tar.gz.gpg.Команда:
gpg --decrypt secure_backup.tar.gz.gpg | tar -xzf -Что происходит:
gpg --decrypt — расшифровывает архив, запрашивая пароль.tar -xzf - — распаковывает полученные данные.| — передаёт расшифрованный архив команде tar.После ввода правильного пароля файлы будут восстановлены в текущую директорию с сохранением структуры каталогов.
Момент: запускайте команду из директории, в которой хотите восстановить файлы. Если архив содержит абсолютный или относительный путь
/home/user/data, результат распаковки будет зависеть от того, как архив был создан.Замена стандартной команды cat
Команда
Основное отличие
Примеры использования:
1. Просмотр файла с подсветкой синтаксиса и номерами строк:
2. Сравнение файла с его версией в Git:
3. Сочетание с другими командами через pipe:
Чтобы найти определенный текст в файле и вывести результат с подсветкой синтаксиса, вы можете использовать
Установка
В некоторых дистрибутивах команда может быть доступна как
из-за конфликта имен.
Команда
bat — это утилита командной строки, предназначенная для замены стандартной команды cat - чтение данных из файла или стандартного ввода. Основное отличие
bat от cat заключается в добавлении подсветки синтаксиса, интеграции с Git, а также в возможности отображения номеров строк и вывода в формате "paging".Примеры использования:
1. Просмотр файла с подсветкой синтаксиса и номерами строк:
bat file.txt2. Сравнение файла с его версией в Git:
bat --diff file.txt3. Сочетание с другими командами через pipe:
Чтобы найти определенный текст в файле и вывести результат с подсветкой синтаксиса, вы можете использовать
grep совместно с bat: grep -n 'search_term' file.txt | batУстановка
bat зависит от дистрибутива. Пример для Debian: sudo apt install batВ некоторых дистрибутивах команда может быть доступна как
batcatиз-за конфликта имен.
Проверка файла / директории в Bash
В Bash для этого используют file test operators, чаще всего в
• Базовые проверки:
Файл существует:
Обычный файл:
Директория:
Символьная ссылка:
• Права доступа:
Чтение / запись / выполнение
Проверяет права текущего пользователя, не владельца файла.
• Размер и содержимое:
Файл не пустой:
Файл пустой:
Владение:
Временные атрибуты:
Комбинирование условий:
• Безопасные идиомы:
Проверка перед использованием:
Создать директорию, если нет:
• Частые ошибки:
Неэкранированная переменная:
Использование
• Краткая шпаргалка:
В Bash для этого используют file test operators, чаще всего в
[[ ... ]]• Базовые проверки:
Файл существует:
[[ -e path ]]Обычный файл:
[[ -f path ]]Директория:
[[ -d path ]]Символьная ссылка:
[[ -L path ]]• Права доступа:
Чтение / запись / выполнение
[[ -r path ]] # readable[[ -w path ]] # writable[[ -x path ]] # executableПроверяет права текущего пользователя, не владельца файла.
• Размер и содержимое:
Файл не пустой:
[[ -s path ]]Файл пустой:
[[ ! -s path ]]Владение:
[[ -O path ]] # владелец — текущий пользователь[[ -G path ]] # принадлежит группе пользователяВременные атрибуты:
[[ path -nt other ]] # newer than
[[ path -ot other ]] # older thanКомбинирование условий:
if [[ -f file && -r file ]]; then
echo "Readable file"
fi• Безопасные идиомы:
Проверка перед использованием:
[[ -f "$file" ]] || {
echo "File not found: $file" >&2
exit 1
}Создать директорию, если нет:
[[ -d "$dir" ]] || mkdir -p "$dir"• Частые ошибки:
Неэкранированная переменная:
[[ -f $file ]] # плохо
[[ -f "$file" ]] # правильноИспользование
ls:ls file.txt >/dev/null 2>&1 # плохо
[[ -f file.txt ]] # правильно• Краткая шпаргалка:
-e существует-f обычный файл-d директория-L symlink-r чтение-w запись-x выполнение-s не пуст