Linux: рабочая памятка инженера
Команда полезна только вместе с моделью: процесс имеет PID, открытые files/descriptors, environment и права; сеть имеет sockets; systemd управляет services; filesystem хранит owner/group/mode.
Файлы и поиск
pwd
ls -la
find . -type f -name '*.log'
rg 'ERROR|Exception' ./logs
du -sh ./*
df -hdu показывает занятое файлами в дереве, df — состояние filesystem. Удалённый, но ещё открытый процессом файл освобождает место только после закрытия descriptor; это можно увидеть через lsof.
Безопасные операции:
cp -a source backup
mkdir -p ./var/data
mv old-name new-nameПеред рекурсивным удалением сначала вывожу точный resolved target. Не запускаю destructive-команду с пустой переменной, широким glob или неизвестным рабочим каталогом.
Процессы
ps aux
pgrep -af java
top
kill -TERM 12345
kill -KILL 12345SIGTERM даёт процессу шанс завершиться корректно; SIGKILL ядро применяет немедленно, обработать его нельзя. Высокий load average не равен CPU usage: в него могут входить задачи, ожидающие uninterruptible I/O.
Сервисы и журналы
systemctl status demo.service
journalctl -u demo.service --since '10 minutes ago'
journalctl -u demo.service -fСначала читаю status и свежие logs, затем конфигурацию unit и environment. Бесконечный restart loop способен скрыть исходную ошибку и усилить нагрузку.
Сеть
ss -lntp
getent hosts api.example.test
nc -vz api.example.test 443
curl -v --connect-timeout 3 "$DEMO_ENDPOINT/health"Порядок проверки: DNS → route/connect → TLS → HTTP → application. См. Веб протоколы.
Права
id
stat ./app.jar
chmod u+x ./mvnwВ rwxr-x--- первые три бита относятся к owner, затем group, затем others. chmod 777 маскирует причину и расширяет доступ; сначала проверяю owner/group и требуемую операцию.
Потоки данных
command >stdout.log 2>stderr.log
command 2>&1 | tee combined.log> перезаписывает файл, >> дописывает. Pipeline по умолчанию может вернуть status последней команды; в скриптах учитываю set -o pipefail.
Типичные сбои
- Файл существует, но процесс не имеет execute/search permission на родительский каталог.
- Порт слушается только на
127.0.0.1. - Диск “полон” по inodes, хотя свободны гигабайты.
- Java-процесс убит OOM killer; application log обрывается без stack trace.
- Скрипт зависит от интерактивного shell и падает под systemd/CI.
Вопросы для собеседования
Чем SIGTERM отличается от SIGKILL? Первый можно обработать для graceful shutdown, второй — нельзя.
Почему место не освободилось после удаления log? Процесс продолжает держать открытый descriptor.
Чем stdout отличается от stderr? Это отдельные file descriptors 1 и 2, их можно перенаправлять независимо.
Что показывает ss -lntp? Слушающие TCP sockets и, при достаточных правах, процессы.
Зачем execute bit каталогу? Он разрешает проход и доступ к entries по имени.