De tee opdracht is een basisopdracht die je op elk systeem zou moeten staan, toch is het niet populair. Deze opdracht leest de standaard invoer en schrijft deze naar de standaard uitvoer en één of meer bestanden, waardoor zijn invoer gedupliceerd wordt. Het wordt vooral gebruikt met pipes en filters. De opdracht dankt zijn naam aan de T-splitter uit de loodgieterij.
In het kort, als je de uitvoer van om het even welke opdracht wilt doorsturen naar een andere opdracht en het scherm, dan biedt tee een oplossing.
Zo stel je een tee opdracht samen:
tee [ -a ] [ -i ] [ Bestand ... ]
De twee tee opties betekenen:
Een tee opdracht ziet er dus zo uit:
opdracht | tee logbestand
Deze regel voert het programma opdracht uit. Alle uitvoer wordt doorgestuurd naar het bestand logbestand terwijl het wordt weergegeven op het standaard uitvoerapparaat (stdout).
Enkele complexere en hopelijk bruikbare voorbeelden:
dany@new-host-2:~> echo "tee kan een pipe in twee splitsen"|tee >(rev) >(tr ' ' '_')
tee kan een pipe in twee splitsen
nestilps eewt ni epip nee nak eet
tee_kan_een_pipe_in_twee_splitsen
Je kunt tee dus gebruiken om de uitvoer voor verdere verwerking naar meerdere processen te sturen.
Nog leuker wordt het als je nog >()
onderdelen toevoegt.
dany@new-host-2:~>sudo cp /etc/passwd .
dany@new-host-2:~>vim passwd
Vanzelfsprekend testen we dit op een kopie uit (eerste opdracht). Daarna gebruiken we als gewone gebruiker de teksteditor vim om het paaswd bestand aan te passen. Na de aanpassingen, sla je deze als root op door in vim de volgende opdracht uit te voeren:
:w !sudo tee %
In vim betekent dit:
Na deze opdracht is het aangepaste bestand opgeslagen en kan je de teksteditor veilig verlaten. Aangezien dit een test was, verwijderen we ons testbestand.
dany@new-host-2:~> sudo rm passwd
dd if=/dev/sda | tee >(dd of=/dev/sdb) | dd of=/dev/sdc
Als je schijven moet dupliceren, start je met een liveCD en schrijf je met bovenstaande opdracht twee schijven tegelijk. Om nog efficiënter te kopiëren, gebruik je dd met een grotere block size:
dd if=/dev/sda bs=64k | tee >(dd of=/dev/sdb bs=64k) | dd of=/dev/sdc bs=64k
Om nog meer kopieën te maken, voeg je extra argumenten aan tee toe:
dd if=/dev/sda | tee >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) | dd of=/dev/sde
echo “uptime” | tee >(ssh host1) >(ssh host2) >(ssh host3)
script /dev/null | tee /dev/pts/3