Создаем пользовательский отчет
Скрипт создает отчет о текущих пользователях в системе и сохраняет его в файл
Скрипт создает отчет о текущих пользователях в системе и сохраняет его в файл
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" — получает информацию о последнем входе пользователя.Команда pstree
Похожа на
В простейшей форме, когда
Чтобы отключить объединение идентичных веток, примените:
Если в качестве аргумента указано имя пользователя,
Похожа на
ps, но вместо перечисления запущенных процессов, она показывает их в виде дерева.В простейшей форме, когда
pstree вызывается без какой-либо опции или аргументов, она отображает иерархическую древовидную структуру всех запущенных процессов.Чтобы отключить объединение идентичных веток, примените:
pstree -cЕсли в качестве аргумента указано имя пользователя,
pstree отображает только процессы, принадлежащие этому пользователю:pstree usernamepstree также позволяет выделить процессы для лучшего визуального представления. Аргумент -h выделит текущий процесс и все его предки:pstree -hКак работает cron
Его основная задача выполнять нужные процессы в нужное время.
Существует конфигурационный файл
В этих папках должны находиться скрипты, которые нужно выполнять с указанным интервалом. Скрипты должны иметь права на выполнение и их имя не должно содержать точки.
Его основная задача выполнять нужные процессы в нужное время.
Существует конфигурационный файл
/etc/crontab, из которых он берет информацию о том что и когда нужно выполнять. Часто, в современных дистрибутивах там прописан запуск утилиты run-parts, которая запускает нужные скрипты из следующих папок:/etc/cron.minutely - каждую минуту/etc/cron.hourly - каждый час/etc/cron.daily - каждый день/etc/cron.weekly - каждую неделю/etc/cron.monthly - каждый месяцВ этих папках должны находиться скрипты, которые нужно выполнять с указанным интервалом. Скрипты должны иметь права на выполнение и их имя не должно содержать точки.
Автоматическая очистка временных файлов
Cкрипт будет удалять файлы из директории
Cкрипт будет удалять файлы из директории
/tmp, которые не изменялись более 7 дней.#!/bin/bash
find /tmp -type f -mtime +7 -exec rm {} \;
find /tmp — ищет файлы в директории /tmp.-type f — ищет только файлы (не каталоги).-mtime +7 — находит файлы, которые не изменялись более 7 дней.-exec rm {} \; — удаляет найденные файлы.Изменение прав доступа командой chmod с помощью чисел.
Чтобы изменить права доступа к файлу, можно воспользоваться командой
Например, чтобы установить полные права доступа для себя как владельца, необходимо определить первое число —
Примеры того, как изменить права доступа к файлу (с именем
Установим права доступа
Установим права доступа
Установим права доступа
Установим права доступа
Чтобы изменить права доступа к файлу, можно воспользоваться командой
chmod. В таком случае каждому праву доступа (чтение, запись и выполнение) присваивается номер — r=4, w=2 и x=1 соответственно, то есть для задания прав доступа используются наборы чисел. Например, чтобы установить полные права доступа для себя как владельца, необходимо определить первое число —
7 (4 + 2 + 1), а затем дать группе и другим пользователям право только на чтение, указав второе и третье числа — 4 (4 + 0 + 0), чтобы в итоге получилось число 744. Любая комбинация прав доступа включает числа от 0 (нет прав доступа) до 7 (полные права доступа). Примеры того, как изменить права доступа к файлу (с именем
some_file) и как это будет выглядеть:Установим права доступа
rwxrwxrwx:chmod 777 some_file Установим права доступа
rwxr-xr-x: chmod 755 some_file Установим права доступа
rw-r--r--: chmod 644 some_file Установим права доступа
---------: chmod 000 some_fileДля проверки скорости записи/чтения можно использовать утилиту dd
Измеряем скорость записи:
Команда создаст файл testfile размером 1000 МБ, заполненный нулями, и измерит скорость записи данных в этот файл.
Измеряем скорость чтения:
Команда прочитает содержимое файла testfile и измерит скорость чтения данных из него.
Измеряем скорость записи:
dd if=/dev/zero of=testfile bs=1M count=1000 conv=fdatasyncКоманда создаст файл testfile размером 1000 МБ, заполненный нулями, и измерит скорость записи данных в этот файл.
Измеряем скорость чтения:
dd if=testfile of=/dev/null bs=1MКоманда прочитает содержимое файла testfile и измерит скорость чтения данных из него.
Смотрим общую информацию о жёстком диске
Для регулировки и просмотра параметров жёстких дисков с интерфейсом ATA существует утилита
Утилита может установить такие параметры как объём кеш-памяти накопителя, спящий режим, управление питанием, управление акустикой и настройки DMA.
Для просмотра общей информации о жёстком диске используется команда:
Для регулировки и просмотра параметров жёстких дисков с интерфейсом ATA существует утилита
hdparm.Утилита может установить такие параметры как объём кеш-памяти накопителя, спящий режим, управление питанием, управление акустикой и настройки DMA.
hdparm имеет очень серьёзный недостаток: утилита может привести к сбою компьютера и сделать данные на жёстком диске недоступными, после применения сочетания некоторых параметров.Для просмотра общей информации о жёстком диске используется команда:
hdparm -i /dev/sd<буква>Кроме
Иногда в файле
Как известно, при входе пользователя в систему запускается установленная для него оболочка. Так вот, если для какого-либо пользователя задать оболочку
bash в Linux существуют и другие оболочки: sh, csh, ksh, zsh, tcsh и пр. Все командные оболочки, установленные в системе, прописаны в файле /etc/shells.Иногда в файле
/etc/shells можно найти /bin/false и /bin/true, которые не являются оболочками. Это «заглушки», которые можно использовать, если вы хотите отключить ту или иную учетную запись пользователя. Как известно, при входе пользователя в систему запускается установленная для него оболочка. Так вот, если для какого-либо пользователя задать оболочку
/bin/false (или /bin/true), он не сможет войти в систему. Точнее, в систему-то он войдет, но и сразу выйдет из нее, поскольку сессия пользователя длится до завершения работы его оболочки, а обе заглушки ничего не делают, кроме того, что просто возвращают значение 0 (для false) или 1 (для true).Авария: Во время работы отказал диск
После замены диска сервер необходимо полностью восстановить.
Исходные условия:
• Имеется сервер Ubuntu Server 24.04.
Конфигурация:
• два SSD по 1 ТБ (
• программный RAID1 (mdadm)
• LVM поверх RAID
• файловая система XFS
• сервер предоставляет NFS
• на сервере работает PostgreSQL
• загрузчик GRUB установлен на оба диска
Шаг 1. Проверяем состояние RAID:
Получаем:
Также
Вывод
RAID работает в деградированном режиме.
Шаг 2. Определяем неисправный диск:
Типичный вывод:
Шаг 3. Исключаем диск из RAID
Если он еще виден системой:
После этого
Теперь RAID использует только один диск.
Шаг 4. Замена физического диска
После замены сервер обнаружил новый диск.
Получаем:
Но новый диск пустой.
Шаг 5. Копируем таблицу разделов
Проверяем:
Шаг 6. Меняем GUID разделов
Если GPT:
Иначе возникнет конфликт одинаковых UUID GPT.
Шаг 7. Добавляем диск обратно в RAID
Проверяем:
Будет
Шаг 8. Следим за синхронизацией
Ждем 100%
После окончания: [UU]
Шаг 9. Проверяем состояние RAID
Получаем:
Шаг 10. Проверяем LVM
Все тома должны быть доступны.
Шаг 11. Проверяем файловую систему
Для XFS:
Параметр:
Если ext4:
Шаг 12. Проверяем точки монтирования
Получаем:
Шаг 13. Проверяем PostgreSQL
Должно быть:
Проверяем базы:
Шаг 14. Проверяем NFS
Экспорт должен отображаться.
Шаг 15. Восстанавливаем GRUB
После замены диска загрузчик отсутствует.
Устанавливаем:
Потом:
(для UEFI)
или
для BIOS.
Шаг 16. Проверяем
Если UUID изменился
Затем
Шаг 17. Контрольная проверка
lsblk
mdadm --detail /dev/md0
systemctl status postgresql
systemctl status nfs-server
reboot
После перезагрузки: cat /proc/mdstat
Должно быть: [UU]
/dev/sdb.После замены диска сервер необходимо полностью восстановить.
Исходные условия:
• Имеется сервер Ubuntu Server 24.04.
Конфигурация:
• два SSD по 1 ТБ (
/dev/sda, /dev/sdb)• программный RAID1 (mdadm)
• LVM поверх RAID
• файловая система XFS
• сервер предоставляет NFS
• на сервере работает PostgreSQL
• загрузчик GRUB установлен на оба диска
Шаг 1. Проверяем состояние RAID:
cat /proc/mdstatПолучаем:
md0 : active raid1 sda1[0]
976630336 blocks [2/1] [U_]U = диск исправен _ = диск отсутствуетТакже
mdadm --detail /dev/md0Вывод
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 1RAID работает в деградированном режиме.
Шаг 2. Определяем неисправный диск:
smartctl -a /dev/sdbТипичный вывод:
SMART overall-health self-assessment test result: FAILED или I/O errorШаг 3. Исключаем диск из RAID
Если он еще виден системой:
mdadm /dev/md0 --fail /dev/sdb1После этого
mdadm /dev/md0 --remove /dev/sdb1Теперь RAID использует только один диск.
Шаг 4. Замена физического диска
После замены сервер обнаружил новый диск.
lsblkПолучаем:
sda
sdbНо новый диск пустой.
Шаг 5. Копируем таблицу разделов
sgdisk -R=/dev/sdb /dev/sdaПроверяем:
fdisk -lШаг 6. Меняем GUID разделов
Если GPT:
sgdisk -G /dev/sdbИначе возникнет конфликт одинаковых UUID GPT.
Шаг 7. Добавляем диск обратно в RAID
mdadm /dev/md0 --add /dev/sdb1Проверяем:
cat /proc/mdstatБудет
md0 : active raid1 sdb1[2] sda1[0]
recoveryШаг 8. Следим за синхронизацией
watch cat /proc/mdstatЖдем 100%
После окончания: [UU]
Шаг 9. Проверяем состояние RAID
mdadm --detail /dev/md0Получаем:
State : clean
Active Devices : 2Шаг 10. Проверяем LVM
pvdisplay
vgdisplay
lvdisplayВсе тома должны быть доступны.
Шаг 11. Проверяем файловую систему
Для XFS:
xfs_repair -n /dev/vg_data/lv_pgПараметр:
-n означает только проверку без изменений.Если ext4:
fsck -fШаг 12. Проверяем точки монтирования
mount или df -hПолучаем:
/dev/mapper/vg_data-lv_root
/dev/mapper/vg_data-lv_pg
/dev/mapper/vg_data-lv_nfsШаг 13. Проверяем PostgreSQL
systemctl status postgresql или pg_isreadyДолжно быть:
accepting connectionsПроверяем базы:
sudo -u postgres psql
SELECT now();Шаг 14. Проверяем NFS
systemctl status nfs-server
showmount -e localhostЭкспорт должен отображаться.
Шаг 15. Восстанавливаем GRUB
После замены диска загрузчик отсутствует.
Устанавливаем:
grub-install /dev/sdbПотом:
update-grub Проверяем: efibootmgr -v(для UEFI)
или
grub-install /dev/sda
grub-install /dev/sdbдля BIOS.
Шаг 16. Проверяем
mdadm.conf
cat /etc/mdadm/mdadm.confЕсли UUID изменился
mdadm --detail --scan >> /etc/mdadm/mdadm.confЗатем
update-initramfs -uШаг 17. Контрольная проверка
cat /proc/mdstat
[UU]lsblk
mdadm --detail /dev/md0
systemctl status postgresql
systemctl status nfs-server
reboot
После перезагрузки: cat /proc/mdstat
Должно быть: [UU]
Задача: Сервер перестал загружаться после обновления ядра
Условие: На сервере Ubuntu 24.04 после выполнения:
сервер больше не загружается.
На экране:
Требуется:
• определить причину;
• восстановить загрузку;
• сохранить данные;
• сделать так, чтобы проблема не повторилась.
Что должен сделать администратор
1. Загрузиться со старого ядра
В меню GRUB выбрать:
и загрузить предыдущую версию ядра.
2. Проверить наличие initramfs
Например:
Если initramfs отсутствует:
3. Проверить UUID
Если UUID изменился — исправить.
4. Проверить драйверы
Например RAID-контроллер требует модуль
Проверяем:
Если нет
5. Переустановить GRUB
Итог: Сервер успешно загружается.
Условие: На сервере Ubuntu 24.04 после выполнения:
apt update
apt upgrade
rebootсервер больше не загружается.
На экране:
Kernel panic - not syncing:
VFS: Unable to mount root fs on unknown-block(0,0)
Требуется:
• определить причину;
• восстановить загрузку;
• сохранить данные;
• сделать так, чтобы проблема не повторилась.
Что должен сделать администратор
1. Загрузиться со старого ядра
В меню GRUB выбрать:
Advanced optionsи загрузить предыдущую версию ядра.
2. Проверить наличие initramfs
ls /bootНапример:
vmlinuz-6.8.0
initrd.img-6.8.0Если initramfs отсутствует:
update-initramfs -u3. Проверить UUID
blkid
cat /etc/fstabЕсли UUID изменился — исправить.
4. Проверить драйверы
Например RAID-контроллер требует модуль
megaraid_sasПроверяем:
lsinitramfs /boot/initrd.img | grep megaraidЕсли нет
echo megaraid_sas >> /etc/initramfs-tools/modules
update-initramfs -u5. Переустановить GRUB
grub-install /dev/sda
update-grubИтог: Сервер успешно загружается.
Задача: На сервере неожиданно закончилось место
Условие:
Команда
показывает
Однако
дает всего около 40 ГБ.
Куда исчезло место?
Решение:
Такое происходит, когда удалили большой файл, но процесс продолжает его использовать.
Проверяем:
Например:
Процесс продолжает держать файл открытым.
Освободить место
Можно через:
После завершения процесса место сразу освободится.
Условие:
Команда
df -hпоказывает
Filesystem Use%
/dev/sda2 100%
Однако
du -sh /*дает всего около 40 ГБ.
Куда исчезло место?
Решение:
Такое происходит, когда удалили большой файл, но процесс продолжает его использовать.
Проверяем:
lsof | grep deletedНапример:
java
logfile deleted
30G
Процесс продолжает держать файл открытым.
Освободить место
Можно через:
systemctl restart java или kill PIDПосле завершения процесса место сразу освободится.
Задача: Сервер отвечает очень медленно
CPU почти не загружен.
RAM свободна.
Но приложения работают крайне медленно.
Что проверить
I/O:
Получаем:
Диск перегружен.
Проверить процессы:
Видим:
который читает весь диск.
Решение:
Перенести backup.
Используя
CPU почти не загружен.
RAM свободна.
Но приложения работают крайне медленно.
Что проверить
I/O:
iostat -x 1Получаем:
util 100%
await 1500 ms
Диск перегружен.
Проверить процессы:
iotopВидим:
backup.sh
который читает весь диск.
Решение:
Перенести backup.
Используя
ionice или niceМодуль ядра Linux — это точка входа в системную разработку
Здесь уже недостаточно знать команды ОС, важно понимать архитектуру ядра, сборку, загрузку и отладку на низком уровне.
🔔 3 августа в 20:00 МСК приглашаем вас на открытый урок, где мы разберём, зачем нужны модули ядра, как они встраиваются в работу операционной системы и какую роль играют в расширении её возможностей.
На занятии вы:
- узнаете, как создать собственный модуль, собрать его, запустить и отладить с помощью буфера сообщений ядра dmesg.
- получите практические инструкции, с которых можно начать разработку под ядро Linux.
Открытый урок проходит в преддверии старта курса «Разработка ядра Linux».
Зарегистрируйтесь, если хотите сделать первый уверенный шаг от обычной работы с Linux к системному программированию: https://otus.pw/JlC0/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Здесь уже недостаточно знать команды ОС, важно понимать архитектуру ядра, сборку, загрузку и отладку на низком уровне.
🔔 3 августа в 20:00 МСК приглашаем вас на открытый урок, где мы разберём, зачем нужны модули ядра, как они встраиваются в работу операционной системы и какую роль играют в расширении её возможностей.
На занятии вы:
- узнаете, как создать собственный модуль, собрать его, запустить и отладить с помощью буфера сообщений ядра dmesg.
- получите практические инструкции, с которых можно начать разработку под ядро Linux.
Открытый урок проходит в преддверии старта курса «Разработка ядра Linux».
Зарегистрируйтесь, если хотите сделать первый уверенный шаг от обычной работы с Linux к системному программированию: https://otus.pw/JlC0/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Поиск файлов по нескольким расширениям
С помощью команды
С помощью команды
find вместе с флагом -o (логическое ИЛИ) можно искать файлы по нескольким расширениям:find /path/to/search -type f \( -name "*.txt" -o -name "*.log" \)/path/to/search — это каталог, в котором вы хотите начать поиск.-type f указывает, что вы ищете файлы (а не каталоги).-name "*.txt" и -name "*.log" — это два условия, разделенные оператором -o. При этом выполняется поиск файлов с расширением .txt или .log.Поиск файлов с определенными настройками доступа
Команда
Чтобы найти файлы, у которых есть разрешения на чтение (
Поиск файлов по разрешению и режиму доступа:
Чтобы найти файлы, у которых нет прав на запись для группы и других:
Команда
find в сочетании с флагом -perm позволяет искать файлы на основе их настроек разрешений.Чтобы найти файлы, у которых есть разрешения на чтение (
r), запись (w) и выполнение (x) для владельца:find /path/to/search -type f -perm -700
Поиск файлов по разрешению и режиму доступа:
find /path/to/search -type f -perm modeЧтобы найти файлы, у которых нет прав на запись для группы и других:
find /path/to/search -type f ! -perm /go+w28 июля(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle DevOps-разработчика.
Как это будет:
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для DevOps-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_devops_bot
Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
Узнаем файловую систему (тип файловой системы) в Linux
1. Через команду
Вывод покажет список всех смонтированных файловых систем с указанием их типа.
2. Через команду mount или findmnt
Эти команды покажут, какие устройства куда смонтированы и с каким типом ФС.
3. Используя lsblk
Отображает информацию о блочных устройствах, включая тип файловой системы.
4. С помощью
Выводит информацию о типе ФС, UUID и другом
5. Используя file на устройство
Показывает тип содержимого устройства, включая файловую систему.
1. Через команду
df -TВывод покажет список всех смонтированных файловых систем с указанием их типа.
2. Через команду mount или findmnt
mount | grep '^/dev' или: findmnt -T / Эти команды покажут, какие устройства куда смонтированы и с каким типом ФС.
3. Используя lsblk
lsblk -fОтображает информацию о блочных устройствах, включая тип файловой системы.
4. С помощью
sudo blkidВыводит информацию о типе ФС, UUID и другом
5. Используя file на устройство
sudo file -s /dev/sda1Показывает тип содержимого устройства, включая файловую систему.
Запускаем процесс и отцепляем его от терминала
Например:
Теперь сделай:
После закрытия терминала процесс продолжит работать, даже без
Например:
python3 server.py &Теперь сделай:
disownПосле закрытия терминала процесс продолжит работать, даже без
nohup.🎥 Вебинар: Восстанавливаем RAID5 в Linux
Практическое руководство по обнаружению неисправностей и грамотному восстановлению RAID5-массивов при отказе накопителя
🧠 На вебинаре вы узнаете:
- Принципы работы RAID5 и сценарии поведения системы при выходе одного диска из строя
- Набор ключевых команд и инструментов для мониторинга, анализа и «лечения» массива
- Подходы к грамотному проектированию RAID-массива с учётом отказоустойчивости
- Типичные ловушки при восстановлении и способы обойти их без фатальных последствий
💪 В результате вебинара вы:
- Приобретёте навык оценки состояния RAID5-массива и выявления причин сбоя
- Освоите безопасное отключение и подключение дисков без лишнего риска
- Выполните полноценное пошаговое восстановление массива через утилиту mdadm
- Поймёте, как снизить вероятность потери данных в аварийной ситуации и действовать без паники
⭐️ Открытый урок проходит в преддверии старта курса «Инфраструктура высоконагруженных систем».
👉 Для участия зарегистрируйтесь: https://otus.pw/M7qA/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Практическое руководство по обнаружению неисправностей и грамотному восстановлению RAID5-массивов при отказе накопителя
🧠 На вебинаре вы узнаете:
- Принципы работы RAID5 и сценарии поведения системы при выходе одного диска из строя
- Набор ключевых команд и инструментов для мониторинга, анализа и «лечения» массива
- Подходы к грамотному проектированию RAID-массива с учётом отказоустойчивости
- Типичные ловушки при восстановлении и способы обойти их без фатальных последствий
💪 В результате вебинара вы:
- Приобретёте навык оценки состояния RAID5-массива и выявления причин сбоя
- Освоите безопасное отключение и подключение дисков без лишнего риска
- Выполните полноценное пошаговое восстановление массива через утилиту mdadm
- Поймёте, как снизить вероятность потери данных в аварийной ситуации и действовать без паники
⭐️ Открытый урок проходит в преддверии старта курса «Инфраструктура высоконагруженных систем».
👉 Для участия зарегистрируйтесь: https://otus.pw/M7qA/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Запускаем команду без сохранения в истории
Если не хочешь, чтобы команда попала в
Проверяем настройку:
Если вывод содержит
Если не хочешь, чтобы команда попала в
~/.bash_history, поставь перед ней пробел (если включена опция HISTCONTROL=ignorespace).
sudo apt install somethingПроверяем настройку:
echo $HISTCONTROLЕсли вывод содержит
ignorespace или ignoreboth, трюк работает./proc как "рентген" системыНапример:
cat /proc/cpuinfo или cat /proc/meminfoНо самое интересное:
cat /proc/$(pidof firefox)/mapsПокажет все участки памяти процесса Firefox.
Ещё полезно:
ls -l /proc/$$/fdЭто список всех файлов, сокетов и каналов, которые открыты текущим процессом оболочки.