tee for splitting output in Linux CLI - Time & Space Complexity
When using the tee command to split output in Linux, it's important to understand how the time to complete the command changes as the amount of output grows.
We want to know how the command's execution time scales with the size of the data being processed.
Analyze the time complexity of this command that splits output to a file and the screen:
ls -l | tee output.txt
This command lists files in long format and uses tee to send the output both to the file output.txt and to the terminal.
Look at what repeats as the command runs:
- Primary operation: Reading each line of output from
ls -land writing it twice (once to the file, once to the screen). - How many times: Once for every line of output produced by
ls -l.
As the number of files listed grows, the output lines grow too. Each line is processed and written twice.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 20 writes (10 lines x 2 writes each) |
| 100 | About 200 writes |
| 1000 | About 2000 writes |
Pattern observation: The total work grows roughly twice as fast as the number of output lines.
Time Complexity: O(n)
This means the time to complete grows directly in proportion to the number of output lines.
[X] Wrong: "Using tee doubles the time complexity to O(2n), which is slower in a big way."
[OK] Correct: The constant factor 2 is ignored in Big-O notation because it doesn't change how the time grows as input gets very large. The growth is still linear.
Understanding how commands like tee affect performance helps you reason about data flow in scripts and pipelines, a useful skill in many automation tasks.
What if we used tee to write output to multiple files instead of one? How would the time complexity change?
Practice
tee command do in Linux?Solution
Step 1: Understand the purpose of
Theteeteecommand takes the output of a command and sends it to both the terminal (screen) and a file at the same time.Step 2: Compare options with this behavior
Only It splits the output of a command to both the screen and a file simultaneously. describes this behavior correctly. Other options describe unrelated actions.Final Answer:
It splits the output of a command to both the screen and a file simultaneously. -> Option AQuick Check:
teesplits output = A [OK]
- Thinking tee merges files
- Confusing tee with file deletion
- Assuming tee changes permissions
tee to save output to a file named log.txt?Solution
Step 1: Recall the pipe usage with tee
The output of a command is piped using|intoteeto save it to a file.Step 2: Check each option's syntax
Only command | tee log.txt uses the correct pipe syntax:command | tee log.txt. Others misuse redirection or order.Final Answer:
command | tee log.txt -> Option CQuick Check:
Pipe output to tee = D [OK]
- Using > before tee instead of pipe
- Placing tee before command
- Confusing redirection with tee syntax
output.txt after running this command?echo "Hello World" | tee output.txt
Solution
Step 1: Understand echo piped to tee
The echo command outputs "Hello World" which is piped to tee. Tee writes it to the file and also outputs it to the screen.Step 2: Determine output locations
Both the screen and the fileoutput.txtwill contain "Hello World".Final Answer:
Screen: Hello World; File output.txt: Hello World -> Option AQuick Check:
tee duplicates output to screen and file = B [OK]
- Assuming tee only writes to file
- Thinking tee suppresses screen output
- Confusing echo output with tee behavior
log.txt instead of overwriting it. Which command fixes the error in this script?ls -l | tee log.txt
Solution
Step 1: Identify the need to append output
The defaultteeoverwrites files. To append, use the-aoption.Step 2: Check correct syntax for appending
ls -l | tee -a log.txt correctly usestee -a log.txtwith pipe fromls -l. Others misuse redirection or order.Final Answer:
ls -l | tee -a log.txt -> Option DQuick Check:
Use -a with tee to append = C [OK]
- Using > redirection with tee incorrectly
- Placing tee before command
- Forgetting the -a option for append
sysinfo.log while still seeing it live on screen. You also want to keep adding to the log without erasing old data. Which command achieves this?Solution
Step 1: Understand the requirement to append and show output
The command must show output on screen and append to the file without overwriting.Step 2: Identify correct tee usage
uname -a | tee -a sysinfo.log usestee -a sysinfo.logwith pipe fromuname -a, which appends and shows output live.Step 3: Eliminate incorrect options
uname -a | tee sysinfo.log overwrites file. Options C and D misuse command order and redirection.Final Answer:
uname -a | tee -a sysinfo.log -> Option BQuick Check:
Pipe output to tee -a to append and show = A [OK]
- Forgetting -a causes overwrite
- Placing tee before command
- Using > redirection incorrectly with tee
Ready to prove it?
Pass the test and this pattern moves unknown
