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на базовом уровне обязательно.