Frequently Asked Question

What is the difference between a terminal, a console, and a shell?

A console was historically the physical text-mode display wired directly to a computer, a screen and keyboard used to administer the machine. On Linux today you can still reach a console by pressing Ctrl+Alt+F2 through F6, which drops you out of the graphical environment into a text-mode login. These are called virtual consoles and they're handled by the kernel itself.

A terminal was originally a piece of hardware, a keyboard and CRT wired to a mainframe over a serial line, the most famous being DEC's VT100 from 1978. Today the hardware is gone but terminal emulators (GNOME Terminal, Konsole, iTerm2, Alacritty, Kitty) are software programs that pretend to be a VT100 in a window. The shell (bash, zsh, fish) is then a separate program running inside the terminal, reading commands and running them. The terminal emulator and the shell communicate through a pseudo-terminal device (/dev/pts/N). Understanding the stack matters because it tells you where a problem lives: line-wrapping bugs belong to the terminal, command-not-found errors belong to the shell.

Further reading and video