Sådan køres kommandoer fra standardinput ved hjælp af Tee og Xargs i Linux


Mens du bruger kommandolinjen, kan du direkte sende output fra et program (for eksempel et værktøj, der genererer noget ulejlighed til videre behandling) ved hjælp af en pipeline.

To af de vigtigste kommandolinjeværktøjer, der kan bruges sammen med rørledninger til at bygge kommandolinjer, er:

  • xargs - læser datastrømme fra standardinput, genererer og udfører derefter kommandolinjer.
  • tee - læser fra standardinput og skriver samtidigt til standardoutput og en eller flere filer. Det er mere en omdirigeringskommando.

I denne enkle artikel vil vi beskrive, hvordan man bygger og udfører flere kommandoer fra standardinput ved hjælp af rør-, tee- og xargs-kommandoer i Linux.

Den enkleste syntaks til brug af et rør, som du måske allerede har set i kommandoer i mange af Linux-tutorials, er som følger. Men du kan opbygge en længere kommandolinje med flere kommandoer.

$ command1 args | command2 args 
OR
# command1 args | command2 args | command3 args ...

Nedenfor er et eksempel på brug af en pipeline til at overføre output fra hovedkommando.

$ dmesg | head

Sådan bruges xargs til at køre kommandoer

I dette eksempel konverterer den anden kommando muti-line output til en enkelt linje ved hjælp af xargs.

$ ls -1 *.sh
$ ls -1 *.sh | xargs

Brug kommandoerne nedenfor for at tælle antallet af linjer/ord/tegn i hver fil på en liste.

$ ls *.sh | xargs wc -l	    #count number of lines in each file
$ ls *.sh | xargs wc -w	    #count number of words in each file
$ ls *.sh | xargs wc -c	    #count number of characters in each file
$ ls *.sh | xargs wc	    #count lines, words and characters in each file

Kommandoen nedenfor finder og sletter kataloget med navnet Alle og rekursivt i det aktuelle bibliotek.

$ find . -name "All" -type d -print0 | xargs  -0 /bin/rm -rf "{}"

Findkommandoen med indstillingen -print0 handling muliggør udskrivning af den fulde bibliotekssti på standardoutput efterfulgt af et nul tegn og -0 xargs -flag beskæftiger sig med plads i filnavne.

Du kan finde andre praktiske eksempler på brug af xargs-kommandoer i disse artikler:

  1. Sådan kopieres en fil til flere biblioteker i Linux
  2. Omdøb alle filer og katalognavne til små bogstaver i Linux
  3. 4 måder at batchkonvertere din PNG til JPG og vice-versa
  4. 3 måder at slette alle filer i et bibliotek undtagen en eller få filer med udvidelser

Sådan bruges Tee med kommandoer i Linux

Dette eksempel viser, hvordan man sender kommandooutput til standardoutput og gemmer i en fil; kommandoen nedenfor giver dig mulighed for at se de mest kørende processer efter højeste hukommelse og CPU-brug i Linux.

$ ps -eo cmd,pid,ppid,%mem,%cpu --sort=-%mem | head | tee topprocs.txt
$ cat  topprocs.txt

For at tilføje data i en eller flere eksisterende filer skal du sende -a -flagget.

$ ps -eo cmd,pid,ppid,%mem,%cpu --sort=-%mem | head | tee -a topprocs.txt 

Du kan finde mere information på tee- og xargs-mandsider.

$ man xargs
$ man tee

Det er alt! Glem ikke at tjekke vores specielle artikel: A - Z Linux-kommandoer - Oversigt med eksempler.

I denne artikel beskrev vi, hvordan man genererer kommandolinjer ved hjælp af rørledninger; xargs og tee-kommandoer. Du kan stille spørgsmål eller dele tanker via feedbackformularen nedenfor.