The terminal opened and I saw a blinking cursor. Nothing else. I typed something. It appeared. I pressed Enter. Something happened. I had no idea what any of it meant.
That blinking cursor is the shell prompt. It is the machine waiting for you to tell it what to do. Before you can tell it anything useful, you need to know what you are looking at.
The terminal emulator and the shell
There are two things in front of you, not one. The window itself — the thing you opened — is the terminal emulator[1]. It draws text on screen and captures your keystrokes. GNOME Terminal, Konsole, Alacritty — there are dozens of them; they are all just displays.
Inside the emulator, a program is running. That program is the
shell[2]. The shell is what reads your commands and runs them. The
most common shell is Bash[3][4] — the Bourne Again Shell. When you type ls
and press Enter, it is Bash that finds the ls program and runs it,
not the terminal emulator.
This distinction matters. When something goes wrong, you need to know which layer to blame.
Anatomy of the prompt
A typical Bash prompt looks something like this:
user@hostname:~/Desktop$Breaking it down:
user— your username@hostname— the name of the machine you are on:— separator~/Desktop— the directory you are currently in (~means your home directory)$— you are a regular user; if this were#, you would be root
root@hostname:/home/user/Desktop#Your prompt will look different. The format is configurable and varies
by distribution. Some prompts show only $. Some show the full path
in colour. Some show the current git branch. The content changes; the
meaning of $ does not.
The # prompt means you are root — the superuser who can read, write,
and delete anything on the system. Most tasks do not require it, and
being root by default is dangerous: a typo in rm or a misbehaving
script has no safety net. The principle of least privilege[5] is simple:
use the minimum permissions the task requires. Log in as a regular
user, reach for sudo when you genuinely need elevation, and drop
back immediately.
Input and output
When you type at the prompt and press Enter, you are writing to standard input (stdin). What appears on screen in response is standard output (stdout). When something goes wrong and an error message appears, that comes from standard error (stderr). Both stdout and stderr print to the terminal by default.
These three I/O[6] connections are called Standard streams[7]. You will learn to separate and redirect them in a later page.
For now: type a command, press Enter, read the output. That is the entire interaction model. Everything else is a variation on this.
Your first command
Type this and press Enter:
echo "hello"The shell prints hello back at you. echo writes its arguments to
stdout. It is the simplest possible proof that input and output are
working. Every debugging session you ever run will start with something
this simple.