Skip to main content

Understanding Standard Input, Output, and Error in Linux

The Linux operating system, like other Unix-like operating systems, is designed around the concept of streams for input and output. This enables it to be remarkably flexible and powerful, facilitating a wide variety of data manipulation and processing tasks. In Linux, the primary streams are known as Standard Input (stdin), Standard Output (stdout), and Standard Error (stderr). Understanding these streams is essential for anyone who wants to master the Linux command line.

How stdout Works


  1. User: Represents the person interacting with the terminal.
  2. Terminal: This is the software interface where text-based interactions occur.
  • stdin (Standard Input): User input flows from the User to the Terminal via this stream.
  • stdout (Standard Output): Normal output flows from the Terminal to the User via this stream.
  • stderr (Standard Error): Error messages also flow from the Terminal to the User via this stream.

What are Streams?

In computing, a stream is a sequence of data elements that are available over time. A stream essentially serves as a pipe through which data flows from a source to a destination. Streams are often used to feed data to a program or to receive data from a program.

The Three Standard Streams

There are threee standard streams in Linux that we can talk about.

Standard Input (stdin)

Standard Input is the stream from which a program reads its input. By default, stdin is the keyboard. Whenever a program waits for the user to enter data, it is reading from stdin.

For example, the read command in a shell script reads data from stdin:

read my_var

When this line is executed, the script waits for the user to enter some data.

Standard Output (stdout)

Standard Output is the stream where a program writes its output data. By default, stdout is the terminal screen. All regular output from a program is sent to stdout unless specified otherwise.

For example, the echo command writes to stdout:

echo "Hello, world!"

Standard Error (stderr)

Standard Error is another output stream typically used by programs to output error messages or diagnostics. By default, stderr is also the terminal screen. It is distinct from stdout to allow users to separate normal and error messages easily.

For example, if you try to remove a file that doesn't exist, the error message is sent to stderr:

rm non_existent_file.txt

The message "rm: cannot remove 'non_existent_file.txt': No such file or directory" is printed to stderr.

Certainly! Here's a section on Redirection in Linux, which complements your existing article on streams:

Redirection in Linux

Redirection is a powerful feature in Linux that allows you to change the standard input and output destinations of commands. The concept works hand-in-hand with the three standard streams: stdin, stdout, and stderr. Redirection enables you to divert the flow of data, so instead of reading from or writing to the default locations (usually the terminal), the data can be read from or written to files, devices, or even other commands.

Types of Redirection

  1. Output Redirection (> and >>): This type is used to redirect the output of a command to a file instead of the terminal.

    • Using > overwrites the file if it already exists or creates a new file.
    echo "Hello, world!" > myfile.txt
    • Using >> appends the output to an existing file or creates a new file if it does not exist.
    echo "Hello, again!" >> myfile.txt
  2. Input Redirection (<): This is used to read data into a program from a file instead of the keyboard.

    sort < unsorted.txt
  3. Error Redirection (2> and 2>>): This redirects the stderr to a file.

    find / -name "some_file.txt" 2> errors.txt
  4. Combining Output and Error Redirection (&> or &>>): This is used to redirect both stdout and stderr to the same file.

    command &> combined_output.txt


The standard streams stdin, stdout, and stderr are fundamental concepts in Linux that anyone working with the system should understand. They form the basis for the shell's capabilities for text processing and data manipulation, and they play a crucial role in inter-process communication. Learning how to effectively use these streams will enhance your ability to work efficiently in a Linux environment.

What Can You Do Next 🙏😊

If you liked the article, consider subscribing to Cloudaffle, my YouTube Channel, where I keep posting in-depth tutorials and all edutainment stuff for software developers.

YouTube @cloudaffle