Este post está dirigido a todos aquellos que, viniendo de mundos Windows o Mac, se sienten un poco perdidos a la hora de saber como usar los comandos que encuentran cuando buscan ayuda googleando y encuentran páginas o foros donde explican cómo hacerlo pero para ello indican extrañas líneas de instrucciones llenas de acrónimos y símbolos que no se entienden si no sabes qué narices es eso.

Generalmente, cuando alguien busca ayuda de como hacer esto o aquello en un entorno windows o mac, las instrucciones incluyen algún pantallazo (para ver la ventana que te sale) en la que se indica resaltado de algún modo el botón o check de opción que se debe marcar o pulsar. Y las instrucciones son del estilo de: pincha en “esto” y te saldrá esta ventana, pulsa en la pestaña “tal-y-cual”, y similares…

En cualquier distribución Linux (y a partir de ahora, me voy a enfocar en Ubuntu que será la que más probablemente tenga un recién llegado), lo que se puede hacer gráficamente viene “limitado” por las herramientas gráficas de que disponga la distribución (vamos, los programas instalados más los disponibles en los servidores de Ubuntu y que podemos instalar desde el “Gestor de paquetes Synaptic”). Cada uno de los programas que vemos como ventanitas gráficas, en realidad se traducen en uno o más procesos sobre el sistema operativo, y corresponde a la ejecución de un fichero (la aplicación) cuya interacción con nosotros es gráfica para permitir un control más sencillo de utilizar. Pero no necesariamente todo fichero ejecutable tiene porque tener una respuesta gráfica o visual, puede ser que simplemente permita ser “llamado”, ejecute su proceso y muestre un resultado final.

Pues bien, las aplicaciones ejecutables normalmente se abren con un doble-click sobre su icono desde el entorno gráfico. Esto en realidad no es más que una simplificación de lo que en realidad significa, que es llamar a ese fichero y ponerlo en ejecución. Y para eso no es imprescindible un entorno gráfico. Aquí es donde entra en juego la consola (o terminal) de comandos.

La consola de comandos (o terminal) no es más que otra aplicación (en Ubuntu: Aplicaciones > Accesorios > Terminal) que abre una nueva sesión de nuestro mismo usuario (es decir, que estamos conectados 2 veces a nuestro ordenador) en la que, en lugar del navegador de ficheros, tenemos un intérprete de comandos que espera ordenes textuales. Aquí es donde podremos ejecutar nuestros comandos (o los que indiquen como instrucciones en la página de ayuda que hayamos encontrado).

Existen infinidad de comandos disponibles comunes a todas las distribuciones (comandos GNU) y algunos específicos de la distribución que usemos (hay un pequeño tutorial en esta página del blog) que permiten un control mucho más directo y amplio sobre la máquina de lo que permiten los programas gráficos. Todos tienen la misma estructura:

<comando> <opciones>

El “comando” puede ser un comando interno del intérprete de comandos (hay una lista si escribís el comando “help”) o un fichero ejecutable (en este caso, puede ser sólo el nombre del fichero o la ubicación completa indicando los directorios donde está, algo así como: /usr/bin/lo_que_sea ).

Las “opciones” dependen totalmente del comando, cada uno tiene las suyas. Pero hay una serie de convenciones en todos los comandos GNU. De modo sencillo, las opciones se dividen en “modificadores” o “acciones” y “ficheros a los que aplica”. Los modificadores tienen la forma de un guión seguido de una letra (cuando hay varios, típicamente se agrupan en un sólo guión) o un doble guión seguido de un texto descriptivo de la acción. Generalmente suele existir la opción “-h” o “–help” para ver la sintaxis disponible del comando. Los ficheros pueden ser opcionales, dependerá de si la opción es aplicable a ficheros o no, pero de estar se debe indicar el nombre (o ubicación) del / los ficheros.

Si te fijas, verás que esto permite hacer muchísimo más que el entorno gráfico. Por ejemplo:

  • rm  -Rf  /users  /home  /var =>    esto “borra” (rm) “recursivamente” (-R) y “forzadamente” (-f) las carpetas indicadas y su contenido (por lo de recursivo), las dos primeras suelen contener la carpeta del usuario (junto con el escritorio y la configuración gráfica) y la última contiene datos de trabajo de las aplicaciones (logs del sistema, cola de impresión, bases de datos, información de los paquetes instalados,  …). Vamos, que te cargas el sistema enterito.
  • ren  jpeg  jpg  — /users/* => esto “renombra” (ren) cambiando el texto “jpeg” por el texto “jpg” en el nombre de todos los ficheros que hay en “/users” (hacer esto desde el entorno gráfico nos obligaria a cambiar una por una todas las imágenes)
  • ls  -l  /users  /home  /var => esto “lista” (ls) en formato “largo” (-l) el contenido de las carpetas indicadas (sí, las 3 a la vez, una después de otra)
  • man  ls => muestra el “manual” (man) del comando “ls” (sí, afortunadamente hay un manual para prácticamente todos los comandos disponibles)
  • ….etc…

Sólo hay un par de cosas que se deben entender de este nuevo entorno:

  • siempre estamos ubicados en un directorio (=carpeta) concreto, y los comandos que ejecutemos lo harán sobre ese directorio a menos que se indique lo contrario. (podemos saber donde estamos con el comando “pwd”)
  • los comandos “sudo” y “su” permiten ejecutar lo que sea como si fueramos el superusuario (evidentemenete, nos pedirá la contraseña para verificar nuestra identidad), así que ojo con copiar y pegar aquí cualquier comando sacado de por ahí que empiece por ese prefijo

Espero que esto le sirva de algo a alguien.