Гид по технологиям

Команда seq в Linux: руководство и примеры

6 min read Linux Обновлено 04 Jan 2026
Seq в Linux — руководство и примеры
Seq в Linux — руководство и примеры

Иллюстрация: использование seq в Linux

Что такое команда seq?

Команда seq — простая утилита GNU coreutils, которая выводит в stdout последовательность чисел по заданным параметрам. По входным аргументам seq формирует линейный набор значений и печатает их в виде строки или в несколько строк. Простые применения — генерация индексов, имен файлов, наборов IP:порт, тестовых списков.

Определение в одной строке: seq выводит числовую последовательность; параметры управляют началом, шагом, форматом и разделителем.

Почему использовать seq вместо цикла?

  • Производительность: seq написан на C и эффективен при генерации больших объёмов данных; он часто быстрее shell-циклов.
  • Простота: короткая и декларативная запись вместо многословного for/while в bash.
  • Совместимость: удобно комбинируется с xargs, paste, awk, perl, printf и другими инструментами.

Важно: seq — инструмент генерации, а не вычислительная машина; для сложных вычислений лучше использовать awk, bc или Python.

Как использовать seq в Linux

Основной синтаксис

seq [опции] числа
  • Опции — флаги типа -s, -f, -w, –help.
  • Числа — аргументы в одной из форм: last; first last; first increment last.

Примеры генерации списка чисел

  1. Один аргумент (верхняя граница):
seq 5

Результат:

1
2
3
4
5
  1. Два аргумента (нижняя и верхняя границы):
seq 4 8

Результат:

4
5
6
7
8
  1. Три аргумента (начало, шаг, конец):
seq 3 2 13

Результат:

3
5
7
9
11
13

Seq умеет уменьшать последовательность, если шаг отрицательный:

seq 10 -2 2

Результат:

10
8
6
4
2

Поменять разделитель между числами

По умолчанию разделитель — перевод строки. Флаг -s задаёт собственный разделитель.

seq -s . 3 7

Выведет:

3.4.5.6.7

Учтите интерпретацию оболочкой: тильда (~) разворачивается в путь домашнего каталога, если не взята в кавычки. Пример неверного и верного варианта:

seq -s ~ 3 7

Может дать неожиданный результат (вставка /home/…), тогда используйте кавычки:

seq -s '~' 3 7

Результат:

3~4~5~6~7

Настроить формат вывода

Флаг -f принимает шаблон форматирования, совместимый с printf (например, %g, %f, %03d и т.д.). По умолчанию seq сам выбирает формат по входным числам (целые или с плавающей точкой).

seq 0.1 0.1 0.5

Выведет:

0.1
0.2
0.3
0.4
0.5

Принудительный формат с фиксированной точностью:

seq -f %0.2f 4 7

Результат:

4.00
5.00
6.00
7.00

Используйте %g или %d для целых, %f для плавающей точки, добавляйте ширину и точность по требованиям.

Выравнивание ширины

Флаг -w добавляет ведущие нули так, чтобы все строки имели одинаковую ширину, соответствующую наибольшему значению.

seq -w 1 100 1000

Результат (фрагмент):

0001
0101
0201
0301
...
0901

Быстрая справка

seq --help

Покажет доступные опции и краткие пояснения.

Скриншот man страницы seq

Практические примеры

Ниже — набор реальных сценариев и шаблонов использования seq в связке с другими утилитами.

Сложение ряда чисел через expr

Seq может быть использован как генератор выражения для expr:

expr `(seq -s " + " 1 100)`

Здесь seq формирует строку “1 + 2 + 3 + … + 100”, а expr вычисляет сумму. Такой приём удобен для быстрых арифметических агрегатов без написания скрипта.

Быстро создать множество файлов

Создать 10 файлов file1.txt … file10.txt:

touch $(seq -f "file%g.txt" 1 10)

Touch создаст список файлов, сгенерированных seq.

Иллюстрация: создание файлов с помощью touch и seq

Генерация списков IP:порт для сканирования

Пример создания списка портов для IP 1.2.3.4:

seq -f 1.2.3.4:%g 1 65535

Вы получите 65535 строк с портами от 1 до 65535. Далее результат можно подавать в xargs/parallel для параллельной проверки.

Иллюстрация: seq в bash-скрипте для генерации адресов

Интеграция с xargs и parallel

Пример запуска команды по списку результатов seq (последовательный вариант):

seq 1 100 | xargs -n1 -I{} echo file{}

Для параллельного выполнения используйте GNU parallel:

seq 1 100 | parallel -j8 do_something {}

Математические операции и преобразования

Seq удобно комбинировать с awk, если нужны фильтрация или более сложные вычисления:

seq 1 10 | awk '{print $1*$1}'

Выведет квадраты чисел 1..10.

Примеры снижения ошибок и нестандартных кейсов

  • Тильда и символы оболочки: берите разделители в кавычки.
  • Плавающая точка: сравнения с плавающей точкой могут давать неожиданные числа из-за характеристик представления чисел с плавающей точкой.
  • Очень большие последовательности: seq стримит вывод, но дальнейшая обработка (например, хранение в массиве в bash) может привести к переполнению памяти.

Когда seq не подходит (контрпример)

  • Нужна сложная логика генерации (зависимость каждого элемента от предыдущих сложнее арифметической прогрессии) — лучше awk, Python.
  • Нужно гарантировать точную арифметику с плавающей точкой с высокой точностью — лучше bc или Python Decimal.
  • Работа с табличными наборами данных и сложной фильтрацией — awk, perl или pandas подходят лучше.

Альтернативные подходы

  • Brace expansion (встроено в bash): {1..10} — удобно для небольших статичных наборов, но не поддерживает дробные шаги.
  • awk: более гибок для вычислений и форматирования.
  • perl/python: для генерации сложных наборов с логикой.
  • seq (GNU) vs printf-подход: printf “%03d\n” {1..100} — полезен, если нужен формат без внешних инструментов.

Сравнение по простоте и гибкости:

  • Простота: brace expansion > seq > awk
  • Гибкость: awk/python > seq > brace expansion
  • Производительность при генерации большого списка: seq часто быстрее, чем цикл в bash

Мини-методология выбора

  1. Нужно ли простое линейное перечисление? — seq.
  2. Нужны дробные шаги или шаблон вывода? — seq с -f.
  3. Нужна сложная логика или фильтрация? — awk или Python.
  4. Нужны имена файлов в shell — touch + seq или printf + brace.

Рольные чек-листы

Сисадмин:

  • Использую seq для массовых операций (создание пользователей, файлов, проверка портов).
  • Всегда проверяю выходной поток через head/tail перед применением команд вроде rm/xargs.

Разработчик/скриптер:

  • Применяю -f для нужного шаблона и -s для объединения в одно выражение.
  • Избегаю сохранения больших последовательностей в массивы bash.

Сетевая инженер:

  • Генерирую списки IP:порт и подаём в nmap/xargs/parallel.
  • Проверяю лимиты и не запускаю массовые сканирования без throttling.

Критерии приёмки

Если скрипт использует seq для генерации ресурсов, примем, если:

  • Список генерируется корректно для крайних значений.
  • Формат соответствует ожидаемому (проверка шаблона -f).
  • Нет утечек памяти (результат не накапливается в RAM).
  • Скрипт безопасно обрабатывает специальные символы (кавычки/тильда).

Чек-лист безопасности и риски

  • Не подставляйте вывод seq напрямую в команды удаления без проверки.
  • При генерации адресов/портов для сканирования соблюдайте политику организации и законы.
  • Ограничивайте параллельные вызовы — перегрузка сети или целевых сервисов.

Факто-бокс

  • Максимальный порт TCP/UDP: 65535 — часто используется при генерации списка портов.
  • seq поддерживает целые и дробные шаги; формат задаётся через -f.
  • Вывод seq можно стримить, он не требует большого объёма оперативной памяти сам по себе.

Шаблоны и сниппеты (cheat sheet)

  • Простая последовательность:
seq 1 10
  • С шагом:
seq 0 0.5 3
  • С форматом и шириной:
seq -w -f %03g 1 100
  • Создать файлы:
touch $(seq -f "file%g.txt" 1 10)
  • Вставить оператор между числами (для вычислений):
expr `(seq -s " + " 1 100)`
  • Генерация IP:порт:
seq -f 192.168.5.%g 1 254

Галерея пограничных случаев

  • Нулевой шаг: seq 1 0 10 — вызовет ошибку.
  • Дробный шаг при больших длинах может привести к накоплению ошибок округления.
  • Отрицательные границы и шаги работают, если логика арифметики соблюдена.

Короткий глоссарий

  • Формат: шаблон printf-подобной строки, задающий формат вывода (например, %g, %f).
  • Разделитель: строка, которую seq вставляет между элементами с -s.
  • Шаг: приращение между последовательными значениями.

Заключение

Seq — компактный и быстрый инструмент для генерации числовых последовательностей в терминале. Он особенно полезен в связке с другими утилитами Linux: touch, xargs, parallel, awk и т.д. Для простых линейных наборов и массовых операций seq часто предпочтительнее shell-циклов. В тех сценариях, где требуется сложная логика или точная арифметика с плавающей точкой, рассмотрите awk или Python.

Показатель скорости генерации списка чисел с помощью seq

Краткий совет: используйте -s для безопасных разделителей в кавычках, -f для форматирования и -w для выравнивания ширины. Перед применением массовых изменений всегда тестируйте вывод через head.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство