Linux для чайника
19.6K subscribers
86 photos
4 files
79 links
Linux
- Разбор утилит / инструментов
- Новости / факты
- Опросы для проверки знаний, навыков
и многое другое.

Только по вопросам сотрудничества: @altmainf

Регистрация в перечне РКН https://clck.ru/3EpL9L
Download Telegram
Открываем удалённую оболочку без SSH

Если на обоих компьютерах есть netcat (nc):

На первом компьютере: nc -lvnp 4444 -e /bin/bash

На втором: nc <IP> 4444

Ты получишь удалённую оболочку.
Используй это только в своей сети и на своих устройствах. На многих современных версиях nc опция -e отключена именно из соображений безопасности.
Узнать, что мешает ноутбуку экономить заряд

Если аккумулятор разряжается слишком быстро, стоит посмотреть, какие процессы постоянно нагружают процессор.
Для этого существует утилита: sudo powertop

powertop
анализирует активность системы и показывает:
• процессы, чаще всего пробуждающие процессор;
• устройства, потребляющие больше всего энергии;
• рекомендации по снижению энергопотребления.

Например, можно обнаружить, что какое-то приложение будит процессор сотни раз в секунду, из-за чего он не переходит в режим энергосбережения.

Кроме мониторинга, powertop умеет автоматически применять некоторые оптимизации: sudo powertop --auto-tune
Эта команда включает рекомендуемые энергосберегающие настройки до следующей перезагрузки.
Создать именованный канал между программами

В Linux существует специальный тип файлов — FIFO (именованный канал). Он позволяет двум независимым процессам обмениваться данными так, будто они читают и записывают обычный файл.

Создать такой канал можно одной командой: mkfifo mypipe

В одном терминале: cat mypipe
Во втором: echo "Привет!" > mypipe

Сообщение мгновенно появится в первом терминале.
В отличие от обычных файлов, данные не сохраняются на диске — они сразу передаются между процессами.
Посмотреть, какие процессы используют сеть

Если интернет работает медленно или вы хотите узнать, какая программа подключается к сети, используйте: 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 apt install auditd

Добавить наблюдение: sudo auditctl -w /etc/passwd -p wa

Теперь система будет записывать изменения файла.
Посмотреть события: sudo ausearch -f /etc/passwd

Можно узнать: кто изменил файл, когда это произошло, каким процессом.
journalctl — просмотр всех системных логов

В современных Linux многие службы пишут логи через systemd.

Посмотреть последние события: journalctl -xe
Логи конкретного сервиса: journalctl -u nginx
Следить в реальном времени: journalctl -f
Посмотреть ошибки только за сегодня: journalctl --since today -p err
Проверить, куда уходит время загрузки Linux

Команда: systemd-analyze
Покажет общее время запуска системы.
Например: Startup finished in 4.2s

А эта команда покажет самые медленные службы:
systemd-analyze blame
Пример:
18s docker.service
12s NetworkManager.service
8s snapd.service


Можно увидеть, что именно замедляет загрузку.
Сделать снимок состояния процесса

Linux позволяет сохранить состояние работающей программы.

Установить: sudo apt install criu
Создать checkpoint: criu dump -t PID -D checkpoint/
Позже процесс можно восстановить: criu restore -D checkpoint/

То есть программа может «заморозиться» на одном компьютере и продолжить работу позже.
Минимальный набор для понимания и настройки маршрутизации в Linux

1. Интерфейсы и адреса: ip addr
Показывает IP-адреса интерфейсов.
ip link
Показывает сами интерфейсы и их состояние (UP/DOWN).
Например:
eth0 → 192.168.1.100/24
eth1 → 10.0.0.1/24


2. Таблица маршрутизации: 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 через eth0


3. Узнать конкретный маршрут
Очень важная команда: ip route get 8.8.8.8
Linux покажет, какой маршрут он реально выберет.
Например: 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=1

6. 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. Смотрим, что можно очистить: bleachbit --list

2. Смотрим, что будет удалено: bleachbit --preview

3. Очищаем выбранные категории
Например: bleachbit --clean firefox.cache

4. Запускаем 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 секунд:
stress --cpu 4 --timeout 30


2. Нагрузка на CPU, память и I/O одновременно:
stress --cpu 2 --vm 1 --vm-bytes 256M --io 2 --timeout 60
Даже если не запущен ни один терминал или его эмулятор, на заднем дворе графического рабочего стола продолжают выполняться несколько сеансов терминалов.

Получить доступ к этим виртуальным консолям, в большинстве дистрибутивов Linux можно с помощью комбинаций клавиш, начиная с
CTRL+ALT+F1до CTRL+ALT+F6.

Для начала, проще заранее узнать сколько вирт. терминалов есть в системе, выполнив: ps ax | grep -v grep | grep getty
(Увидим список. Номер в tty это нужная клавиша F1 – F6)

После перехода к сеансу вы увидите приглашение к регистрации в системе, где нужно ввести имя пользователя и пароль.

Для переключения из одной виртуальной консоли в другую используйте клавиши ALT и F1 – F6 . (как в списке)

Чтобы вернуться в графическое окружение рабочего стола, нажмите ALT+F7. (перебери оставшиеся эфки, эта может не сработать)
Повысить производительность можно штатными средствами, например, следующая команда скажет процессору работать на максимальной производительности при электропитании от сети.

# cpuspeed -C


При «разгонах» может быть полезным диагностировать систему с помощью сенсоров

$ sensors


«Нагрузить» процессор можно командой stress, например

$ stress –cpu 16


Указанные программы находятся в пакетах
cpuspeed, lm_sensors и stress.

Для получения информации от сенсоров их следует один раз предварительно настроить, запустив от администратора команду
sensors-detect.
Запустив программы одновременно, можно увидеть как при создании нагрузки растут: частоты, температура, обороты вентилятора.
Частоту ядер процессора удобно отслеживать с помощью команды

$ watch "cat /proc/cpuinfo|grep MHz"
Узнаем дату создания файла 

Это можно сделать с помощью 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

Чтобы запустить или остановить службу:
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 -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

Команда bat — это утилита командной строки, предназначенная для замены стандартной команды cat - чтение данных из файла или стандартного ввода.

Основное отличие bat от cat заключается в добавлении подсветки синтаксиса, интеграции с Git, а также в возможности отображения номеров строк и вывода в формате "paging".

Примеры использования:
1. Просмотр файла с подсветкой синтаксиса и номерами строк: bat file.txt
2. Сравнение файла с его версией в Git: bat --diff file.txt
3. Сочетание с другими командами через pipe:
Чтобы найти определенный текст в файле и вывести результат с подсветкой синтаксиса, вы можете использовать grep совместно с bat:
grep -n 'search_term' file.txt | bat

Установка bat зависит от дистрибутива. Пример для Debian:
sudo apt install bat
В некоторых дистрибутивах команда может быть доступна как batcat
из-за конфликта имен.
Проверка файла / директории в Bash

В 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  не пуст