viernes, 7 de agosto de 2015

Introducción A La Consola

¿Qué es la Línea de comandos?

Es un programa que te permite comunicarte con tu sistema operativo mediante una interfaz textual, que utiliza un lenguaje de alto nivel, cercano al lenguaje natural.
Hoy en día la mayoría de usuarios interaccionan con Windows mediante una interfaz gráfica (GUI,Graphical User Interface). Sin embargo, a nivel profesional y para determinadas tareas, una interfaz textual (CLI, Command Line Interface) resulta mucho más eficiente, de ahí la importancia de aprender a utilizar la línea de comandos.
Otros nombres por los que se conoce a la Línea de comandos son: el prompt, la shell o command line.


¿Cómo arranco la Línea de comandos?

Para arrancar la Línea de comandos en Windows has de ejecutar el programa cmd.
Una manera rápida de hacer esto es desde el menú Iniciar, rellena el campo de texto "Buscar programas y archivos" con el nombre del programa de la línea de comandos: cmd y pulsa la tecla "Entrar".

Aparecerá la ventana de la línea de comandos, con un aspecto similar a este:



La Línea de comandos está lista para trabajar y ejecutar cualquier orden que tú le des. Estas "órdenes" se denominan comandos.



¿Cómo ejecuto un comando?

Para ejecutar un comando simplemente escribe su nombre y pulsa la tecla "Entrar".
Por ejemplo, el comando para cerrar la línea de comandos se llama EXIT. Prueba a cerrar la línea de comandos usando este sencillo comando.
Algunos comandos admiten argumentos, cadenas de texto que modifican o especializan el funcionamiento estándar del comando. 

Por ejemplo el comando ECHO imprime por pantalla los argumentos que le pases:

C:\Users\Gregory Lara>echo Hola Mundo!
Hola Mundo!


Para separar y distinguir los comandos de sus argumentos se utiliza uno (o varios) espacios.
A nivel de programación, la Línea de comandos es un programa muy sencillo, consiste en un simple bucle infinito:
  1. Espera a que el usuario escriba algo y pulse "Entrar"
  2. Interpreta lo escrito como un comando y lo ejecuta
  3. Muestra el "resultado" por pantalla
  4. Repite desde 1.

El directorio de trabajo

El directorio de trabajo es un concepto fundamental en la Línea de comandos y representa el "lugar" del sistema de ficheros donde estaremos trabajando.
Cuando creamos o accedemos a ficheros desde la Línea de comandos, estos se crearán, por defecto, en nuestro directorio de trabajo.
La Línea de comandos nos recuerda cual es nuestro directorio de trabajo en todo momento mostrándonos su ruta por pantalla cada vez que espera a que le introduzcamos un nuevo comando. En los ejemplos anteriores, el directorio de trabajo era C:\Users\Gregory Lara.
El comando CD (change directory) sirve para cambiar el directorio de trabajo. Windows mantiene un directorio de trabajo diferente para cada unidad y podemos movernos de unidad simplemente introduciendo su nombre como si fuera un comando.

En el siguiente ejemplo vamos a copiar un fichero java desde el directorio "practicas" en nuestro "Escritorio" (C:\Users\Gregory Lara\Desktop\practicas) a un USB montado en la unidad E:. Para ello utilizaremos los comandos:
  • CD: para movernos de un sitio a otro.
  • DIR: para listar los archivos en un directorio.
  • COPY: para copiar ficheros de un sitio a otro.
C:\Users\Gregory Lara>cd Desktop\practicas

C:\Users\Gregory Lara\Desktop\practicas>dir
 Volume in drive C has no label.
 Volume Serial Number is A276-0A43

 Directory of C:\Users\Gregory Lara\Desktop\practicas

2014-01-12  10:50    <DIR>          .
2014-01-12  10:50    <DIR>          ..
2014-01-12  10:50               119 HolaMundo.java
               1 File(s)            119 bytes
               2 Dir(s)  852.358.754.304 bytes free

C:\Users\Gregory Lara\Desktop\practicas>copy HolaMundo.java E:\backup
        1 file(s) copied.

C:\Users\Gregory Lara\Desktop\practicas>cd E:\backup

C:\Users\Gregory Lara\Desktop\practicas>E:

E:\backup>dir
 Volume in drive E has no label.
 Volume Serial Number is 82F9-0FE4

 Directory of E:\backup

2014-01-12  10:52    <DIR>          .
2014-01-12  10:52    <DIR>          ..
2014-01-12  10:50               119 HolaMundo.java
               1 File(s)            119 bytes
               2 Dir(s)   2.049.359.872 bytes free


La Línea de comandos admite algunas abreviaturas prácticas para referirnos a directorios importantes:
  • ".": es la abreviatura de nuestro directorio de trabajo.
  • "..": es la abreviatura del directorio padre de nuestro directorio de trabajo
En el siguiente ejemplo vamos a mover el fichero java que copiamos antes, del directorioE:\backup al directorio (E:\backup\practicas) utilizando el comando MOVE.

E:\backup> cd practicas

E:\backup\practicas>move ../HolaMundo.java .
        1 file(s) moved.

Trabajando con ficheros

En los ejemplos anteriores ya hemos visto cómo listar los ficheros de un directorio, cómo copiar ficheros y cómo moverlos. A continuación se presenta una lista un poco más extensa de comandos útiles para trabajar con ficheros:
  • CD: cambia el directorio de trabajo
  • E:: nos mueve a la unidad "E:", sustituir por el nombre de la unidad apropiada, por ejemploC:.
  • DIR: lista los archivos contenidos en un directorio
  • MKDIR: crea un nuevo directorio
  • RMDIR: borra un directorio
  • COPY: copia un fichero a un directorio
  • MOVE: mueve un fichero a un directorio
  • DEL: borra un fichero
  • MORE: muestra el contenido de un fichero
La Línea de comandos admite algunos caracteres comodín, que sirven para referirse a varios ficheros al mismo tiempo. Por ejemplo el carácter "*" sirve para referirse a todos los ficheros de un directorio.
Por ejemplo, para copiar todos nuestros ficheros de prácticas a nuestro pincho USB, podemos utilizar el siguiente comando:

C:\Users\Gregory Lara\Desktop\practicas>dir
 Volume in drive C has no label.
 Volume Serial Number is A276-0A43

 Directory of C:\Users\Gregory Lara\Desktop\practicas

2014-01-12  11:18    <DIR>          .
2014-01-12  11:18    <DIR>          ..
2014-01-12  11:18               426 HolaMundo.class
2014-01-12  10:50               119 HolaMundo.java
               2 File(s)            545 bytes
               2 Dir(s)  852.354.453.504 bytes free

C:\Users\Gregory Lara\Desktop\practicas>copy * E:\backup
HolaMundo.class
HolaMundo.java
        2 file(s) copied.

Trabajando con Java

Para trabajar con Java, a nivel básico, es importante conocer los siguientes comandos:
  • JAVAC: el compilador de Java. Admite como argumentos la lista de ficheros .java que se quiere compilar. Admite también otros argumentos, la lista completa se puede obtener ejecutando el comando sin argumentos.
  • JAVA: la máquina virtual Java. Admite como argumento el nombre de la clase cuyo métodoMain se quiere ejecutar. Admite también otros argumentos, la lista completa se puede obtener ejecutando el comando sin argumentos.
En el siguiente ejemplo vamos a compilar y ejecutar un sencillo programa Java desde la Línea de comandos:

C:\Users\Gregory Lara\Desktop\practicas>javac HolaMundo.java

C:\Users\Gregory Lara\Desktop\practicas>java HolaMundo
Hola Mundo!

Redirección de entrada/salida

Los comandos diseñados para funcionar con la Línea de comandos tienen por defecto 3 interfaces de comunicación con el mundo exterior:
  1. entrada estándar: Es un flujo de datos del que los programas pueden leer para obtener sus datos de entrada. Por defecto está asociado al teclado. Por ejemplo, la propia Línea de comandos averigua que comandos quiere ejecutar el usuario mirando su entrada estándar, es decir, las teclas que el usuario pulsa.
  2. salida estándar: Es un flujo de datos por el que los programas pueden mostrar sus resultados. Por defecto está asociado al texto que muestra la Línea de comandos. Cuando nuestro programa Java HolaMundo utiliza System.out.println("Hola Mundo!") le está pidiendo a la salida estándar que muestre ese texto por la pantalla.
  3. salida de error estándar: Similar a la salida estándar pero para mostrar mensajes de error en vez de resultados.
Estos flujos puede redireccionarse, por ejemplo para guardar el resultado de un comando en un fichero en vez de mostrarlo por pantalla, o para redireccionar la salida de un comando a la entrada de otro comando.
Estas operaciones de redirección se realizan utilizando los operadores "<", ">" y "|" (para redireccionar la entrada estándar, la salida estándar y para enlazar salida y entrada respectivamente).
Por ejemplo, para guardar la salida de nuestro programa HolaMundo en un fichero llamadosalida.txt y comprobar su contenido después, podemos ejecutar la siguiente secuencia de comandos:

C:\Users\Gregory Lara\Desktop\practicas>java HolaMundo > salida.txt

C:\Users\Gregory Lara\Desktop\practicas>more salida.txt
Hola Mundo!

Si tenemos un programa Java que cuenta palabras de su entrada estándar, podemos contar las palabras de nuestro fichero de la siguiente manera:


C:\Users\Gregory Lara\Desktop\practicas>java CountWords < salida.txt
2

También podemos contar las palabras directamente de la salida original de nuestro programa HolaMundo, enlazando las salidas y entradas de ambos comandos:


C:\Users\Gregory Lara\Desktop\practicas>java HolaMundo | java CountWords
2

Limitaciones de la Línea de comandos

En muchos sistemas operativos, la Línea de comandos es un programa extremadamente potente y versátil, cuyo manejo profesional es fundamental para un desempeño eficiente de nuestro trabajo.
Sin embargo, la Línea de comandos de Windows es un caso especial, ya que sus funcionalidades son muy limitadas, su lenguaje es inconsistente y su documentación es escasa y confusa.
Aun así, aprender a usarla es muy beneficioso, ya que no solo nos ahorrará tiempo cuando trabajemos en Windows, si no que nos familiarizará con una herramienta que necesitaremos en el futuro, en otros entornos más profesionales.