På Linux-systemer er der en hel del måder at gemme kommandolinjeproduktion til filer. Hver enkelt opererer forskelligt og sparer forskellige ting.

Disse kommandoer er nyttige på tværs af alle Linux-distributioner og kan endda bruges på Macs og BSD. Det eneste du skal tænke på er, hvilken kommando der er bedst for at få arbejdet gjort.

Unix og rør

Før du dykker ind i kommandoerne, skal du kende en lille historie. Intet af dette er specifikt for Linux. Det kommer faktisk fra det gamle Unix-operativsystem udviklet af Bell Labs. Linux, Mac og BSD er alle Unix-lignende operativsystemer, der kan spore deres stamtræ til Unix.

Et af de grundlæggende ideer bag Unix var at gøre alt ud af små programmer, som du kan strække sammen for at gøre større og mere komplekse ting. Derfor kan du kombinere Linux-kommandoer for at få dem til at fungere sammen.

Der er et par måder at trække sammen Linux (og Unix) kommandoer og få dem til at arbejde sammen. Den mest almindelige du vil støde på er | Karakter. Den enkelte pip, som den hedder, overfører output fra en kommando til en anden.

Du kommer også på tværs af |& operatøren. Det overfører både output og fejl til den næste kommando.

Hver metode i denne vejledning er stort set kun en måde, hvorpå Unix-kommandoer kan videregive oplysninger. I stedet for at pipere data mellem kommandoer, leder de data til output. I dette tilfælde er denne udgang en fil.

Opsætning

Før du går videre, er der et par ting at oprette for at gøre testningen nemmere. Som din rodbruger skal du oprette et par mapper i din almindelige brugers hjemmekatalog. Skift deres tilladelser for at gøre dem ulæselige.

 sudo mkdir Fejl1 sudo mkdir Fejl2 sudo chmod 000 Fejl1 sudo chmod 000 Fejl2 

Du bruger kommandoen du til at teste, og det vil hæve fejl, når det møder disse filer.

Omdirigere output uden fejl

Den mest almindelige og grundlæggende måde at omdirigere output fra terminalen til en fil er at bruge > og >> operatørerne. De direkte kun output til en bestemt tekstfil. De omdirigerer ikke fejl. Disse vil stadig vises i terminalen.

Operatøren > omdirigerer output til en fil og overskriver indholdet af den pågældende fil.

 du -h ./*> folder-size.txt 

I modsætning hertil fungerer >> -operatøren på samme måde, men tilføjer udgangen til slutningen af ​​filen.

 du -h ./* >> folder-size.txt 

Gemmer kun fejl

Disse to næste operatører er det nøjagtige modsatte af de første. De gemmer kun fejl, mens de viser output i terminalen.

Brug af 2> operatøren sender fejlene fra en kommando til en logfil, overskriv den. Den normale udgang vises stadig i terminalen.

 du -h ./* 2> errors.log 

For at opnå de samme resultater uden overskrivning skal du bruge 2>> .

 du -h ./* 2 >> errors.log 

Gem alt, vis ingenting

Hvis du er interesseret i at logge alt, har du det næste sæt operatører dækket. De omdirigerer alle output til filer uden at vise noget i terminalen.

Operatøren &> omdirigerer output og fejl til en fil og overskriver den.

 du -h ./* &> disk_use.log 

Ligesom de andre, hvis du ikke ønsker at overskrive, er der en ledsagende operatør til det.

 du -h ./* & >> disk_use.log 

Vis alt, Gem output

Du kan også vise alt i terminalen og logge kun udgangen. Du kan opnå dette ved at pipere din kommando til tee kommandoen.

tee fungerer som en T splitter i VVS. Det styrer strømmen i to retninger. Siden | Operatøren passerer kun output, den resulterende fil vil også kun indeholde output og ikke fejl.

 du -h ./* | tee output.txt 

Som standard overskriver tee . For at bevare den eksisterende fil skal du tilføje -a flag.

 du -h ./* | tee -a output.txt 

Vis og gem det alle

Endelig kan du omdirigere med |& operatoren til kommandoen tee at vise alt og logge det også.

 du -h ./* | & tee output.txt 

For at undgå overskrivning skal du tilføje -a flag til tee .

 du -h ./* | & tee -a output.txt 

Wrap Up

Det er klart, at der er masser af muligheder, når det kommer til omdirigering og lagring af output fra Linux-terminalkommandoer til en fil. Nogle af dem er mere nyttige end andre, men de kan alle bruges i en bred vifte af scripts til at kontrollere strømmen af ​​information på den mest Unix-mulige måde.