What is the difference between Terminal, Console, Shell, and Command Line?

What is the difference between Terminal, Console, Shell, and Command Line?


Short answer:

  • terminal = text input/output environment
  • console = physical terminal
  • shell = command line interpreter

Long answer:

Console and terminal 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.

Terminal

In unix terminology, a terminal is a particular kind of device file which implements a number of additional commands (ioctls) beyond read and write. Some terminals 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 terminals, sometimes called pseudo-terminals or pseudo-ttys, are provided (through a thin kernel layer) by programs called terminal emulators. Some types of terminal emulators include:

  • GUI applications running in the X Window System: Xterm, Gnome Terminal, Konsole, Terminator, etc.
  • Screen and tmux, 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

The word terminal can also have a more traditional meaning of a device through which one interacts with a computer, typically with a keyboard and display. For example an X terminal is a kind of thin client, a special-purpose computer whose only purpose is to drive a keyboard, display, mouse and occasionally other human interaction peripherals, with the actual applications running on another, more powerful computer.

Console

A console is generally a terminal in the physical sense that is by some definition the primary terminal directly connected to a machine. The console appears to the operating system as a (kernel-implemented) terminals. On some systems, such as Linux and FreeBSD, the console appears as several terminals (ttys) (special key combinations switch between these terminals); just to confuse matters, the name given to each particular terminal can be “console”, ”virtual console”, ”virtual terminal”, and other variations.

See also Why is a Virtual Terminal “virtual”, and what/why/where is the “real” Terminal?.

Command line [interface]

A command line is an interface where the user types a command (which is expressed as a sequence of characters — typically a command name followed by some parameters) and presses the Return key to execute that command.

Shell

A shell is the primary interface that users see when they log in, whose primary purpose is to start other programs. (I don't know whether the original metaphor is that the shell is the home environment for the user, or that the shell is what other programs are running in.)

In unix circles, shell has specialized to mean a command-line shell, centered around entering the name of the application one wants to start, followed by the names of files or other objects that the application should act on, and pressing the Enter key. Other types of environments (with the notable recent exception of Gnome Shell) usually don't use the word “shell”; for example, window systems involve “window managers” and “desktop environments”, not a “shell”.

There are many different unix shells. Ubuntu's default shell is Bash (like most other Linux distributions). Popular alternatives include zsh (which emphasizes power and customizability) and fish (which emphasizes simplicity).

Command-line shells include flow control constructs to combine commands. In addition to typing commands at an interactive prompt, users can write scripts. The most common shells have a common syntax based on the Bourne_shell. When discussing “shell programming”, the shell is almost always implied to be a Bourne-style shell. Some shells that are often used for scripting but lack advanced interactive features include the Korn shell (ksh) and many ash variants. Pretty much any Unix-like system has a Bourne-style shell installed as /bin/sh, usually ash, ksh or bash. On Ubuntu, /bin/sh is Dash, an ash variant (chosen because it is faster and uses less memory than bash).

In unix system administration, a user's shell is the program that is invoked when they log in. Normal user accounts have a command-line shell, but users with restricted access may have a restricted shell or some other specific command (e.g. for file-transfer-only accounts).


The division of labor between the terminal and the shell is not completely obvious. Here are their main tasks.

  • Input: the terminal converts keys into control sequences (e.g. Left\e[D). The shell converts control sequences into commands (e.g. \e[Dbackward-char).
  • Line edition, input history and completion are provided by the shell.
    • The terminal may provide its own line edition, history and completion instead, and only send a line to the shell when it's ready to be executed. The only common terminal that operates in this way is M-x shell in Emacs.
  • Output: the shell emits instructions such as “display foo”, “switch the foreground color to green”, “move the cursor to the next line”, etc. The terminal acts on these instructions.
  • The prompt is purely a shell concept.
  • The shell never sees the output of the commands it runs (unless redirected). Output history (scrollback) is purely a terminal concept.
  • Inter-application copy-paste is provided by the terminal (usually with the mouse or key sequences such as Ctrl+Shift+V or Shift+Insert). The shell may have its own internal copy-paste mechanism as well (e.g. Meta+W and Ctrl+Y).
  • Job control (launching programs in the background and managing them) is mostly performed by the shell. However, it's the terminal that handles key combinations like Ctrl+C to kill the foreground job and Ctrl+Z to suspend it.

Recycled from Unix & Linux


A visual representation.

Terminal

Something you can sit down at, and work like a boss.

Terminal

Console

Some hardware that does a bunch of stuff.

Console

Another example of a console, would be a video game console such as a Super Nintendo [where you can play Actraiser]

Shell

Basically an application for running commands.

ShellShell

Command Line [Interface]

Basically anything you input commands into.

CLICLI


From the Linux Information Project:

Terminal : Technically , A terminal window, also referred to as a terminal emulator, is a text-only window in a graphical user interface (GUI) that emulates a console.

In Our words A GUI Application , from where we can access an user's console.

Console: an instrument panel containing the controls for a computer

Shell :A shell is a program that provides the traditional, text-only user interface for Linux and other Unix-like operating systems

Command-Line : A command line is the space to the right of the command prompt on an all-text display mode on a computer monitor (usually a CRT or LCD panel) in which a user enters commands and data


The answers here seem very good. However they are too dry and technical for my taste so I'll give a take.

Terminal is the end of something - where it terminates. For example if you take the subway in some city, the station where you get down is your terminal. Or in an airport the place where people come out when they reach their destination country is considered the terminal. The reason the terminal in the airport is nowadays both the place you get people onboard and the place you get them off the plane is for obvious economic reasons.

A computer's purpose is to get data, do something with it, and spit out the result. Thus the terminal is any device from where you can get the result of the computation (a screen for example). It just happened that in the first computers you usually had the input (keyboard) and output (screen) as a single device. Because of that, nowadays terminals are considered any input/output devices. A mouse, keyboard, screen, camera, they are all terminals.

Shell is an OS thing. On a computer you have the kernel which on Ubuntu for example is the Linux part. Now since the kernel is really low-level a shell is provided - a program that let's the user interact with the kernel in an easy way. That's what BASH is for example.

Console is (from a dictionary)

a flat surface that contains the controls for a machine, for a piece of electrical equipment, etc.

That's why in music industry the board with all the knobs, or in a space shuttle the command table, they are all considered consoles. Super Nintendo and PS2 are also called consoles historically since the first such entertainment devices looked like boxes with a bunch of buttons on them.

Command line is just an interface - the opposite of GUI. Namely there are two types of interfaces on a computer; CLI (command line interface) and GUI (graphical user interface). The main difference is that the first one gets input from the keyboard while the second gets input from the mouse.