Hoe de uitvoer van een commando naar een bestand in Linux te bewaren
Op Linux-systemen zijn er nogal wat manieren om opdrachtregeloutput naar bestanden op te slaan. Elk werkt anders en bewaart verschillende dingen.
Deze commando's zijn bruikbaar voor alle Linux-distributies en kunnen zelfs worden gebruikt op Macs en BSD. Het enige waar u aan moet denken, is welk commando het beste is om de klus te klaren.
Unix en pijpen
Voordat je de commando's induikt, zou je een beetje geschiedenis moeten kennen. Niets van dit is specifiek voor Linux. Het komt eigenlijk van het oude Unix-besturingssysteem dat is ontwikkeld door Bell Labs. Linux, Mac en BSD zijn allemaal Unix-achtige besturingssystemen die hun stamboom naar Unix kunnen naspeuren.
Een van de kernideeën achter Unix was om alles te maken met kleine programma's die je samen kunt brengen om grotere en complexere dingen te doen. Dat is waarom je Linux-commando's kunt combineren om ze samen te laten werken.
Er zijn een aantal manieren om Linux- (en Unix) -opdrachten bij elkaar te brengen en samen te laten werken. De meest voorkomende die je tegenkomt is de |
karakter. De enkele pip, zoals deze wordt genoemd, geeft de uitvoer van de ene opdracht door aan de andere.
Je komt ook de |&
-operator tegen. Het geeft zowel uitvoer als fouten door aan de volgende opdracht.
Elke methode in deze handleiding is in essentie gewoon een manier voor Unix-opdrachten om informatie door te geven. In plaats van gegevens tussen opdrachten te pipen, sturen ze gegevens naar uitvoer. In dit geval is die uitvoer een bestand.
Opstelling
Voordat u verder gaat, zijn er een paar dingen die u moet instellen om het testen gemakkelijker te maken. Als uw root-gebruiker, maakt u een aantal mappen in de basismap van uw normale gebruiker. Wijzig hun rechten om ze onleesbaar te maken.
sudo mkdir Fail1 sudo mkdir Fail2 sudo chmod 000 Fail1 sudo chmod 000 Fail2
U zult de opdracht du
gebruiken om te testen en het zal fouten veroorzaken wanneer het die bestanden tegenkomt.
Uitvoer zonder fouten omleiden
De meest gebruikelijke en basale manier om de uitvoer van de terminal naar een bestand om te leiden, is om de operatoren >
en >>
gebruiken. Ze sturen alleen de uitvoer naar een opgegeven tekstbestand. Ze leiden geen fouten om. Die zullen nog steeds in de terminal verschijnen.
De operator >
leidt de uitvoer om naar een bestand en overschrijft de inhoud van dat bestand.
du -h ./*> map-size.txt
De operator >>
daarentegen werkt op dezelfde manier maar voegt de uitvoer toe aan het einde van het bestand.
du -h ./* >> map-size.txt
Alleen fouten opslaan
Deze volgende twee operatoren zijn precies het tegenovergestelde van de eerste. Ze slaan alleen fouten op, terwijl ze de uitvoer in de terminal weergeven.
Met behulp van de operator 2>
worden de fouten van een opdracht naar een logbestand verzonden en overschreven. De reguliere uitgang wordt nog steeds weergegeven in de terminal.
du -h ./* 2> errors.log
Gebruik 2>>
om dezelfde resultaten te bereiken zonder te overschrijven.
du -h ./* 2 >> errors.log
Sla alles op, laat niets zien
Als u geïnteresseerd bent om alles te loggen, heeft de volgende set van operators u gedekt. Ze leiden alle uitvoer om naar bestanden zonder iets in de terminal te tonen.
De operator &>
leidt uitvoer en fouten om naar een bestand en overschrijft het.
du -h ./* &> disk_use.log
Net als de anderen, als je niet wilt overschrijven, is er een bijbehorende operator voor.
du -h ./* & >> disk_use.log
Toon alles, sla output op
U kunt ook alles in de terminal weergeven en alleen de uitvoer registreren. Je kunt dit bereiken door je opdracht naar het tee
commando te pipen.
tee
gedraagt zich als een T-splitter in sanitair. Het stuurt de stroom in twee richtingen. Sinds de |
operator passeert de uitvoer, het resulterende bestand bevat ook alleen uitvoer en geen fouten.
du -h ./* | tee output.txt
Standaard wordt tee
overschreven. Als u het bestaande bestand wilt behouden, voegt u de markering -a
.
du -h ./* | tee -a output.txt
Toon en bewaar het allemaal
Ten slotte kunt u omleiden met de |&
-operator naar het tee
commando om alles weer te geven en te loggen.
du -h ./* | & tee output.txt
Voeg de vlag -a
aan een tee
om te voorkomen dat deze wordt overschreven.
du -h ./* | & tee -a output.txt
Afronden
Het is duidelijk dat er een heleboel opties zijn als het gaat om het omleiden en opslaan van de uitvoer van Linux-terminalopdrachten naar een bestand. Sommigen van hen zijn nuttiger dan andere, maar ze kunnen allemaal worden gebruikt in een breed scala aan scripts om de informatiestroom op de meest Unix-manier mogelijk te regelen.