På Linux-systemer er det ganske mange måter å lagre kommandolinjeutgang til filer. Hver opererer annerledes og sparer forskjellige ting.

Disse kommandoene er nyttige på tvers av alle Linux-distribusjoner, og kan til og med brukes på Mac og BSD. Det eneste du må tenke på er hvilken kommando som er best å få jobben gjort.

Unix og rør

Før du dykker inn i kommandoene, bør du vite litt historie. Ingen av dette er spesifikt for Linux. Det kommer faktisk fra det gamle Unix-operativsystemet utviklet av Bell Labs. Linux, Mac og BSD er alle Unix-lignende operativsystemer som kan spore tilbake deres slektstre til Unix.

En av kjernen ideene bak Unix var å gjøre alt ut av små programmer som du kan stryke sammen for å gjøre større og mer komplekse ting. Derfor kan du kombinere Linux-kommandoer for å få dem til å fungere sammen.

Det er et par måter å trekke sammen Linux (og Unix) kommandoer og få dem til å jobbe sammen. Den vanligste du vil møte er | karakter. Den eneste pipen, som den kalles, overfører utgangen fra en kommando til en annen.

Du kommer også over på |& operatøren. Den overfører både utgang og feil til neste kommando.

Hver metode i denne veiledningen er egentlig bare en måte for Unix-kommandoer å sende informasjon om. I stedet for å pipere data mellom kommandoer, dirigerer de data til utdata. I dette tilfellet er utdata en fil.

Setup

Før du går videre, er det noen ting å sette opp for å gjøre testing enklere. Som roten bruker, opprett et par mapper i den vanlige brukerens hjemmekatalog. Endre deres tillatelser for å gjøre dem uleste.

 sudo mkdir Feil1 sudo mkdir Feil2 sudo chmod 000 Feil1 sudo chmod 000 Feil2 

Du bruker kommandoen du til å teste, og det vil øke feil når det møter disse filene.

Omdirigere utdata uten feil

Den vanligste og grunnleggende måten å omdirigere utdata fra terminalen til en fil, er å bruke > og >> operatørene. De retter kun utdataene til en spesifisert tekstfil. De omdirigerer ikke feil. De vil fremdeles vises i terminalen.

Operatøren > omdirigerer utdata til en fil og overskriver innholdet i den filen.

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

I motsetning til >> operatøren fungerer på samme måte, men legger utgangen til slutten av filen.

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

Lagrer bare feil

Disse to neste operatørene er det motsatte av de første. De lagrer bare feil, mens de viser utgangen i terminalen.

Bruke operatøren 2> sender feilene fra en kommando til en loggfil, overskriver den. Den vanlige utgangen vises fortsatt i terminalen.

 du -h ./* 2> errors.log 

For å oppnå de samme resultatene uten å overskrive, bruk 2>> .

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

Lagre alt, vis ingenting

Hvis du er interessert i å logge alt, har du dekket det neste settet av operatører. De omdirigerer alle utdataene til filer uten å vise noe i terminalen.

Operatoren &> omdirigerer utdata og feil til en fil og overskriver den.

 du -h ./* &> disk_use.log 

Som de andre, hvis du ikke vil overskrive, er det en medfølgende operatør for det.

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

Vis alt, lagre utgang

Du kan også vise alt i terminalen og kun logge utgangen. Du kan oppnå dette ved å lede kommandoen til tee kommandoen.

tee fungerer som en T splitter i VVS. Det styrer strømmen i to retninger. Siden | Operatøren passerer bare utdata, den resulterende filen vil også bare inneholde utgang og ikke feil.

 du -h ./* | tee output.txt 

Som standard overskriver tee . For å bevare den eksisterende filen, legg til -a flagg.

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

Vis og lagre alt

Endelig kan du omdirigere med |& operatøren til tee kommandoen for å vise alt og logge det også.

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

For å unngå å overskrive, legg til -a flagget til tee .

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

Wrap Up

Det er klart at det er mange alternativer når det gjelder å omdirigere og lagre utdataene fra Linux-terminalkommandoer til en fil. Noen av dem er mer nyttige enn andre, men de kan alle brukes i et bredt spekter av skript for å kontrollere strømmen av informasjon på mest mulig Unix-måte.