Что делает оператор > в команде echo hi > file.txt?
показать ответ
Ответ: Перенаправляет вывод, перезаписывая файл. > перенаправляет stdout, перезаписывая файл; для дописывания используется >>, для ввода — <, для ошибок — 2>.
// interview
Пятнадцать вопросов, которые задают джунам, админам и будущим DevOps-инженерам: сначала попробуй ответить сам, потом раскрывай ответ — под каждым короткий разбор, почему так. Вопросы взяты из банка скилл-тестов Koddo, того же, по которому платформа оценивает уровень.
Ответ: Перенаправляет вывод, перезаписывая файл. > перенаправляет stdout, перезаписывая файл; для дописывания используется >>, для ввода — <, для ошибок — 2>.
Ответ: |. | (pipe) направляет stdout одной команды в stdin следующей; > перенаправляет в файл, ; разделяет команды, & запускает в фоне.
Ответ: SIGTERM (15). kill по умолчанию шлёт SIGTERM (15) — процесс может его перехватить и завершиться корректно; SIGKILL (9) неперехватываем.
Ответ: Чтобы показать конец файла и продолжать выводить дописываемые данные. tail -f сначала показывает конец файла, а затем следит за ростом файла и выводит новые данные, что удобно для просмотра журнала.
Ответ: rwxr-xr-x. 7=rwx для владельца, 5=r-x для группы и остальных (4+1, без записи); 755 — типичные права для исполняемого файла или каталога.
Ответ: source запускает в текущем шелле, а ./ — в дочернем подпроцессе. source (или .) выполняет скрипт в текущем шелле, поэтому его export и cd влияют на сессию; ./ порождает подпроцесс, чьи изменения окружения теряются после завершения.
Ответ: Перенаправляет stderr туда же, куда уже направлен stdout (в out.log). 2>&1 направляет дескриптор 2 (stderr) в текущее назначение дескриптора 1 (stdout), то есть в out.log; порядок важен — 2>&1 должно идти после > out.log.
Ответ: Hard link указывает на тот же inode и ломается только при удалении всех ссылок; symlink хранит путь и становится битой при удалении цели. Hard link разделяет inode с файлом, поэтому данные живут пока есть хоть одна ссылка; symlink — отдельный файл с путём, который повисает при удалении цели и может пересекать ФС.
Ответ: Процесс прерван по SIGINT (Ctrl+C): 128 + номер сигнала 2. При завершении сигналом N код возврата равен 128+N; 130 = 128+2 (SIGINT), 137 = 128+9 (SIGKILL).
Ответ: Проходить через каталог и обращаться к известным именам внутри него. Бит x на каталоге разрешает поиск имён и прохождение пути; r разрешает читать список имён, а для создания и удаления записей обычно нужны w и x.
Ответ: Файлы в каталоге может удалять/переименовывать только их владелец (или владелец каталога/root). Sticky-бит (ведущая 1, как в 1777) на каталоге ограничивает удаление/переименование файлов их владельцами, что и защищает общий /tmp от удаления чужих файлов.
Ответ: SIGTERM можно перехватить/проигнорировать; SIGKILL и SIGSTOP перехватить или заблокировать нельзя. SIGKILL (9) и SIGSTOP (19) обрабатываются ядром и не могут быть пойманы, заблокированы или проигнорированы; SIGTERM же штатно перехватывается для graceful shutdown.
Ответ: Имя исчезнет из каталога, но место не освободится, пока процесс не закроет дескриптор. rm снимает только ссылку из каталога; inode и блоки данных удаляются лишь когда счётчик ссылок и число открытых дескрипторов дойдут до нуля — поэтому 'df' покажет занятое место до закрытия fd.
Ответ: Zombie завершился, но его статус не считан родителем (reap); orphan — живой процесс, чей родитель умер и его усыновил init/PID 1. Zombie (статус Z) — уже мёртвый процесс, ждущий wait() от родителя, чтобы освободить запись в таблице; orphan — работающий процесс, перешедший к init (PID 1), который его в итоге и пожнёт.
Ответ: umask вычитается побитово из 666 для файлов: 666 & ~027 = 640 (rw-r-----). umask маскирует биты прав: для файлов базис 666, для каталогов 777; 666 AND NOT 027 = 640, то есть rw-r----- (группа без записи, остальные без доступа).