El interprete de comandos:

Un interprete de comandos (o shell) es un programa que recoge lo que el usuario ha introducido y lo traduce a instrucciones, en el MS-DOS el interprete de comandos es el COMMAND.COM e incluso el mismo Windows. En Linux existen muchas shell como bash, ssh, o el sistema X-Window.
El interprete arranca nada mas terminar de arrancar el sistema.
Por ejemplo, veamos un inicio de sesión:

localhost login: pedvi
Password: Welcome to localhost!

pedvi@localhost:~$

pedvi@localhost:~$ es el prompt del interprete que indica que esta listo para recibir ordenes, a partir de ahora lo abreviaremos usando solamente "$" para un usuario normal y "#" para el root.

Cuando el interprete de comandos recibe un comando primero analiza la expresión y luego entrega la orden al comando .
Por ejemplo:

$ cp hola /home/pedvi

En este caso no tendría que expandir ni modificar nada, simplemente entregaría "hola" y "/home/pedvi" al comando "cp" como argumentos (más adelante veremos para que sirve este comando).

$ cp ho* ~

Ahora si tendría que cambiar unas cosas: El "ho*" lo sustituiría por cualquier archivo del directorio cuyo nombre empezara por "ho" y "~" lo sustituiría por el directorio del usuario (en este caso /home/pedvi, en el caso del usuario2 /home/usuario2 y en el caso del root /root).
En el caso de que solo hubiera un archivo que empiece por "ho", las dos ordenes hacen lo mismo.

Pero, ¿como sabe el interprete donde esta el comando "cp"?
Muy fácil: en la mayoría de sistemas operativos existe una variable que contiene la dirección donde están los comandos.
En Linux esta variable se llama "PATH", para ver lo que contiene una variable usaremos en comando "echo" que sirve para mostrar los argumentos que se le den.
Para mostrar el contenido de una variable con "echo" hay que anteponer "$" al nombre de la variable:

$ echo $PATH

/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games

El interprete buscara el comando en estos directorios en el orden en el que están en PATH.
Para cambiar el contenido de una variable haremos:

$ variable=valor
$ export variable

En el caso de PATH haríamos lo siguiente para añadir a su valor el directorio /home/pedvi:

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
$ PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/home/pedvi
$ export PATH

Es importante que copiemos el valor de PATH antes de cambiarla para que no perdamos ningún directorio.