Are terminal and shell the same?

Solution 1:

The terminal emulator (often just called terminal) is "just the window", yes. It runs a text based program, which by default is your login shell (which is bash in Ubuntu). When you type characters in the window, the terminal draws these characters in the window in addition to sending it to the shell's (or other program's) stdin. The characters the shell outputs to stdout and stderr get sent to the terminal, which in turn draws these characters in the window.

So yes, the shell and the terminal emulator are completely separate programs, and either can be used without the other.

Solution 2:

I think this question has been explored pretty thoroughly on the Unix and Linux stackexchange site: Differences between shell, console and terminal

Solution 3:

Yes, the terminal emulator and the shell are two different programs. As you're aware, one example of the difference is that launching a terminal window can run different shells depending on what you have configured (bash, tcsh, ksh, ash, even python!).

Another difference is that there are more terminal emulators than just the default: gnome-terminal, several varieties of xterm, konsole (for KDE), etc. (see: http://www.howtogeek.com/howto/ubuntu/set-the-default-terminal-emulator-on-ubuntu-linux/ ). Any shell can be run in any of these terminal emulators, without much difficulty.

A third difference is that, besides running shell commands, you can also start certain interactive applications in your terminal emulator, and they will run in the same window (and still relying on the same terminal emulator program to handle the actual graphics), such as the vim text editor, the nethack RPG, and others. If you wanted, you could set up a profile in your terminal emulator to start nethack, say, automatically when you opened a new tab; no shell involved, but the terminal emulator is still the same program.

A fourth difference is that you can perform remote logins, using a program like ssh, from inside a terminal window. In this case, your shell (or whatever program you run remotely) is running on another computer, and the ssh program connects it to the local terminal emulator program running on your machine which handles graphics.