1/146
Процессы и потоки, fork/exec, состояния процессов, signals, управление памятью, virtual memory, swap, page cache, OOM, диски, RAID, LVM и хранение данных.
Name | Mastery | Learn | Test | Matching | Spaced | Call with Kai | Chat |
|---|
No analytics yet
Send a link to your students to track their progress
Что такое RAID? Что такое RAID0, RAID1, RAID5, RAID10?
RAID объединяет несколько физических дисков или block devices в один логический массив и задаёт, как данные распределяются между ними. RAID 0 разбивает данные на блоки и параллельно раскладывает их по дискам — это striping. Он даёт скорость и всю суммарную ёмкость, но отказ любого диска разрушает массив. RAID 1 записывает одинаковые данные на несколько дисков — mirroring, или зеркалирование; при двух дисках переживает отказ одного, но полезна примерно половина общей ёмкости. RAID 5 требует минимум три диска: данные распределяются между ними, а дополнительно хранится вычисляемая parity — информация, позволяющая восстановить данные при отказе одного диска. Полезная ёмкость примерно равна ёмкости N−1 дисков, а запись дороже из-за пересчёта parity. RAID 10 строит зеркальные пары как RAID 1 и распределяет данные между парами как RAID 0; обычно он быстрый и предсказуемый, но использует около 50% общей ёмкости. RAID защищает от некоторых отказов дисков, но не заменяет backup.
Опишите иерархию файловой системы в Linux.
Linux использует единое дерево каталогов с корнем /; отдельные файловые системы подключаются в него через точки монтирования. /etc — конфигурация, /var — изменяемые данные и логи, /home — home пользователей, /usr — большая часть программ и shared data, /run — runtime state, /tmp — временные файлы, /dev — device nodes, /proc и /sys — виртуальные интерфейсы ядро Linux. /boot содержит файлы загрузки; /bin и /sbin в современных usr-merged системах часто являются symlink в /usr.
Как посмотреть все файлы в каталоге, включая скрытые?
ls -la directory показывает содержимое каталога, включая hidden names. -l включает подробный формат, -a — имена, начинающиеся с точки, включая . и ..; без последних двух можно использовать ls -lA.
Какая команда в Unix/Linux удаляет каталог со всем его содержимым?
Непустой каталог удаляют rm -r directory; -r означает рекурсивное удаление дерева. Это destructive-команда, поэтому путь нужно проверить заранее; rmdir работает только для пустых каталогов.
Какая команда в Unix/Linux показывает свободную/используемую память? Существует ли свободная память в Linux?
Состояние памяти удобно смотреть free -h, подробности — в /proc/meminfo. Linux намеренно использует незанятую RAM под page cache (кэш файловых данных в RAM) и reclaimable caches, поэтому маленький MemFree нормален; для практической оценки доступной памяти полезнее MemAvailable/колонка available.
Как найти строку "my konfu is the best" в файлах каталога рекурсивно?
grep -R -F 'my konfu is the best' directory/ рекурсивно ищет буквальную строку. -R обходит дерево, -F отключает интерпретацию строки как regex; номера строк можно добавить -n.
Что делает & disown в конце команды?
command & disown в Bash запускает command как background job, затем disown удаляет его из job table shell. Это не перенаправляет stdin/stdout/stderr и не делает процесс полноценным daemon, поэтому связь с terminal может сохраниться. Для сервисов лучше systemd, для разовых задач — nohup/tmux с подходящим перенаправлением.
Что такое swap и для чего он используется?
Swap — область на диске (раздел или файл), которую Linux может использовать как дополнительное место для страниц памяти, когда RAM не хватает или ядру выгодно освободить RAM под более полезные данные. Обычно туда вытесняются anonymous pages — память процессов, не связанная напрямую с файлами. Диск намного медленнее RAM, поэтому активный swap ухудшает производительность; swap помогает пережить часть дефицита памяти, но не гарантирует защиту от OOM.
Что делает установленный на файл immutable bit?
Immutable attribute i запрещает обычное изменение, удаление и переименование файла даже при разрешающих mode bits. Проверка: lsattr file, изменение: chattr +i file/chattr -i file при нужных правах. Это filesystem attribute, а не Unix permission bit.
Какая разница между символическими и жесткими ссылками? Что произойдет если удалить символическую/жесткую ссылку?
Hard link — ещё одно имя того же inode; удаление одного имени лишь уменьшает link count, а данные живут, пока остаётся ссылка или открытый descriptor. Symlink — отдельный файл с pathname target: удаление symlink не затрагивает target, а удаление target оставляет dangling symlink. Hard links обычно не пересекают filesystem boundary и не создаются на директории.
Что такое inode и какая информация хранится в inode?
Inode — структура файловой системы, которая описывает объект файла, но не хранит его имя. В inode находятся метаданные: тип и права доступа, UID/GID владельца, размер, временные метки, число hard links и информация о том, где лежат данные файла. Имя хранится в записи каталога: каталог сопоставляет имя с номером inode. Поэтому несколько hard links могут иметь разные имена, но указывать на один inode.
Как принудительно запустить проверку файловой системы при следующей перезагрузке?
Универсального современного /forcefsck для всех Linux/filesystems нет. Для ext2/3/4 можно настроить проверку через tune2fs либо загрузиться в rescue и выполнить fsck/e2fsck на несмонтированной filesystem; XFS использует собственные инструменты. Repair-проверку нельзя запускать на активно смонтированной RW filesystem.
Что такое MAJOR и MINOR нумерация спец. файлов?
Major number device node идентифицирует kernel driver/класс устройства, minor — конкретный экземпляр или подканал, интерпретируемый драйвером. Пару major:minor видно в ls -l /dev/..., зарегистрированные majors — в /proc/devices.
Опишите сценарий, когда вы можете получить ошибку "filesystem is full", но df показывает наличие свободного места.
Частая причина — закончились inodes: df -h показывает свободные blocks, но df -i может быть 100%. Также проверяют, тот ли mount измеряется (findmnt -T path), quotas и reserved space. Исправляют подтверждённую причину, например удаляют миллионы ненужных мелких файлов, а не расширяют диск вслепую.
Опишите как работает ps.
ps делает snapshot процессов, читая kernel-exported данные главным образом из /proc, и форматирует их по опциям. ps aux и ps -ef показывают широкий список процессов в разных стилях; это не непрерывный монитор, для динамики используют top/pidstat.
Объясните кратко каждое из состояний процесса.
Основные Linux states в ps: R — running/runnable, S — interruptible sleep, D — uninterruptible sleep, T/t — stopped/traced, Z — zombie, I — idle kernel thread. Абстрактные ready и running в Linux обычно объединены в R.
Как узнать какой процесс слушает указанный порт?
Для TCP-порта 8080: ss -lntp 'sport = :8080'. -l — listening, -n — без resolution, -t — TCP, -p — процесс; данные о чужих процессах могут требовать root. Для UDP используют -u.
Что такое зомби-процесс и какова его причина возникновения?
Zombie-процесс — это уже завершившийся дочерний процесс, чей родитель ещё не забрал код завершения через wait()/waitpid(). Память и CPU завершённого процесса уже освобождены, но ядро оставляет небольшую запись с PID и exit status, чтобы родитель мог узнать результат. Поэтому посылать сигнал самому zombie бессмысленно: исправлять нужно родительский процесс, который не выполняет reaping. Большое число zombie может занять таблицу процессов/PID.
Какие типы файловых систем в Linux вам известны?
Распространённые disk filesystems: ext4, XFS, Btrfs; также встречаются F2FS и ZFS, а отдельно — network NFS/CIFS и virtual procfs/sysfs/tmpfs. Выбор зависит от workload, recovery, snapshots/checksums, масштаба и поддержки дистрибутива.
В чем разница между процессом и потоком? И родительским и потомком процессами после системного вызова fork?
Процесс — выполняющаяся программа со своим виртуальным адресным пространством и набором ресурсов. Потоки (threads) внутри одного процесса выполняются независимо планировщиком, но обычно разделяют память и открытые файлы; у каждого потока свои регистры и стек. fork() создаёт новый дочерний процесс: у parent и child разные PID и логически отдельная память. Сразу копировать все страницы дорого, поэтому Linux обычно применяет copy-on-write: пока никто не пишет в страницу, parent и child могут физически использовать одну и ту же память; копия создаётся при записи.
В чем разница между exec и fork?
fork() и exec() решают разные задачи. fork() создаёт новый дочерний процесс, сначала похожий на родителя. exec*() нового процесса не создаёт: он заменяет выполняемую программу внутри текущего процесса другой программой, поэтому PID сохраняется. Типичный shell сначала делает fork(), а в дочернем процессе вызывает execve() для запуска нужной команды.
Для чего используется nohup?
nohup command & используют, чтобы разовая команда не завершилась из-за SIGHUP при закрытии терминальной сессии; вывод при необходимости перенаправляется. nohup не даёт supervision/restart/resource policy, поэтому production-сервисы лучше запускать через systemd.
Как можно получить Host, Channel, ID, LUN для SCSI диска?
SCSI-адрес H:C:T:L проще всего увидеть через lsscsi: он выводится как [Host:Channel:Target:LUN]. Связь конкретного sdX с устройством также прослеживается через /sys/class/block/sdX/device.
Как можно ограничить использование памяти для процесса?
На современной Linux-системе память лучше ограничивать cgroup: для systemd unit — MemoryMax=1G, для разового scope — systemd-run --scope -p MemoryMax=1G command. ulimit/RLIMIT_AS ограничивает virtual address space и имеет другую семантику, поэтому не заменяет memory cgroup.
Что такое tarpipe (или, как вы будете копировать все, включая жесткие ссылки и специальные файлы, с одного сервера на другой)?
Tarpipe через SSH: tar -C /src -cpf - . | ssh host 'tar -C /dst -xpf -'. Tar сохраняет symlinks, hard-link relationships и special-file metadata; owners/device nodes требуют достаточных прав. Для повторяемой миграции с ACL/xattrs часто удобнее rsync -aHAX --numeric-ids.
Как можно перехватить Linux сигнал из скрипта?
В shell сигналы обрабатывают через trap, например trap 'cleanup' TERM INT. Handler удобен для graceful shutdown и cleanup; SIGKILL и SIGSTOP перехватить нельзя.
Можно ли перехватить SIGKILL?
Нет: SIGKILL нельзя поймать, заблокировать или игнорировать — kernel завершает процесс принудительно. Аналогично не перехватывается SIGSTOP; graceful shutdown обычно строят вокруг SIGTERM.
Что происходит, когда ядро Linux запускает OOM killer и как он выбирает какой процесс необходимо убить в первую очередь?
При OOM kernel после неудачного reclaim может выбрать задачу для принудительного завершения — глобально или внутри memory cgroup. Выбор основан на badness score, где важны memory footprint и oom_score_adj; это не просто «самый большой PID». Жертве посылается SIGKILL, а причину и выбранный процесс проверяют в journalctl -k и memory/cgroup metrics.
При попытке отмонтировать каталог получаем ошибку занятости, как найти какой PID держит каталог?
Сначала нахожу пользователей mount: fuser -vm /mountpoint; для небольшого дерева можно lsof +D /mountpoint. Процесс может держать открытый файл, cwd или root; после идентификации корректно останавливаю его/сервис и повторяю umount. umount -l — специальный lazy detach, а не первая мера.
Как можно увеличить/уменьшить приоритет процесса в Linux?
nice -n 10 command задаёт nice при старте, renice -n 5 -p PID меняет его у работающего процесса. Диапазон обычно -20..19: меньшее значение означает больший CPU weight/приоритет для обычного scheduler; уменьшать nice обычно может только привилегированный процесс.
Объясните следующую команду (date ; ps -ef | awk '{print $1}' | sort | uniq | wc -l ) >> Activity.log
Команда пишет в Activity.log дату, затем число уникальных значений первой колонки ps -ef, то есть владельцев процессов. Но header UID тоже попадёт в подсчёт, поэтому результат обычно завышен на 1; корректнее ps -eo user= | sort -u | wc -l. >> дописывает, а не перезаписывает файл.
Напишите скрипт, показывающий разницу двух каталогов.
Для рекурсивного сравнения каталогов: diff -qr dir1 dir2; -r обходит дерево, -q сообщает только различия. Exit status: 0 — одинаковы, 1 — различаются, >1 — ошибка, поэтому скрипт должен проверять код возврата.
Что такое процесс?
Процесс — экземпляр выполняющейся программы с PID, virtual address space, credentials, file descriptors, signal state и другими ядро Linux-managed ресурсами. Процесс может содержать несколько threads, которые разделяют часть этих ресурсов.
Как мог бы выглядеть API для работы с процессами в операционной системе?
Process API обычно включает create (fork/clone или spawn), replace image (exec), exit, wait, signals, IDs/attributes и resource/priority controls. Разделение fork/exec позволяет настроить descriptors, credentials и environment до запуска новой программы; spawn проще для типовых случаев.
Верно или нет: программа загружается в память eagerly, то есть целиком сразу?
Неверно: executable обычно не загружается целиком в физическую RAM сразу. Loader создаёт virtual mappings, а страницы кода/данных подгружаются по demand paging при page faults; поэтому размер файла не равен немедленно занятой RAM.
Какие состояния может иметь процесс?
Абстрактно: running, ready/runnable, blocked/waiting и terminated. В Linux ps: R — running/runnable, S — interruptible sleep, D — uninterruptible sleep, T/t — stopped/traced, Z — zombie, I — idle kernel thread.
По каким причинам процесс может перейти в состояние blocked?
Процесс блокируется, когда ждёт событие: disk/network I/O, данные pipe/socket, lock/futex/semaphore, timer или завершение другого процесса. Scheduler убирает его из runnable queue до события; Linux различает, например, interruptible S и uninterruptible D waits.
Что такое Inter-Process Communication (IPC)?
IPC — механизмы обмена данными и синхронизации между процессами: pipes/FIFOs, sockets, shared memory, message queues, signals, semaphores/futex и др. Выбор зависит от объёма данных, latency, message semantics и того, находятся ли процессы на одном host.
Что такое time sharing?
Time sharing — разделение CPU во времени: scheduler быстро переключает runnable tasks, обеспечивая интерактивность и fairness. На многоядерной системе несколько задач при этом могут выполняться реально параллельно.
Что такое space sharing?
Space sharing — одновременное разделение разных частей ресурса, например областей RAM или disk space, между потребителями. В отличие от time sharing ресурс не передаётся целиком по очереди.
Что такое demand paging?
Demand paging загружает/создаёт physical page только при фактическом обращении к virtual page. Page fault передаёт управление ядро Linux, который находит/выделяет страницу, при необходимости читает file-backed data, обновляет page tables и продолжает инструкцию.
Что такое copy-on-write?
Copy-on-write позволяет mappings сначала разделять физические pages только для чтения, а копировать page лишь при записи. После fork() это экономит время и память: write вызывает fault, kernel создаёт private copy для пишущего процесса. Цена — дополнительные faults/copies при реальных изменениях.
Что такое cache и buffer?
Cache хранит копии данных для ускорения повторного доступа; buffer временно удерживает данные при передаче или согласовании скоростей. page cache (кэш файловых данных в RAM) — пример cache, socket buffers — пример buffer; в некоторых подсистемах одна память может выполнять обе роли.
Как переименовать файл или директорию?
mv old new переименовывает файл или каталог. В пределах одной файловая система это обычно изменение directory entry; перенос файла между файловые системы превращается в копирование и удаление исходника.
Какие команды и как вы используете в следующих ситуациях: удалить непустую директорию; вывести содержимое файла; дать всем доступ к /tmp/x; перейти в домашнюю директорию пользователя; заменить good на great в /tmp/y?
Непустой каталог: rm -r dir; вывести файл: cat file; дать всем полный доступ: chmod 777 /tmp/x — только если это действительно требование; домой: cd; заменить все good: sed -i 's/good/great/g' /tmp/y в GNU sed. rm -r и 777 не следует использовать без проверки пути и модели доступа.
Исправьте следующие команды: sed "s/1/2/g' /tmp/myFile и find . -iname \*.yaml -exec sed -i "s/1/2/g" {} ;.
Правильно: sed 's/1/2/g' /tmp/myFile и find . -iname '*.yaml' -exec sed -i 's/1/2/g' {} \;. В первой команде сломаны кавычки, во второй glob нужно защитить от shell и корректно завершить -exec; для GNU tools можно эффективнее ... -exec sed ... {} +.
Верно или нет: только root может создавать файлы в /proc?
Неверно. /proc — virtual файловая система, entries в ней в основном создаёт ядро Linux; даже root не может произвольно создать там обычный файл. Некоторые существующие proc entries writable при подходящих правах, но запись меняет ядро Linux/process state.
Что можно найти в /proc/cmdline?
/proc/cmdline содержит ядро Linux command line, реально переданную текущему ядру при boot. Там видны параметры вроде root device, console и других ядро Linux options.
В каком пути можно найти системные устройства, например block storage?
Block-device nodes находятся в /dev, например /dev/sda или /dev/nvme0n1; список удобно смотреть lsblk. ядро Linux device model и attributes находятся в sysfs — /sys/class/block//sys/block.
Расскажите подробно о процессе загрузки Linux.
BIOS/UEFI инициализирует hardware и запускает bootloader; GRUB загружает ядро Linux и initramfs и передаёт ядро Linux command line. ядро Linux инициализирует CPU, memory, scheduler и drivers, запускает ранний /init из initramfs; тот активирует нужные storage/LVM/RAID/crypt слои, монтирует настоящий root и делает switch_root. Затем ядро Linux запускает PID 1, обычно systemd, который по dependencies поднимает mounts, devices, network и services до default целевой системе, после чего запускается login/getty или display manager.
Для чего используется RAID? Объясните различия между RAID 0, 1, 5 и 10.
RAID нужен для производительности и/или отказоустойчивости, но не заменяет backup. RAID 0 — striping без redundancy; RAID 1 — mirror; RAID 5 — striping + single distributed parity, выдерживает один отказ, но имеет write penalty; RAID 10 — stripe зеркальных пар, обычно быстрее RAID 5, но использует около половины raw capacity.
Опишите процесс расширения доступного пространства файловой системы.
Расширяют снизу вверх: disk/LUN/partition → при LVM pvresize → lvextend → filesystem. ext4 растят resize2fs, XFS — xfs_growfs /mountpoint; lvextend -r может объединить последние шаги там, где поддерживается. Перед изменением проверяют backup и точный storage stack; shrink — отдельная рискованная операция, XFS штатно не уменьшается.
Что такое lazy umount?
umount -l делает lazy detach: mount сразу исчезает из namespace для новых lookup, но окончательно освобождается после исчезновения последних references. Это полезно в специальных recovery/network-FS случаях, но не устраняет первопричину busy mount.
Что такое tmpfs?
tmpfs — memory-backed файловая система: данные живут в виртуальной памяти/page cache (кэш файловых данных в RAM) и при наличии swap могут быть вытеснены туда. Она непостоянна, обычно очищается при unmount/reboot, и используется, например, для /run и shared memory.
Что хранится в логах /var/log/messages и /var/log/boot.log?
/var/log/messages в некоторых syslog-based системах содержит общие сообщения ядро Linux/services, /var/log/boot.log — boot messages, если такой файл ведётся. Эти пути не универсальны: на systemd-системе переносимее использовать journalctl -b и journalctl -k.
Верно или нет: и /tmp, и /var/tmp очищаются при загрузке системы?
Неверно. /tmp часто очищается при boot или по age policy, но это зависит от системы; /var/tmp предназначен для временных данных, которые должны переживать reboot, и обычно не очищается при каждой загрузке.
Как избавиться от zombie processes?
Zombie уже завершён, поэтому kill ему не поможет. Нужно найти PPID и добиться, чтобы parent вызвал wait() — обычно исправить или безопасно перезапустить родительский процесс; после смерти parent zombie будет переподчинён subreaper/PID 1 и reaped.
Как найти все процессы определённого пользователя, все Java-процессы и все zombie processes?
Пользователь: ps -u alice -f; Java: pgrep -a java; zombie: ps -eo pid,ppid,state,cmd | awk '$3 ~ /^Z/'. Для zombie затем смотрят PPID, потому что исправлять обычно нужно родителя.
Что возвращает malloc()?
malloc(size) возвращает указатель на область как минимум size байт либо NULL при ошибке. Память не инициализируется; освобождается free(). Успешный malloc при Linux overcommit ещё не гарантирует немедленное выделение физических pages.
Объясните системный вызов pipe(). Для чего он используется?
pipe(fd) создаёт однонаправленный kernel pipe: fd[0] — чтение, fd[1] — запись. После fork() процессы могут закрыть ненужные концы и обмениваться byte stream; обычный pipe не сохраняет message boundaries.
Что происходит при выполнении ls -l?
Shell разбирает команду и запускает ls, обычно через fork/exec. ls читает directory entries и для -l получает metadata объектов через stat-family interfaces, затем форматирует mode, owner/group, size и timestamps в stdout. Конкретные Linux syscalls могут быть getdents64, newfstatat и др.
В чём разница между MemFree и MemAvailable в /proc/meminfo?
MemFree — полностью неиспользуемая RAM. MemAvailable — оценка памяти, которую можно дать приложениям без существенного swapping: она включает free плюс reclaimable cache с учётом ядро Linux watermarks. Для memory pressure обычно полезнее MemAvailable.
В чём разница между paging и swapping?
Paging — управление памятью страницами, включая demand paging и перемещение отдельных pages. Историческое swapping означало выгрузку целого процесса, но современный Linux swap обычно работает с отдельными anonymous pages. Поэтому «Linux выгружает процессы целиком в swap» — миф.
Что такое OOM killer?
OOM killer (Out Of Memory killer) — механизм ядра Linux на случай, когда системе не удаётся выделить требуемую память даже после попыток освободить её. Тогда ядро выбирает процесс и завершает его, чтобы вернуть память системе. Выбор основан на оценке «стоимости» процесса (oom_score) с учётом его потребления памяти и настроек вроде oom_score_adj; это не просто «самый большой процесс». Поэтому OOM — признак реального дефицита памяти или слишком жёсткого лимита, а не обычный способ управления процессами.
Не запуская приведённую программу с одним вызовом fork(), определите, сколько раз будет напечатано слово yay.
Если один успешный fork() стоит перед единственным printf("yay"), после него два процесса и yay печатается 2 раза. Без исходного кода ответ условный: расположение вывода и неflush'енный stdio buffer могут изменить наблюдаемый результат.
Не запуская приведённую программу с одним вызовом fork(), определите, сколько процессов будет создано.
Один успешный fork() создаёт одного нового child: всего после вызова 2 процесса — parent и child. Поэтому «новых создано» — 1, «всего существует» — 2.
Не запуская приведённую программу с двумя вызовами fork(), определите, сколько раз будет напечатано слово yay.
Два последовательных успешных fork() без условий дают 4 процесса; если yay печатается один раз после обоих fork, он появится 4 раза. Без исходного кода нужно оговорить расположение print и возможную stdio buffering.
Не запуская приведённую программу с двумя вызовами fork(), определите, сколько процессов будет создано.
Два последовательных успешных fork() без условий дают 4 процесса всего: первый удваивает 1→2, второй 2→4. Новых дочерних процессов создано 3.
Что означает / в Linux FHS (Filesystem Hierarchy Standard)?
/ — root directory, вершина единого файловая система namespace. Все локальные и сетевые файловые системы подключаются в это дерево через точки монтирования; / не означает обязательно один физический диск.
Что хранится в /bin, /sbin, /usr/bin, /usr/sbin, /etc, /home, /var и /tmp?
/bin//sbin исторически — essential user/admin binaries, но часто symlink в /usr; /usr/bin и /usr/sbin — основная масса команд. /etc — конфигурация, /home — home пользователей, /var — изменяемые данные, /tmp — временные файлы.
Чем директория /tmp отличается от большинства других директорий?
/tmp предназначен для временных файлов, обычно world-writable со sticky bit 1777, и его содержимое нельзя считать постоянным. Оно может очищаться при reboot или по age policy; для временных данных, которые должны переживать reboot, используют /var/tmp.
Чем /proc отличается от обычных файловых систем?
/proc — virtual pseudo-файловая система, динамически предоставляемая ядро Linux, а не обычные данные на диске. Она содержит process/ядро Linux information и control interfaces: /proc/PID, /proc/meminfo, /proc/sys и т. п.
Какие инструменты вы используете для troubleshooting проблем с дисками и файловыми системами?
Сначала локализую слой: lsblk/blkid, mounts через findmnt, blocks/inodes через df -h/df -i. Затем kernel errors (journalctl -k), latency/utilization (iostat -xz 1), health диска и LVM/RAID status. Repair filesystem выполняю инструментом конкретной FS и обычно offline; исправление делаю только после подтверждения причины.
Какие инструменты вы используете для troubleshooting проблем с процессами?
Сначала нахожу PID и ресурс через ps, top/pidstat; затем смотрю state, threads и /proc/PID. Для зависания полезны strace -p PID, lsof, logs; для CPU hot path — perf, а также проверяю cgroup/ulimit и system-wide I/O/memory pressure. После локализации исправляю зависимость/лимит/конфиг или делаю controlled restart, а не начинаю с kill -9.
Процесс пишет в известный вам файл, но вы не знаете его PID. Как найти и завершить этот процесс?
lsof /path/to/file покажет процессы, держащие файл, и их PID. Убедившись, что найден нужный writer, сначала отправляют kill PID (SIGTERM) и проверяют graceful shutdown; SIGKILL — только если процесс не реагирует и это допустимо.
Что можно найти в /boot?
/boot обычно содержит ядро Linux images, initramfs/initrd, config/System.map и bootloader files; EFI System Partition может быть смонтирована как /boot/efi или /efi. Точный layout зависит от дистрибутива.
Что такое inode?
Inode — внутренняя структура файловой системы, описывающая файл или другой объект. В ней хранятся метаданные: тип, права, владелец, размер, timestamps, число hard links и информация о размещении данных. Имя файла не является частью inode: запись каталога связывает имя с номером inode. Поэтому один inode может иметь несколько имён через hard links.
Что из перечисленного не хранится в inode: link count, размер файла, имя файла, timestamp файла?
Имя файла не хранится в inode. Directory entry хранит name → inode number, а inode содержит link count, размер, timestamps и другую metadata.
Как проверить, какие диски сейчас смонтированы?
Современный удобный инструмент — findmnt; он показывает source, целевой системе, файловая система type и options текущих mounts. lsblk -f полезен для block devices, но не отображает все возможные виды mounts.
Команда mount не выводит ничего. Как ещё проверить текущие mount'ы?
Можно посмотреть /proc/self/mountinfo — полное kernel-представление mounts текущего namespace; более простой вариант — /proc/mounts. На практике удобнее findmnt, который форматирует эти данные.
В чём разница между soft link и hard link?
Hard link — ещё одно имя того же inode; symlink — отдельный inode, содержащий pathname целевой системе. Hard link обычно не пересекает файловые системы и не создаётся на directories, symlink может; удаление целевой системе ломает symlink, но не другие hard links.
Верно или нет: можно создать hard link на директорию?
Обычный hard link на директорию в Linux создать нельзя; filesystem/kernel запрещает это, чтобы не создавать циклы и не ломать дерево. . и .. управляются самой filesystem; bind mount — другой механизм.
Верно или нет: можно создать soft link между разными файловыми системами?
Верно: symlink хранит путь и может указывать через границу filesystem или даже на пока несуществующий target. Hard link ограничен одной filesystem, потому что ссылается на inode.
Верно или нет: у директории всегда как минимум две ссылки?
Для классических Unix disk filesystems каталог обычно имеет link count минимум 2: entry в родителе и .; subdirectories традиционно увеличивают его через ... Но слово «всегда» слишком сильное: некоторые Linux/virtual filesystems не обязаны поддерживать такую точную link-count семантику.
Что произойдёт с soft link и hard link после удаления исходного файла?
После удаления target symlink становится dangling. Hard link продолжает работать, потому что это равноправное имя того же inode; данные исчезают только при link count 0 и отсутствии открытых references.
Как проверить, какая файловая система используется для /home?
findmnt -T /home -o целевой системе,SOURCE,FSTYPE,OPTIONS покажет файловая система, содержащую /home, и её тип. df -T /home тоже подходит для простой проверки.
Что такое swap partition и для чего он используется?
Swap partition — раздел, активированный как swap area для вытеснения anonymous pages при memory pressure; также может участвовать в hibernation. Он медленнее RAM, а вместо partition можно использовать swap file.
Как создать новый пустой файл, файл с текстом без текстового редактора и файл заданного размера?
Пустой: touch file; с текстом: printf '%s\n' 'hello' > file; заданного логического размера: truncate -s 1G file. truncate может создать sparse file; для реального резервирования блоков на поддерживаемой FS — fallocate -l 1G file.
При создании файла вы получаете File system is full, но df показывает только 20% занятого места. В чём может быть проблема?
Первым делом df -i path: inodes могут закончиться при 20% занятых data blocks. Затем findmnt -T path, quotas, reserved space и состояние filesystem. Исправление зависит от подтверждения: например удалить/архивировать множество мелких файлов при 100% inode usage.
Как узнать размер определённой директории?
du -sh /path/dir показывает суммарное disk usage каталога в human-readable виде. Оно может отличаться от суммы logical sizes из-за sparse files, hard links, compression и allocation.
Что такое LVM?
LVM (Logical Volume Manager) — слой управления дисковым пространством между физическими дисками/разделами и файловыми системами. Сначала диски или разделы превращают в Physical Volumes (PV), затем объединяют их ёмкость в Volume Group (VG), а из общего пула создают Logical Volumes (LV), которые для ОС выглядят как блочные устройства. На LV уже можно создать файловую систему или использовать его иначе. Главное преимущество — объёмы легче расширять, перераспределять и дополнять новыми дисками, чем при жёсткой схеме обычных разделов.
Объясните понятия LVM: PV, VG и LV.
В LVM есть три основных уровня. PV (Physical Volume) — диск, раздел или другое блочное устройство, подготовленное для LVM. VG (Volume Group) — общий пул ёмкости, собранный из одного или нескольких PV. LV (Logical Volume) — выделенный из VG логический том, который система видит как блочное устройство; на нём, например, создают ext4/XFS и монтируют его. Mental model: PV → общий пул VG → нужные по размеру LV.
Что такое NFS и для чего он используется?
NFS позволяет клиенту монтировать экспортированный каталог удалённого сервера и работать с ним через файловая система API. Это удобно для shared data/home, но caching, locking, identity/security и отказоустойчивость зависят от версии и конфигурации; обычно используют NFSv4.x.
Как проверить использование ресурсов процессами?
Общий live-view — top; для измерений по процессам во времени — pidstat 1, с опциями для CPU/memory/I/O. Для конкретного PID полезны ps -p PID -o ... и /proc/PID; инструмент выбирают по ресурсу.
Как проверить disk I/O?
iostat -xz 1 показывает расширенную статистику block-device I/O каждую секунду; смотрят throughput/IOPS, await, queue и utilization. Чтобы найти процесс-источник, дополняют pidstat -d 1 или iotop.
Как проверить объём свободной памяти в системе и потребление памяти каждым процессом?
RAM: free -h, ориентируясь на available; процессы: ps -eo pid,comm,rss,vsz --sort=-rss или top. RSS может двойным счётом учитывать shared pages, поэтому для точного процесса полезен PSS из /proc/PID/smaps_rollup.
Как вывести список всех запущенных процессов?
ps -ef или ps aux выводят snapshot всех процессов в разных форматах. Для динамики используют top/pidstat, для дерева — pstree.
Как запустить процесс в background и зачем это делать?
command & запускает shell job в background и сразу возвращает prompt; jobs, fg, bg управляют им. Job связан с session, поэтому для переживания logout используют nohup/tmux, а для сервиса — systemd.
Как узнать, сколько памяти потребляет конкретный процесс?
ps -p PID -o pid,comm,rss,vsz,%mem даёт быструю оценку: RSS — resident memory, VSZ — virtual address space. Для shared memory точнее смотреть PSS в /proc/PID/smaps_rollup; единственного универсального числа «память процесса» нет.
Как пользовательский процесс выполняет привилегированную операцию, например чтение с диска?
User process делает привилегированную операцию через system call: CPU контролируемо переходит в ядро Linux mode, ядро Linux проверяет аргументы/permissions и выполняет операцию. Чтение файла обычно использует openat()/read(), но физического disk I/O может не быть, если данные уже в page cache (кэш файловых данных в RAM).