9 Praktiske Måder at Bruge Linux seq Kommandoen

- Grundlæggende Nummer Generation
- Generere Formaterede Sekvenser
- Generere Testfiler Med Tekst
- Gentage en kommando en bestemt antal gange
- Oprette tidsstempler eller tidsintervaller
- Tjekke porttilgængelighed
- Gennemløb af beregnede områder i scripts
- Del filer baseret på linjer
- Udfør matematiske operationer
Seq-kommandoen tilbyder alsidige funktioner til nummergenerering, testfiloprettelse, matematiske beregninger og meget mere, hvilket gør den til en uundgåelig del af enhver Linux-brugers værktøjskasse.
seq-kommandoen er langt mere end en simpel nummerskriver. Det er en grundlæggende byggesten, du kan bruge til at oprette testfiler, styre løkker, udføre netværksscanninger og lave matematiske beregninger. Her er nogle almindelige måder at bruge seq-kommandoen på.
Grundlæggende Nummer Generation
I sin essens printer seq numre i rækkefølge. Du skal kun give den et enkelt nummer, og den tæller fra 1 op til det nummer. For eksempel:
seq 5
Dette printer numre fra 1 til 5. Det er den simpleste form, men magien begynder, når du justerer start, trin, format eller leder output ind i andre kommandoer.
For eksempel, hvis du vil starte fra et specifikt nummer, skal du angive et startnummer som det første argument og et slutnummer som det andet.
seq 3 7
Dette vil generere numre fra 3 til 7 (dvs. 3, 4, 5, 6, 7).
Nogle gange skal du springe numre over i en sekvens, som at generere kun lige numre eller tælle med femmere. Increments-argumentet, placeret mellem start- og slutværdierne, håndterer dette. For eksempel, for at generere ulige numre fra 1 til 10, brug et trin på 2:
seq 1 2 10
Denne kommando fortæller seq at starte ved 1, gå op til 10, men tage trin på 2, hvilket giver 1, 3, 5, 7 og 9.
Du kan også tælle baglæns. For at gøre dette, angiv et negativt increment-værdi sådan her:
seq 10 -1 1
Dette printer numre fra 10 ned til 1 med et increment på -1.
Generere Flydende Tal
seq er ikke begrænset til hele tal; det håndterer flydende (decimaltal) tal lige så nemt. Dette er nyttigt til videnskabelige beregninger eller når du arbejder med data, der kræver decimalpræcision.
For eksempel, for at tælle fra 0.5 til 2.0 i trin på 0.3, kør:
seq 0.5 0.3 2.0
Og du får en sekvens af decimaler med specifik trin størrelse.
Brug af en Tilpasset Separator
Som standard adskiller seq hvert nummer med et linjeskift-tegn. -s (separator) flaget lader dig definere en tilpasset separator. For eksempel, for at generere numre fra 1 til 5 på en enkelt linje adskilt af et komma og et mellemrum, kør:
seq -s ", " 1 5
Alternativt kan du lede output til xargs for at placere alle numre på en enkelt linje adskilt af mellemrum. xargs læser emner fra standardinput og konverterer dem til argumenter for en anden kommando (som standard echo).
seq 1 10 | xargs
Generere Formaterede Sekvenser
Lad os sige, at du vil generere numre fra 1 til 10, men du vil have dem alle til at være to cifre lange med et foranstillet nul. For at opnå dette kan du bruge -f muligheden sammen med en format specificering sådan her:
seq -f "%02g" 1 10
Her er %g den standard nummerformat, og 02 fortæller seq at fylde nummeret op til at være 2 cifre bredt med foranstillede nuller.
Til den almindelige opgave at fylde alle numre med foranstillede nuller for at have samme bredde, giver seq det endnu enklere -w (ligebredde) flag.
seq -w 1 100
Denne kommando sikrer, at alle numre har ligebredde ved at tilføje foranstillede nuller, hvilket giver 001, 002 og 099 til 100.
Denne type formatering er også perfekt til at oprette nul-pudede filer, der sorterer korrekt. Ved at kombinere seq med touch og xargs kan du generere flere tomme filer. For eksempel, for at oprette 5 tomme, nul-pudede tekstfiler, kør dette:
seq -f "text_%02g.txt" 1 5 | xargs touch
Efter at have kørt dette, vil du have en liste over filer (text_01.jpg, text_02.jpg osv.), der altid vil blive sorteret i den korrekte numeriske rækkefølge. Du kan også generere filer med datobaserede navne:
seq -f "2025-03-%02g.txt" 1 31 | xargs touch
Denne løkke giver dig filer for hver dag i marts 2025.
Generere Testfiler Med Tekst
Udover at generere numre kan du bruge seq til at oprette testfiler med dummy-data. Kombiner blot seq med piping og omdirigering sammen med for-løkken.
For eksempel, for at teste et script, kan du have brug for dummy filer med noget indhold. Dette script opretter fem filer, hver indeholdende en linje tekst, der angiver dets nummer:
for i in $(seq 1 5); do
echo "Dette er testfil nummer $i" > testfile_$i.txt
done
Derudover anbefaler jeg også at bruge -w muligheden (seq -w 1 5) for at fylde numre, så filerne sorterer.
Fint.
Du kan også generere filer med flere linjer indhold. Nedenstående script opretter fem filer, hver med 100 unikt nummererede linjer:
for i in $(seq 1 5); do
for line in $(seq 1 100); do
echo "Fil $i, Linje $line: Nogle tilfældige indhold her"
done > "fil_$i.txt"
done
Her itererer den ydre løkke over tallene 1 til 5 for filnavnene, mens den indre løkke genererer 100 linjer pr. fil, med output omdirigeret til en fil navngivet baseret på den ydre løkks tæller.
Gentage en kommando en bestemt antal gange
Nogle gange skal du køre en kommando flere gange, når du kun er interesseret i gentagelsen og ikke de faktiske tal. For eksempel kan du teste netværkslatens med ping eller køre et script gentagne gange for at tjekke for en fejl. seq giver en ren måde at gøre dette uden at skrive en traditionel for-løkke.
For eksempel kan du bruge seq med xargs til stresstest af applikationer eller tjekke, om en tjeneste starter korrekt.
seq 10 | xargs -I {} curl -s http://mywebsite.com > /dev/nullDenne kommando rammer websitet ti gange, hvilket kan hjælpe dig med at bekræfte, om din webserver håndterer samtidige anmodninger korrekt.
seq parrer også smukt med for-løkker til at gentage handlinger. For at udskrive Hej, Verden! fem gange kan du bruge:
for i in $(seq 1 5); do
echo "Hej, verden!";
done
Denne udskriver beskeden fem gange.
Oprette tidsstempler eller tidsintervaller
Et andet glimrende anvendelsesområde for seq er at generere en serie af tidsstempler, især når du bygger testdata eller simulerer logfiler. De kan repræsentere sekunder, minutter eller dage.
Antag, at du har brug for en liste over hver 15-minutters interval i en time til en rapport.
seq -f "%02g" 0 15 59
Dette producerer 00, 15, 30 og 45.
Du kan også generere præcise tidsstempler. Dette eksempel udskriver et tidsstempel for hvert minut over de næste 10 minutter:
start=$(date +%s)
for i in $(seq 0 9); do
echo "$(date -d "@$((start + i*60))" +"%Y-%m-%d %H:%M:%S")"
done
Scriptet udskriver alle 10 fremtidige tidsstempler med det samme. Det venter ikke et minut mellem output. Hvis du ønsker en realtids ticker, der udskriver en linje pr. minut, skal du tilføje sleep 60 inde i løkken.
For at oprette tidsstempler i HH:MM-format for en fuld time kan du bruge en simpel løkke:
for minut in $(seq -f "%02g" 0 59); do
echo "14:$minut"
done
Dette vil liste 14:00, 14:01, hele vejen til 14:59. Det er en effektiv måde at generere strukturerede tidsserie-data direkte fra dit terminal.
Tjekke porttilgængelighed
Hvis du er systemadministrator eller udvikler, kan du også bruge seq til at scanne et interval af porte og kontrollere deres tilgængelighed. For eksempel, hvis du skal implementere en applikation men ikke er sikker på, hvilken port der er ledig. Lad os scanne et interval af porte på din lokale maskine for at se, hvilke der er åbne.
Vi kan bruge seq til at generere portnumre og pipette dem til et netværksværktøj som nc for at kontrollere forbindelser.
for port in $(seq 8000 8010); do
nc -z -v -w 1 localhost $port &> /dev/null && echo "Port $port er ÅBEN"
done
Her er en gennemgang af kommandoen:
- for port in $(seq 8000 8010): Gennemgår hvert portnummer.
- nc -z -v -w 1 localhost $port: Dette er kernek kommandoen, der forsøger en forbindelse.
- -z: Scanner efter lytningstjenester uden at sende data.
- -v: Giver detaljeret output (som vi skjuler).
- -w 1: Sætter en timeout på 1 sekund.
- &> /dev/null: Omdirigerer al output fra nc, så vi kun ser vores slutbesked.
- && echo "Port $port er ÅBEN": && operatoren sikrer, at echo-kommandoen kun kører, hvis nc-kommandoen lykkes (dvs. porten er åben).
Diss metoder kræver passende rettigheder og værktøjer. Brug dem ansvarligt og kun på systemer, du ejer eller har tilladelse til at teste.
Alternativt kan du bruge en Bash-specifik funktion, der ikke kræver nc:
for port in $(seq 8000 8100); do
(echo > /dev/tcp/localhost/$port) &> /dev/null && echo "Port $port er åben"
done
For seriøs portscanning bør du bruge dedikerede værktøjer.
nmap, men til hurtige tjek under udviklingen, fungerer denne seq-metode glimrende.
Gennemløb af beregnede områder i scripts
Mens Bash har sine egne måder at skabe løkker på, er det ofte mere portabelt og læseligt at bruge seq, især til komplekse områder eller flydende tal. Når man skriver scripts, gør seq gennemløb af numeriske områder klart og tydeligt.
For eksempel, for at bearbejde en batch af emner mellem to punkter, kan du definere START- og END-variabler. Løkken klarer resten:
#!/bin/bash
START_ITEM=25
END_ITEM=75
echo "Starter med at behandle emner fra $START_ITEM til $END_ITEM..."
for item_number in $(seq $START_ITEM $END_ITEM); do
echo "Behandler emne #$item_number..."
sleep 0.1
done
echo "Alle emner er behandlet!" Denne script er nem at vedligeholde, du skal kun ændre variablerne øverst.
Desuden kan du anvende den samme idé i virkelige scenarier som batch databehandling. For eksempel kan du tjekke diskbrugen for en række nummererede biblioteker ved at bruge dette:
for i in $(seq 1 10); do
du -sh /var/log/archive_$i 2>/dev/null
done Da seq understøtter udfyldning, kan du holde alt pænt ordnet. At lave daglige sikkerhedskopier for en hel måned bliver ligetil med:
for day in $(seq -w 1 31); do
tar -czf backup_2025-09-$day.tar.gz /data
done Denne én-liner opretter 31 komprimerede arkiver med korrekt formaterede navne (backup_2025-09-01.tar.gz, osv.), hvilket gør sortering og hentning meget nemmere.
Del filer baseret på linjer
Hvis du har brug for at opdele en stor fil i mindre bidder, kan seq hjælpe dig med at beregne linjeområderne for hver bid. Mens split-kommandoen er designet til dette, giver brugen af seq mere granulær kontrol over processen og filnavngivning.
For eksempel, for at opdele bigfile i bidder af 100 linjer hver, kan du køre dette:
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
done Denne script får først det samlede antal linjer. For-løkken bruger derefter seq til at generere startlinjenummeret for hver bid (1, 101, 201, osv.). Inden i løkken udtrækker sed den blok af linjer og gemmer den i en unikt navngivet fil.
Udfør matematiske operationer
seq er en god følgesvend for kommandolinje-kalkulatorer som bc og awk. Du kan lede en række tal direkte ind i et andet program for at udføre en beregning.
For at summere alle tal fra 1 til 100, brug dette:
seq -s "+" 1 100 | bc
Her, i stedet for at adskille tal med nye linjer, placerer vi et + tegn imellem dem. Udfaldet er en enkelt streng sendt som input til bc, som evaluerer udtrykket.
Med awk kan du opnå det samme resultat:
seq 1 100 | awk '{s+=$1} END{print s}'Denne mønster med at generere, formatere og beregne er ekstremt nyttig til hurtig dataanalyse på kommandolinjen.
Selvom seq virker som et mindre værktøj, løser det elegant mange små, gentagne problemer. Det kombineres med andre Linux-kommandoer for at skabe kraftfulde én-linere og scripts, hvilket gør det til et essentielt værktøj for enhver kommandolinje-bruger.

Skriv et svar