Startpagina > Bestands- en mapbeheer > tee

tee -a -i: Voeg standaardinvoer toe aan bestanden en negeer onderbrekingen

Het `tee`-commando is een hulpprogramma dat standaardinvoer leest en deze tegelijkertijd naar de standaarduitvoer en een of meer bestanden schrijft. Deze specifieke combinatie (`-a -i`) voegt inhoud toe aan een bestand in plaats van deze te overschrijven, en negeert onderbrekingssignalen (SIGINT, meestal Ctrl+C) zodat het `tee`-proces niet wordt beëindigd. Deze functionaliteit is zeer nuttig voor het continu loggen van de uitvoer van langlopende scripts of wanneer belangrijke uitvoer behouden moet blijven.

Overzicht

Het `tee`-commando onderschept gegevens in het midden van een pijplijn, slaat ze op in een bestand en stuurt ze tegelijkertijd door naar het volgende commando. De `-a` optie behoudt de bestaande inhoud van een bestand en voegt nieuwe inhoud toe aan het einde, terwijl de `-i` optie voorkomt dat het `tee`-proces abrupt wordt beëindigd door gebruikersonderbrekingen, wat stabiele logging mogelijk maakt.

Belangrijkste functies

De belangrijkste functies van deze combinatie zijn:

  • Schrijft standaardinvoer tegelijkertijd naar standaarduitvoer en opgegeven bestanden
  • Voegt toe aan bestanden in plaats van ze te overschrijven (-a optie)
  • Negeert onderbrekingssignalen (SIGINT) (-i optie)
  • Geschikt voor stabiele logging van langlopende processen

Belangrijkste opties

Het `tee`-commando biedt verschillende opties, maar hier worden de kernopties beschreven die worden gebruikt in de `tee -a -i` combinatie.

Bestandsuitvoer en gedragscontrole

Gegenereerde opdracht:

Probeer de opdrachtcombinaties.

Uitleg:

`tee` Voer het commando uit.

Combineer deze opties en voer de opdracht virtueel uit met de AI.

Gebruiksvoorbeelden

Dit zijn praktische voorbeelden van het gebruik van het `tee -a -i` commando.

Commando-uitvoer toevoegen aan logbestand

ls -l | tee -a -i output.log

Voegt de uitvoer van het `ls -l` commando toe aan het bestand `output.log` en toont deze tegelijkertijd op de terminal. Zelfs als u op Ctrl+C drukt, wordt `tee` niet beëindigd.

Uitvoer van scripts continu loggen

while true; do echo "$(date): Running..."; sleep 1; done | tee -a -i script_log.txt

Voegt continu de uitvoer van een oneindig lus-script toe aan het bestand `script_log.txt`. Dankzij de `-i` optie wordt `tee` niet beïnvloed door onderbrekingssignalen.

Loggen van uitvoer van sudo-commando's

sudo sh -c 'apt update && apt upgrade -y | tee -a -i /var/log/apt_updates.log'

Bij het loggen van de uitvoer van commando's die met `sudo` worden uitgevoerd naar een bestand, is het veiliger om `sh -c` te gebruiken om de uitvoer van het werkelijke commando te ontvangen via `tee`, in plaats van de uitvoer van `sudo` zelf.

Tips & Aandachtspunten

Dit zijn nuttige tips en aandachtspunten bij het gebruik van de `tee -a -i` combinatie.

Gebruikstips

  • **Logging van achtergrondtaken**: Voor het loggen van de uitvoer van langlopende achtergrondprocessen naar een bestand, kunt u een stabiele loggingomgeving creëren door `nohup command | tee -a -i logfile.log &` te gebruiken.
  • **Oplossen van machtigingsproblemen**: Bij gebruik zoals `sudo command | tee file` wordt `tee` uitgevoerd met de machtigingen van de gewone gebruiker, wat kan leiden tot problemen met bestandschrijfrechten. In dit geval moet u `tee` zelf uitvoeren met `sudo`, bijvoorbeeld met `sudo sh -c 'command | tee -a -i file'` of `command | sudo tee -a -i file`.
  • **Debuggen**: Bij het controleren van de uitvoer van tussenliggende stappen in complexe pijplijnen, kunt u `command1 | tee -a -i debug.log | command2` gebruiken voor debugging.

Aandachtspunten

  • **Bestandsgroottebeheer**: Door continu toe te voegen met de `-a` optie, kan de bestandsgrootte onbeperkt toenemen. Overweeg om logbestanden periodiek te back-uppen of logrotatiehulpprogramma's (zoals `logrotate`) te gebruiken.
  • **Betekenis van het negeren van onderbrekingen**: De `-i` optie voorkomt de beëindiging van het `tee`-proces zelf, maar niet de beëindiging van voorgaande commando's die naar `tee` zijn gepiped. Als een voorgaand commando wordt beëindigd als reactie op een onderbreking, ontvangt `tee` geen invoer meer.

Hétzelfde categoriecommando