Как найти свой файл среди множества на сервере
Что проверяют
Умеете ли вы работать в консоли Linux-сервера и искать не вслепую, а по признакам: имени, времени, содержимому. Следом часто спрашивают, что делать, если сервис переименовал файл и имени вы не знаете.
Как отвечать
Начните с того, что сужает поиск: где сервис хранит файлы (конфиг, переменные окружения, том Docker) и когда вы свой файл создали. Дальше инструменты:
findпо имени:find /var/app/uploads -type f -iname "*report*", где-inameигнорирует регистр. При поиске от корня добавьте2>/dev/null, чтобы не утонуть в «Permission denied»;findпо времени:-mmin -15найдёт изменённые за последние 15 минут,-newer файлновее эталонного. Для тестировщика это самый полезный фильтр: вы знаете, когда запускали тест;- по размеру и владельцу:
-size +10M,-user appuser; - по содержимому:
grep -rl "run-4821" /var/log/appвыведет только имена файлов. Сжатые ротированные логи смотрят черезzgrep; - сортировка:
ls -lt | headпокажет последние изменённые файлы каталога; locate: быстро, но ищет по базе, которуюupdatedbобновляет по расписанию. Файл, созданный минуту назад, он не найдёт.
Главная мысль для QA: делайте свой файл находимым заранее. Уникальный маркер в имени или содержимом (id прогона, время), correlation id в запросе. Если сервис сохраняет загрузку под UUID, связь между вашим файлом и именем на диске ищите в ответе API, в базе или в логах. Если хранилище это S3-совместимый бакет, поиск идёт через aws s3 ls --recursive с фильтром, а не по диску.
Где спотыкаются
Запускают find / без ограничений на нагруженном проде: долго, грузит диск и выдаёт тысячи строк ошибок доступа.
Ищут на хосте, а файл лежит внутри контейнера или в volume. Сначала docker exec или путь тома из docker inspect.
Верят locate и делают вывод «файла нет», хотя индекс просто не обновлён.