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.