Slik lagrer du utdataene for en kommando til en fil i Linux
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.