9 praktycznych sposobów na użycie polecenia Linux seq

Komenda seq to wszechstronne narzędzie do generowania sekwencji liczb, przydatne w różnych zastosowaniach, takich jak tworzenie plików testowych, skanowanie portów czy wykonywanie obliczeń matematycznych.
Komenda seq jest znacznie więcej niż prostym drukarką liczb. To podstawowy element, którego możesz użyć do tworzenia plików testowych, kontrolowania pętli, przeprowadzania skanów sieciowych i wykonywania obliczeń matematycznych. Oto kilka popularnych sposobów użycia komendy seq.
Podstawowa Generacja Liczb
W swojej istocie seq drukuje liczby w sekwencji. Wystarczy podać mu jedną liczbę, a on policzy od 1 do tej liczby. Na przykład:
seq 5Tego polecenia wydrukuje liczby od 1 do 5. To najprostsza forma, ale magia zaczyna się, gdy zmienisz wartość początkową, krok, format lub przekierujesz wynik do innych poleceń.
Na przykład, jeśli chcesz zacząć od konkretnej liczby, podaj wartość początkową jako pierwszy argument i końcową jako drugi.
seq 3 7
To wygeneruje liczby od 3 do 7 (tj. 3, 4, 5, 6, 7).
Czasami musisz pominąć liczby w sekwencji, na przykład generując tylko liczby parzyste lub licząc co pięć. Argument inkrementacji, umieszczony między wartościami początkową i końcową, to obsługuje. Na przykład, aby wygenerować liczby nieparzyste od 1 do 10, użyj kroku 2:
seq 1 2 10
To polecenie mówi seq, aby zaczynał od 1, kończył na 10, ale robił kroki co 2, produkując 1, 3, 5, 7 i 9.
Możesz także liczyć wstecz. Aby to zrobić, podaj wartość inkrementacji ujemnej w ten sposób:
seq 10 -1 1
To wydrukuje liczby od 10 do 1 z inkrementacją -1.
Generowanie Liczb Zmiennoprzecinkowych
Seq nie ogranicza się tylko do liczb całkowitych; łatwo obsługuje także liczby zmiennoprzecinkowe (dziesiętne). Jest to przydatne w obliczeniach naukowych lub gdy pracujesz z danymi wymagającymi precyzji dziesiętnej.
Na przykład, aby policzyć od 0,5 do 2,0 w krokach 0,3, użyj:
seq 0.5 0.3 2.0
A otrzymasz sekwencję liczb dziesiętnych o określonym kroku.
Używanie Niestandardowego Separatora
Domyślnie seq oddziela każdą liczbę znakiem nowej linii. Flaga -s (separator) pozwala zdefiniować niestandardowy separator. Na przykład, aby wygenerować liczby od 1 do 5 w jednej linii, oddzielone przecinkiem i spacją, użyj:
seq -s ", " 1 5Alternatywnie, możesz przekierować wynik do xargs, aby umieścić wszystkie liczby w jednej linii oddzielone spacjami. Xargs odczytuje elementy z wejścia standardowego i przekształca je w argumenty dla innego polecenia (domyślnie echo).
seq 1 10 | xargs
Generowanie Sformatowanych Sekwencji
Powiedzmy, że chcesz wygenerować liczby od 1 do 10, ale chcesz, aby wszystkie miały dwie cyfry z wiodącą zerem. Aby to osiągnąć, możesz użyć opcji -f wraz z specyfikatorem formatu, na przykład:
seq -f "%02g" 1 10
Gdzie %g jest standardowym formatem liczb, a 02 mówi seq, aby wypełnił liczbę do 2 cyfr z wiodącymi zerami.
Dla typowego zadania wypełniania wszystkich liczb wiodącymi zerami, aby miały tę samą szerokość, seq oferuje jeszcze prostszą flagę -w (równa szerokość).
seq -w 1 100
To polecenie zapewnia, że wszystkie liczby mają równą szerokość, dodając wiodące zera, co daje 001, 002 i 099 do 100.
Tego typu formatowanie jest również idealne do tworzenia plików z wiodącymi zerami, które są poprawnie sortowane. Łącząc seq z poleceniami touch i xargs, możesz wygenerować wiele pustych plików. Na przykład, aby stworzyć 5 pustych, zero-wypełnionych plików tekstowych, użyj:
seq -f "text_%02g.txt" 1 5 | xargs touch
Po wykonaniu tego będziesz mieć listę plików (text_01.jpg, text_02.jpg itd.), które zawsze będą sortować się w poprawnej kolejności numerycznej. Możesz także generować pliki z nazwami dat:
seq -f "2025-03-%02g.txt" 1 31 | xargs touch
Ta pętla wygeneruje pliki na każdy dzień marca 2025 roku.
Generowanie Plików Testowych z Tekstem
Oprócz generowania liczb, możesz użyć seq do tworzenia plików testowych z danymi zastępczymi. Wystarczy połączyć seq z potokiem i przekierowaniem razem z pętlą for.
Na przykład, aby przetestować skrypt, możesz potrzebować zastępczych plików z pewną zawartością. Ten skrypt tworzy pięć plików, z których każdy zawiera linię tekstu wskazującą jego numer:
for i in $(seq 1 5); do
echo "To jest plik testowy numer $i" > testfile_$i.txt
doneDodatkowo, zalecam również użycie opcji -w (seq -w 1 5), aby wypełnić liczby, aby pliki prawidłowo się sortowały.
Możesz również generować pliki z wieloma liniami zawartości. Poniższy skrypt tworzy pięć plików, z których każdy zawiera 100 unikalnie ponumerowanych linii:
for i in $(seq 1 5); do
for line in $(seq 1 100); do
echo "Plik $i, Linia $line: Jakieś losowe treści"
done > "plik_$i.txt"
doneTutaj zewnętrzna pętla iteruje przez liczby od 1 do 5 dla nazw plików, podczas gdy wewnętrzna pętla generuje 100 linii na plik, z wyjściem przekierowanym do pliku nazwanego na podstawie licznika zewnętrznej pętli.
Powtórz komendę określoną ilość razy
Czasami musisz uruchomić komendę wielokrotnie, gdy zależy ci tylko na powtórzeniu, a nie na rzeczywistych liczbach. Na przykład możesz testować opóźnienia sieciowe za pomocą ping lub uruchamiać skrypt wielokrotnie w celu sprawdzenia błędu. seq zapewnia czysty sposób na to, bez pisania tradycyjnej pętli for.
Na przykład, możesz użyć seq z xargs do testowania aplikacji pod kątem obciążenia lub sprawdzania, czy usługa startuje poprawnie.
seq 10 | xargs -I {} curl -s http://mojastrona.pl > /dev/nullTa komenda odwiedza stronę dziesięć razy, co może pomóc ci zweryfikować, czy twój serwer obsługuje równoczesne zapytania poprawnie.
seq również doskonale współpracuje z pętlami for, aby powtarzać akcje. Aby wydrukować "Witaj, świecie!" pięć razy, możesz użyć:
for i in $(seq 1 5); do
echo "Witaj, świecie!";
doneTo wydrukuje wiadomość pięć razy.
Tworzenie znaczników czasu lub przedziałów czasowych
Kolejny doskonały przypadek użycia seq to generowanie serii znaczników czasu, szczególnie podczas budowania danych testowych lub symulowania logów. Mogą one reprezentować sekundy, minuty lub dni.
Załóżmy, że potrzebujesz listy co 15 minut w godzinie do raportu.
seq -f "%02g" 0 15 59
To generuje 00, 15, 30 i 45.
Możesz także generować precyzyjne znaczniki czasu. Przykład ten wypisuje znacznik czasu dla każdej minuty w ciągu następnych 10 minut:
start=$(date +%s)
for i in $(seq 0 9); do
echo "$(date -d "@$((start + i*60))" +"%Y-%m-%d %H:%M:%S")"
doneSkrypt natychmiast wypisuje wszystkie 10 przyszłych znaczników czasu. Nie czeka minuty między wyjściami. Jeśli chcesz prawdziwego tickera, który wypisuje jedną linię na minutę, dodaj sleep 60 w pętli.
Aby utworzyć znaczniki czasu w formacie GG:MM dla całej godziny, możesz użyć prostą pętlę:
for minute in $(seq -f "%02g" 0 59); do
echo "14:$minute"
doneTo wyświetli 14:00, 14:01, aż do 14:59. To potężny sposób na generowanie uporządkowanych danych szeregów czasowych bezpośrednio z terminala.
Sprawdzanie dostępności portów
Jeśli jesteś administratorem systemu lub deweloperem, możesz również używać seq do skanowania zakresu portów i sprawdzania ich dostępności. Na przykład możesz potrzebować wdrożyć aplikację, ale nie jesteś pewien, który port jest wolny. Zeskanujmy zakres portów na twoim lokalnym komputerze, aby zobaczyć, które z nich są otwarte.
Możemy użyć seq, aby generować numery portów i przesyłać je do narzędzia sieciowego, takiego jak nc, aby sprawdzić połączenia.
for port in $(seq 8000 8010); do
nc -z -v -w 1 localhost $port &> /dev/null && echo "Port $port jest OTWARTY"
doneOto opis komendy:
- for port in $(seq 8000 8010): Przechodzi przez każdy numer portu.
- nc -z -v -w 1 localhost $port: To jest podstawowa komenda, która próbuje nawiązać połączenie.
- -z: Skanuje usługi nasłuchujące bez wysyłania danych.
- -v: Zapewnia szczegółowy wynik (co ukrywamy).
- -w 1: Ustawia limit czasu na 1 sekundę.
- &> /dev/null: Przekierowuje cały wynik z nc, abyśmy widzieli tylko naszą końcową wiadomość.
- && echo "Port $port jest OTWARTY": Operator && zapewnia, że komenda echo działa tylko, jeśli komenda nc zakończy się sukcesem (tj. port jest otwarty).
Te metody wymagają odpowiednich uprawnień i narzędzi. Używaj ich odpowiedzialnie i tylko na systemach, które posiadasz lub masz pozwolenie na testowanie.
Alternatywnie, możesz użyć cechy specyficznej dla Basha, która nie wymaga nc:
for port in $(seq 8000 8100); do
(echo > /dev/tcp/localhost/$port) &> /dev/null && echo "Port $port jest otwarty"
doneDo poważnego skanowania portów, powinieneś używać dedykowanych narzędzi.
nmap, ale do szybkich sprawdzeń podczas rozwoju, ta metoda seq działa świetnie.
Przechodzenie przez Zakresy w Skryptach
Chociaż Bash ma swoje własne sposoby tworzenia pętli, używanie seq jest często bardziej przenośne i czytelne, zwłaszcza dla złożonych zakresów lub liczb zmiennoprzecinkowych. Podczas pisania skryptów, seq sprawia, że pętlowanie po zakresach numerycznych jest czyste i jasne.
Na przykład, aby przetworzyć wsad przedmiotów pomiędzy dwoma punktami, możesz zdefiniować zmienne START i END. Pętla zajmie się resztą:
#!/bin/bash
START_ITEM=25
END_ITEM=75
echo "Rozpoczynam przetwarzanie przedmiotów od $START_ITEM do $END_ITEM..."
for item_number in $(seq $START_ITEM $END_ITEM); do
echo "Przetwarzanie przedmiotu #$item_number..."
sleep 0.1
done
echo "Wszystkie przedmioty przetworzone!"Ten skrypt jest łatwy w utrzymaniu, wystarczy zmienić zmienne na górze.
Dodatkowo, możesz zastosować ten sam pomysł w rzeczywistych scenariuszach, takich jak przetwarzanie danych wsadowych. Na przykład, możesz sprawdzić użycie dysku dla serii ponumerowanych katalogów używając tego:
for i in $(seq 1 10); do
du -sh /var/log/archive_$i 2>/dev/null
doneDzięki wsparciu dla wypełniania, możesz utrzymać wszystko starannie uporządkowane. Tworzenie codziennych kopii zapasowych na cały miesiąc staje się proste dzięki:
for day in $(seq -w 1 31); do
tar -czf backup_2025-09-$day.tar.gz /data
doneTa jedna linijka tworzy 31 skompresowanych archiwów z poprawnie sformatowanymi nazwami (backup_2025-09-01.tar.gz itd.), co ułatwia sortowanie i odnajdywanie.
Dzielenie Plików na Podstawie Linii
Jeśli potrzebujesz podzielić duży plik na mniejsze kawałki, seq może pomóc Ci obliczyć zakresy linii dla każdego kawałka. Chociaż polecenie split zostało zaprojektowane do tego celu, używanie seq oferuje większą kontrolę nad procesem i nazewnictwem plików.
Na przykład, aby podzielić bigfile na kawałki po 100 linii, uruchom to:
lines=$(wc -l < bigfile)
for start in $(seq 1 100 $lines); do
end=$((start + 99))
sed -n "${start},${end}p" bigfile > chunk_$(printf "%04d" $start).txt
doneTen skrypt najpierw uzyskuje całkowitą liczbę linii. Pętla for następnie używa seq do generowania numeru początkowego dla każdego kawałka (1, 101, 201 itd.). W pętli, sed wyciąga ten blok linii i zapisuje go do unikalnie nazwanym pliku.
Wykonywanie Operacji Matematycznych
seq to świetny towarzysz dla kalkulatorów wiersza poleceń, takich jak bc i awk. Możesz przesłać serię liczb bezpośrednio do innego programu w celu przeprowadzenia obliczeń.
Aby zsumować wszystkie liczby od 1 do 100, użyj tego:
seq -s "+" 1 100 | bc
Tutaj, zamiast oddzielać liczby nowymi liniami, umieszczamy znak + między nimi. Wynik to pojedynczy ciąg przesyłany jako wejście do bc, które ocenia wyrażenie.
Z awk, możesz osiągnąć ten sam wynik:
seq 1 100 | awk '{s+=$1} END{print s}'Ten schemat generowania, formatowania i obliczania jest niezwykle przydatny do szybkiej analizy danych w wierszu poleceń.
Chociaż seq wydaje się być drobnym narzędziem, elegancko rozwiązuje wiele małych, powtarzalnych problemów. Łączy się z innymi poleceniami systemu Linux, aby tworzyć potężne jednorazowe skrypty, czyniąc go niezbędnym narzędziem dla każdego użytkownika wiersza poleceń.
Jeśli ciekawią Cię artykuły podobne do 9 praktycznych sposobów na użycie polecenia Linux seq, zajrzyj do kategorii Linux i odkryj jeszcze więcej interesujących treści.
- Podstawowa Generacja Liczb
- Generowanie Sformatowanych Sekwencji
- Generowanie Plików Testowych z Tekstem
- Powtórz komendę określoną ilość razy
- Tworzenie znaczników czasu lub przedziałów czasowych
- Sprawdzanie dostępności portów
- Przechodzenie przez Zakresy w Skryptach
- Dzielenie Plików na Podstawie Linii
- Wykonywanie Operacji Matematycznych
Dodaj komentarz

Możesz być zainteresowany