Small tools, joined together
The Unix idea: each tool does one job well, and you connect them. Every command has three streams: input (stdin), output (stdout) and errors (stderr). You can send them into files, or pipe one command's output straight into the next.
Redirect and pipe
echo "first" > notes.txt echo "second" >> notes.txt cat notes.txt wc -l < notes.txt ls /nope 2> errors.txt cat errors.txt ls notes.txt /nope > all.txt 2>&1 ls /nope 2> /dev/null cat menu.csv | grep yes | wc -l ls /etc | tee etc-list.txt | head -3