Gymterview
middle

Какие полезные однострочники должен знать Java-разработчик?

Однострочники (one-liners) — это компактные комбинации команд, решающие конкретную практическую задачу в одну строку. Владение однострочниками отличает разработчика с реальным опытом эксплуатации систем от того, кто работает только в IDE.

Поиск в логах

Пример
# Найти последние 50 ошибок с контекстом (3 строки вокруг)
grep -C 3 "ERROR" app.log | tail -50

# Уникальные типы исключений с количеством
grep -oE "[A-Za-z]+Exception" app.log | sort | uniq -c | sort -rn

# Ошибки за последний час
awk -v date="$(date -d '1 hour ago' '+%Y-%m-%d %H')" '$0 >= date' app.log | grep ERROR

# Запросы дольше 1 секунды (парсинг из лога)
grep "completed in" app.log | awk -F'completed in ' '{print $2, $0}' | sort -rn | head -20

# Следить за ошибками в реальном времени
tail -f app.log | grep --line-buffered "ERROR\|WARN"

# Количество запросов в минуту из access.log
awk '{print $4}' access.log | cut -c1-18 | sort | uniq -c | sort -rn | head -20

Подсчёт строк кода

Пример
# Строки Java-кода (без пустых строк и комментариев)
find src -name "*.java" | xargs grep -v '^\s*$\|^\s*//' | wc -l

# Строки по типам файлов
find . -name "*.java" -o -name "*.xml" -o -name "*.yml" | \
    xargs wc -l | tail -1

# Топ-10 самых длинных файлов
find src -name "*.java" -exec wc -l {} + | sort -rn | head -11

# Количество файлов по расширению
find . -type f | sed 's/.*\.//' | sort | uniq -c | sort -rn | head -10

Работа с Git из командной строки

Пример
# Файлы, изменённые в последнем коммите
git diff --name-only HEAD~1

# Кто больше всех коммитил
git shortlog -sn --all

# Поиск по истории коммитов (кто добавил/удалил строку)
git log -S "password" --oneline

# Найти коммит, который сломал тест (git bisect)
git bisect start
git bisect bad HEAD
git bisect good v1.0

# Количество строк, изменённых автором
git log --author="developer" --pretty=tformat: --numstat | \
    awk '{added+=$1; deleted+=$2} END {print "Added:", added, "Deleted:", deleted}'

# Файлы, которые чаще всего менялись (hotspots)
git log --pretty=format: --name-only | sort | uniq -c | sort -rn | head -20

Анализ портов и сети

Пример
# Кто слушает порт 8080
lsof -i :8080
ss -tlnp | grep 8080

# Все слушающие порты
ss -tlnp
netstat -tlnp

# Проверить доступность хоста и порта
nc -zv hostname 8080
# Или через bash (без дополнительных утилит)
timeout 3 bash -c 'echo > /dev/tcp/hostname/8080' && echo "Open" || echo "Closed"

# DNS-запрос
dig example.com
nslookup example.com

# Трассировка маршрута
traceroute example.com

Работа с процессами и ресурсами

Процессы, диск, память
# Java-процессы с параметрами JVM
ps aux | grep "[j]ava" | grep -oE '\-Xm[sx][^ ]+'

# Использование диска по директориям (топ-10)
du -sh /var/* 2>/dev/null | sort -rh | head -10

# Найти файлы, занимающие больше всего места
find / -type f -size +100M 2>/dev/null | xargs ls -lhS

# Освободить место — найти и удалить старые логи
find /var/log -name "*.gz" -mtime +90 -delete

# Мониторинг использования памяти Java-процессом
while true; do ps -p $(pgrep -f app.jar) -o %mem,rss,vsz; sleep 5; done

Обработка данных

Пример
# Конвертация CSV в читаемую таблицу
cat data.csv | column -t -s ','

# Извлечь email-адреса из файла
grep -oE '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' file.txt

# Суммировать числа в столбце
awk -F',' '{sum+=$3} END {print sum}' data.csv

# Сравнить два конфигурационных файла
diff <(sort config1.yml) <(sort config2.yml)

# Заменить текст во всех файлах проекта
find . -name "*.java" -exec sed -i 's/oldMethod/newMethod/g' {} +

# Быстрый HTTP-сервер для текущей директории
python3 -m http.server 8000

На собеседовании: на Senior-позиции могут попросить решить задачу в терминале «на лету»: найти топ-5 IP-адресов в access.log, посчитать уникальные ошибки в логах, найти самый часто изменяемый файл в Git-истории. Практикуйте комбинации grep | sort | uniq -c | sort -rn | head — это универсальный паттерн для анализа частотности. Знание awk, sed и jq на базовом уровне обязательно.