På Linux-system finns det ett par sätt att spara kommandoradsutdata till filer. Var och en fungerar annorlunda och sparar olika saker.

Dessa kommandon är användbara över alla Linux-distributioner och kan även användas på Mac och BSD. Det enda du behöver tänka på är vilket kommando som är bäst för att få jobbet gjort.

Unix och rör

Innan du dyker in i kommandona, borde du veta lite historia. Inget av detta är specifikt för Linux. Det kommer faktiskt från det gamla Unix-operativsystemet som utvecklats av Bell Labs. Linux, Mac och BSD är alla Unix-liknande operativsystem som kan spåra tillbaka sitt släktträd till Unix.

En av kärnidéerna bakom Unix var att göra allt ur små program som du kan stränga ihop för att göra större och mer komplexa saker. Därför kan du kombinera Linux-kommandon för att få dem att fungera tillsammans.

Det finns ett par sätt att dra ihop Linux (och Unix) kommandon och få dem att fungera tillsammans. Den vanligaste du kommer att stöta på är | karaktär. Den enda pipen, som den kallas, skickar utgången från ett kommando till en annan.

Du kommer också att stöta på |& operatören. Den överför både utgång och fel till nästa kommando.

Varje metod i den här guiden är i grunden bara ett sätt att Unix-kommandon skickar information. I stället för att leda data mellan kommandon leder de data till utgång. I det här fallet är den utsignalen en fil.

Inrätta

Innan du går längre, finns det några saker att ställa in för att göra testningen enklare. Skapa en del mappar i din vanliga användares hemkatalog som din ruttanvändare. Ändra deras behörigheter för att göra dem oläsliga.

 sudo mkdir misslyckas1 sudo mkdir misslyckas2 sudo chmod 000 misslyckas1 sudo chmod 000 misslyckas2 

Du använder kommandot du att testa, och det kommer att ge upphov till fel när det möter dessa filer.

Omdirigera utdata utan fel

Det vanligaste och grundläggande sättet att omdirigera utmatning från terminalen till en fil är att använda > och >> operatörerna. De riktar endast utdata till en angiven textfil. De omdirigerar inte fel. De kommer fortfarande att visas i terminalen.

Operatören > omdirigerar utdata till en fil och skriver över innehållet i den filen.

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

Däremot fungerar >> -operatören på samma sätt men lägger till utgången till slutet av filen.

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

Sparar endast fel

Dessa två operatörer är exakt motsatta av de första. De sparar bara fel, medan de visar utgången i terminalen.

Använda 2> operatören skickar fel från ett kommando till en loggfil, skrivs över det. Den vanliga utgången visas fortfarande i terminalen.

 du -h ./* 2> errors.log 

För att uppnå samma resultat utan att skriva över, använd 2>> .

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

Spara allt, visa ingenting

Om du är intresserad av att logga allt, har du tagit med nästa uppsättning operatörer. De omdirigerar alla utdata till filer utan att visa något i terminalen.

Operatören &> omdirigerar utdata och fel till en fil och skriver över den.

 du -h ./* &> disk_use.log 

Liksom de andra, om du inte vill skriva över, finns det en medföljande operatör för det.

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

Visa allt, spara utdata

Du kan också visa allt i terminalen och logga bara utmatningen. Du kan uppnå detta genom att leda ditt kommando till tee kommandot.

tee fungerar som en T splitter i VVS. Det styr flödet i två riktningar. Sedan | operatören passerar bara utgången, kommer den resulterande filen också bara att innehålla utdata och inte fel.

 du -h ./* | tee output.txt 

Som standard skrivs tee över. För att bevara den befintliga filen, lägg till -a flaggan.

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

Visa och spara allt

Slutligen kan du omdirigera med |& operatören till tee kommandot för att visa allt och logga in det också.

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

För att undvika att skriva över, lägg till -a flagga till tee .

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

Sammanfatta

Det finns tydligt ett antal alternativ när det gäller att omdirigera och spara utdata från Linux-terminalkommandon till en fil. Några av dem är mer användbara än andra, men alla kan användas i ett brett spektrum av skript för att kontrollera flödet av information på det mest unix-sätt som är möjligt.