Cosa fa#
Legge da stdin e scrive contemporaneamente su stdout e su uno o piu' file. Il nome viene dal raccordo a T dell'idraulica: il flusso si divide in due direzioni.
Sintassi#
comando | tee [opzioni] file
Comandi essenziali#
| Comando | Flag | Significato flag | Cosa fa |
|---|---|---|---|
tee file.txt | — | — | Scrive su stdout e sovrascrive file.txt |
tee -a file.txt | -a | append | Scrive su stdout e aggiunge in coda al file |
tee file1 file2 | — | — | Scrive su stdout e su piu' file contemporaneamente |
Pattern sudo tee — scrivere file di sistema#
echo e cat non possono scrivere in file protetti da root anche con sudo echo > — il redirect > viene eseguito dalla shell dell'utente, non da root.
sudo tee risolve il problema: il privilegio va al processo che apre il file.
# SBAGLIATO — il redirect > viene eseguito come utente, non come root
sudo echo "contenuto" > /etc/file-protetto
# CORRETTO — tee gira come root e apre il file
echo "contenuto" | sudo tee /etc/file-protetto
# Con append
echo "contenuto" | sudo tee -a /etc/file-protetto
# Silenziare stdout (solo scrittura su file)
echo "contenuto" | sudo tee /etc/file-protetto > /dev/nullPattern heredoc + sudo tee — scrivere blocchi multiriga#
Per scrivere file di configurazione multiriga senza editor:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOFIl <<EOF e' un heredoc: tutto il testo fino alla riga EOF finale viene passato come stdin a sudo tee. Vedi heredoc per la sintassi completa.
La subshell $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}"):
. /etc/os-release— source del file, carica le variabili OS nell'ambiente${VAR:-fallback}— usaUBUNTU_CODENAMEse esiste, altrimentiVERSION_CODENAME
Scenario Reale#
Configurazione repo Docker su Ubuntu: il file /etc/apt/sources.list.d/docker.sources e' protetto da root. Con heredoc + sudo tee si scrive il contenuto multiriga in un solo comando senza aprire un editor come root.
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: jammy
Components: stable
Architectures: amd64
Signed-By: /etc/apt/keyrings/docker.asc
EOFAnalista SOC che analizza traffico live e vuole salvarlo:
tcpdump | tee network_capture.logCollegato a#
- standard-streams — stdin/stdout che tee manipola
- heredoc — sintassi <<EOF usata con tee
- file-descriptor — come funziona il redirect
- system — categoria




