3 Linux-kommandoer, du har overset for længe (men kan huske på få sekunder)

Indeks
  1. tac — Læs filer i omvendt rækkefølge
    1. Vend enhver fil, så de nyeste linjer kommer først
  2. shuf — Randomiser dine input
    1. Vælg, bland og tag prøver af linjer uden at skrive scripts
  3. timeout — Sæt en klokke på kommandoer
    1. Stop ubudne kommandoer før de hænger din terminal
    2. Tre små kommandoer der sparer tid hver dag

Opdag tre undervurderede Linux-kommandoer — tac, shuf og timeout — der effektivt løser specifikke opgaver og hurtigt kan forbedre din produktivitet.

Linux er spækket med små værktøjer, men de fleste af os bruger kun en håndfuld. Mange nyttige, men glemte kommandoer findes. Tre eksempler — tac, shuf og timeout — løser konkrete problemer med en enkelt linje og kræver kun få sekunder at mestre. De kunne tage plads i dit arsenal af kommandoer.

tac — Læs filer i omvendt rækkefølge

Vend enhver fil, så de nyeste linjer kommer først

Som navnet antyder, er tac cat stavet baglæns. Det printer linjerne i omvendt rækkefølge, begyndende fra bunden. Det er en del af GNU coreutils og findes på de fleste Linux-distributioner.

Hvorfor bruge det? Det er ideelt til logfiler. De seneste oplysninger ligger ofte nederst, og med tac /var/log/syslog | less ser du de aktuelle poster øverst, klar til læsning uden at scrolle.

Det kan også kombineres med andre værktøjer. Pipe det ind i grep med -m flaget, for eksempel tac access.log | grep -m 5 "404", og få de fem nyeste matches uden at gennemsøge hele filen. tac læser fra både standardinput og filer, hvilket gør det til en alsidig del af enhver pipeline, som når du kører seq 1 5 | tac.

-s flaget ændrer separatoren for input, mens -r behandler separatoren som et regulært udtryk, hvilket gør det muligt at vende rækkefølgen af poster i struktureret tekst.

Der er dog begrænsninger. tac vender linjer, ikke tegn. Det erstatter ikke rev, der vender teksten inden for hver linje. Det kræver, at hele input er læst, før den første linje kan printes, så det er ikke velegnet til endeløse streams. Hvis kun de sidste linjer er nødvendige, er tail hurtigere. På macOS og BSD-systemer er tac ofte ikke installeret, men tail -r tilbyder lignende funktionalitet.

shuf — Randomiser dine input

Vælg, bland og tag prøver af linjer uden at skrive scripts

shuf genererer tilfældige permutationer og blander linjerne i en fil. Giv det en fil, så som shuf names.txt, og det printer dem i tilfældig rækkefølge. Det er en del af GNU coreutils og fungerer både med filer og standardinput.

Sampling er hvor shuf virkelig skinner. -n bestemmer, hvor mange linjer der returneres. shuf -n 1 quotes.txt vælger et tilfældigt citat, mens shuf -n 10 dataset.csv giver en ti-linjers prøve fra en større fil. Ideelt for dem, der arbejder med data, der hurtigt har brug for en stikprøvekontrol.

-e gør det muligt at blande kommandolinjeargumenter som input, for eksempel shuf -e pizza sushi tacos -n 1 kan beslutte middagen på en linje. -i genererer et numerisk interval: shuf -i 1-100 -n 5 trækker fem unikke numre mellem 1 og 100. Ved at tilføje -r tillades gentagelser, hvilket lader det fungere som en simpel terningrullende.

shuf kan også anvendes i scripts. Vælg en tilfældig baggrund fra en mappe ved at pipe ls ind i shuf -n 1. Brug det til at spille en playliste i tilfældig rækkefølge eller generere varierende testdata. For at blande en fil direkte, angiv outputfilen med -o. Det undgår problemer med, at input og output er den samme fil.

Men som altid er der udfordringer.andet på denne liste, er der et problem. Shuf trækker fra systemets tilfældige kilde, hvilket fungerer til dagligdagsopgaver, men ikke til kryptografi som adgangskode- eller nøglegenerering. For gentagelige resultater, --random-source.

giver mulighed for at levere en bytesfil, så den samme blanding kan reproduceres.

timeout — Sæt en klokke på kommandoer

Stop ubudne kommandoer før de hænger din terminal

timeout kører en kommando og afslutter den, hvis den overskrider den angivne tid. Syntaksen er enkel: varighed først, derefter kommandoen, som i timeout 10 ping eksempel.com. Tidsenheder er som standard sekunder, men suffixer som m for minutter, h for timer og d for dage virker også.

Hvorfor er dette relevant? Nogle kommandoer hænger. En netværksanmodning venter på en uresponsiv server, et script står stille på en låst ressource, eller et backup-job tager længere tid end ventet. I en interaktiv terminal kan du trykke Ctrl+C. I et cron-job eller et automatiseret script er der ingen til at afbryde, hvilket kan føre til, at en låst proces hober sig op og blokerer for andre. At indkapsle en risikabel kommando i timeout holder scriptet igang.

Som standard sender timeout TERM-signalet, når tiden er ude, hvilket beder processen om at lukke ned ordentligt. Nogle programmer ignorerer dette, så -k valgmuligheden tilføjer en anden deadline, efter hvilken timeout sender KILL, som ikke kan ignoreres. For eksempel giver timeout -k 5 30 ./long-task.sh scriptet 30 sekunder, derefter 5 mere til ordentlig afslutning, før det tvangsafsluttes. -s valgmuligheden lader dig vælge et andet signal helt.

Exit-statusen er lige så vigtig som tidsgrænsen. Når en kommando stoppes, afslutter timeout med status 124. Scripter kan tjekke denne værdi for at skelne en timeout fra en almindelig fejltagelse, og derefter beslutte at prøve igen, logge en advarsel eller fortsætte. Ved at tilføje --preserve-status returnerer timeout kommandoens egen exit-status i stedet.

En ting at bemærke: som standard kører timeout kommandoen i en baggrundsprocesgruppe, så interaktive programmer, der forventer input fra tastaturet, kan opføre sig underligt. --foreground-valgmuligheden løser dette, og alt, der læser fra terminalen, bør testes inden brug.

Tre små kommandoer der sparer tid hver dag

Tac, shuf og timeout udfører hvert deres specifikke job godt. At læse logs baglæns, tage tilfældige linjer og begrænse ubudne processer er almindelige behov. Alle tre kommandoer er allerede installeret på de fleste Linux-systemer, så der er ingen opsætning inden brug.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

Go up