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

[ Thanks to Linuxaria for this link.

“Console, terminal and tty are closely related. Originally, they
meant a piece of equipment through which you could interact with a
computer: in the early days of unix, that meant a teleprinter-style
device resembling a typewriter, sometimes called a teletypewriter,
or “tty” in shorthand. The name “terminal” came from the electronic
point of view, and the name “console” from the furniture point of
view. Very early in unix history, electronic keyboards and displays
became the norm for terminals.

“In unix terminology, a tty is a particular kind of device file
which implements a number of additional commands (ioctls) beyond
read and write. In its most common meaning, terminal is synonymous
with tty. Some ttys are provided by the kernel on behalf of a
hardware device, for example with the input coming from the
keyboard and the output going to a text mode screen, or with the
input and output transmitted over a serial line. Other ttys,
sometimes called pseudo-ttys, are provided (through a thin kernel
layer) by programs called terminal emulators, such as Xterm
(running in the X Window System), Screen (which provides a layer of
isolation between a program and another terminal), Ssh(which
connects a terminal on one machine with programs on another
machine), Expect (for scripting terminal interactions), etc.”

Complete Story