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

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

Регистрация в перечне РКН https://clck.ru/3EpL9L
Download Telegram
Как редактировать файл конфигурации Linux

Все, что нужно для редактирования конфигурационного файла Linux, — это найти его и открыть в текстовом редакторе.

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

Для этой работы подойдет множество различных текстовых редакторов, и обычно все зависит от личных предпочтений. 

Обычно файлы конфигурации защищены от обычных учетных записей пользователей, поэтому не забудьте повысить свои привилегии, прежде чем пытаться их редактировать (команда sudo или su).

Предупреждение: изменение конфигурационных файлов, может привести к поломке всей программы.
Спец. атрибуты файлов

chattr +a some_file   позволить открывать файл на запись только в режиме добавления

chattr +c some_file   позволяет ядру автоматически сжимать/разжимать содержимое файла.

chattr +d some_file   указывает утилите dump игнорировать данный файл во время выполнения backup’а

chattr +i some_file   делает файл недоступным для любых изменений: редактирование, удаление, перемещение, создание линков на него.

chattr +s some_file   позволяет сделать удаление файла безопасным, т.е. выставленный атрибут s говорит о том, что при удалении файла, место, занимаемое файлом на диске заполняется нулями, что предотвращает возможность восстановления данных.

chattr +S some_file   указывает, что, при сохранении изменений, будет произведена синхронизация, как при выполнении команды sync

chattr +u some_file   данный атрибут указывает, что при удалении файла содержимое его будет сохранено и при необходимости пользователь сможет его восстановить

lsattr   показать атрибуты файлов
Создаем файл с текущей датой и временем

Создайте файл, имя которого будет содержать текущую дату и время, в формате YYYY-MM-DD_HH-MM.txt.

Пример:

touch "$(date +'%Y-%m-%d_%H-%M').txt"

Команда date формирует строку с текущей датой и временем в нужном формате, а touch создает новый файл с этим именем.
Утилита sar (System Activity Reporter) в Linux является ключевым инструментом системного администрирования для мониторинга и сбора статистических данных о производительности всей системы.
Она является частью пакета sysstat и предоставляет информацию о различных метриках системы, таких как загрузка процессора, использование памяти, активность дисков и сетевые операции.

Sar может собирать статистику в режиме онлайн или фоновом режиме (сохраняя данные в специальных файлах для последующего анализа). Она также может генерировать краткий или подробный отчет в зависимости от требований пользователя.

Для установки sar в Ubuntu:
sudo apt-get install sysstat

Основные параметры sar включают:
-u - использование процессора
-r - использование памяти
-d - активность дисков
-n - сетевая активность
-s YYYYMMDD - начальная дата для сбора данных
-e HH:MM:SS - конечное время для сбора данных
-o filename - выходной файл для сохранения собранных данных
-f filename - файл, содержащий записанные данные, для анализа

Примеры использования:
1. Получить общую статистику процессора каждые 5 секунд: sar -u 5
2. Отображение статистики использования памяти каждые 3 секунды: sar -r 3
3. Сохранение статистики сетевой активности в файл datafile каждые 2 секунды на протяжении 30 секунд:
sar -n DEV -o datafile 2 15

И это лишь небольшой пример возможностей sar. Утилита предоставляет довольно гибкий функционал, который может быть адаптирован под наиболее часто используемые сценарии мониторинга для того, чтобы вы могли анализировать статистику системы и оптимизировать ее производительность.
Для быстрого просмотра потока данных или фрагмента файла, используйте команды head и tail.

Например, команда: head /etc/passwd отобразит первые десять строк файла с паролем, а команда: tail /etc/passwd покажет заключительные десять строк.

Количество отображаемых строк можно изменить, применив параметр -n, в котором число n равно количеству строк, которые необходимо увидеть.Например: head -5 /etc/passwd

Чтобы вывести строки, начиная со строки под номером n, используйте команду: tail +n
Атомарные снимки файловой системы

Большинство админов делают бэкапы баз данных, останавливая сервис или используя сложные скрипты. Но в Linux есть системный вызов fsfreeze, который ставит файловую систему на паузу для записи (все новые записи блокируются, чтения работают).

# Заморозить ФС (например, перед созданием LVM-снапшота)
fsfreeze -f /mnt/data

# Создать снапшот (мгновенно, так как запись остановлена)
lvcreate -s -n snap_data /dev/vg/data

# Разморозить
fsfreeze -u /mnt/data


Это гарантирует консистентность данных на уровне блоков без остановки приложений. Поддерживается ext4, XFS, Btrfs. Используется внутри Docker и облачных провайдеров для создания снимков дисков «на лету».
Вам не нужен Docker, чтобы ограничить процесс по CPU или памяти. В современных Linux (с cgroup v2) это делается через systemd-run или прямую запись в cgroupfs.

Запустить команду с ограничением в 50% одного ядра и 512МБ памяти:
systemd-run --scope -p CPUQuota=50% -p MemoryMax=512M ./heavy_script.sh

Или ограничить уже работающий процесс (зная его PID):
# Найти slice процесса
systemctl status <pid>
# Изменить лимиты динамически
systemctl set-property system.slice CPUQuota=20%


Позволяет изолировать «прожорливый» скрипт или процесс так, чтобы он не положил весь сервер, без настройки контейнеров.
Модификаторы переменных

Bash умеет манипулировать строками внутри переменных без вызова внешних утилит вроде sed, awk или cut. Это работает быстрее, так как не создает новых процессов.

Удалить расширение файла:

FILE="archive.tar.gz"
echo "${FILE%.*}" # Выведет: archive.tar (удаляет кратчайшее совпадение с конца)
echo "${FILE%%.*}" # Выведет: archive (удаляет longest совпадение с конца)


Заменить подстроку:
URL="http://example.com"
echo "${URL/http/https}" # Выведет: https://example.com


Значение по умолчанию:
echo "${VAR:-default_value}" # Если VAR пуст или не установлена, вернет "default_value"
Начиная с Bash 4.0, поддерживаются хеш-таблицы (словари). Это позволяет хранить данные в формате ключ-значение прямо в памяти скрипта.

Зачем: Избавляет от необходимости парсить CSV/JSON внешними утилитами для простых задач.

Пример:
declare -A users
users[ivan]="1001"
users[maria]="1002"

# Доступ по ключу
echo "UID Ивана: ${users[ivan]}"

# Перебор всех ключей
for key in "${!users[@]}"; do
echo "User: $key, UID: ${users[$key]}"
done
Довольно интересен с практической точки зрения каталог /sys/power.
В файле state находится состояние питание. Изменив должным образом содержимое этого файла, можно изменить состояние питания.

Например, вот как можно перевести систему в состояние "Suspend to RAM", когда питание процессора отключается, но питание на память подается, благодаря чему ее содержимое не уничтожается:
sudo echo -n mem > /sys/power/state

При желании можно отправить систему в состояние "Suspend to Disk", когда содержимое памяти будет записано на жесткий диск, после чего питание будет отключено:
sudo echo -n disk > /sys/power/state
Traffic Control. Команда tc 

Это набор инструментов для управления сетевым трафиком внутри Linux. 

То, что вы можете сделать с помощью tc, одновременно впечатляет и вызывает отвращение. Это не для слабонервных, и настройка различных манипуляций с трафиком отнюдь не проста, но научитесь понимать это, и вы сможете использовать всю мощь управления трафиком в Linux.


Распространенным примером использования tc является применение некоторой задержки пакетов к сетевому соединению. 

Чтобы создать задержку 100мс с помощью tc:
sudo tc qdisc add dev eth0 root netem delay 100ms

Теперь вы можете это проверить, пиганув например на 8.8.8.8

Чтобы убрать задержку, которую вы только что установили, выполните:
sudo tc qdisc del dev eth0 root
Создаем пользовательский отчет

Скрипт создает отчет о текущих пользователях в системе и сохраняет его в файл user_report.txt. (Отчет  содержит имя пользователя, его UID и время последнего входа).

#!/bin/bash
output_file="user_report.txt"
echo "User  Report" > "$output_file"
echo "===================" >> "$output_file"
cut -d: -f1,3,6 /etc/passwd | while IFS=: read user uid home; do
    last_login=$(last -n 1 "$user" | head -n 1 | awk '{print \$4, \$5, \$6, \$7}')
    echo "$user (UID: $uid) - Last login: $last_login" >> "$output_file"
done


cut -d: -f1,3,6 /etc/passwd — извлекает имя пользователя, UID и домашнюю директорию из файла /etc/passwd.
last -n 1 "$user" — получает информацию о последнем входе пользователя.