Terminal Volumen I – ¡Di adios a tu escritorio para siempre!

¡Bienvenidos un día más a un nuevo rootie queridos amigos! Ya estamos de vuelta una semana mas en vuestro blog tecnológico favorito. En el articulo de hoy voy a tratar un tema que llevaba tiempo en mi cabeza y aunque ya la nombre en uno de los post sobre git aquí y aquí hoy vamos a hablar exclusivamente de la Terminal!

¿Qué es eso de la Terminal?

Para aquellos que no sabéis de que hablo (posiblemente Windows PowerUsers) cuando digo terminal, me refiero a esto:

consola
Esto es una consola

Ahora seguro que ya os suena mas porque esto se parece al famoso CMD de Windows y es que básicamente es lo mismo (pero mejor). Es importante decir que en el mundo profesional (o no tan profesional) podréis escuchar gente que la llama Consola o Shell.

la-terminal-tambien-es-consola
Y no, no se refieren a esta Terminal (por suerte)

Terminal, Shell, Consola… en que quedamos!

Efectivamente, es confuso y más cuando tu experiencia con la consola es limitada, así que veamos que es cada cosa:

  • Shell  es el programa que, de hecho, procesa los comandos y devuelve resultados. La mayoría de shells también manejan procesos (tanto en primer como en segundo plano), historia de los comandos ejecutado y edición en linea. Estas funcionalidades (y muchas mas) son estándar en bash, el shell más utilizado en sistemas linux
  • Una terminal hace referencia al software en el que se ejecuta el shell. Hace no tanto tiempo, una terminal era nada más y nada menos, que un monitor y un teclado. Con la evolución de unix/linux, el concepto fue abstraído en una solución de software. Actualmente, me arriesgaría a decir, que todos gestores de ventanas incluyen una Terminal.
  • La consola es un tipo especial de Terminal. Históricamente, una consola era un terminal conectado al puerto serie de consola. Esta conexión permitía una comunicación directa a bajo nivel con el sistema operativo. Linux (en sus diferentes versiones) incluyen consolas virtuales. Al utilizar una consola, también estamos usando shell.

Como conclusión, en un entorno en el que no se trabaja directamente con servidores (estilo centro de datos, o CPDs) podemos asumir que terminal y consola vienen a ser un poco lo mismo.

Pero para terminar de rematarlo, también podéis encontrar el termino CLI (Command Line Interface), usado especialmente para hacer referencia a la consola o terminal.

Comandos básicos.

Para utilizar la terminal decentemente, tenemos que conocer los comandos así como que programas podemos usar directamente en la terminal.

Comando Descripción
cat [nombre_de_archivo] Muestra el contenido de un archivo.
cd /ruta Cambiar directorio
chmod [opciones] modo archivo Cambiar los permisos de un fichero
chown [opciones][nombre_de_archivo] Cambiar el propietario de un archivo
clear (ctrl + L) Limpia la linea de comandos o pantalla
cp [opciones] origen destino Copia archivos y directorios
date [opciones] Muestra o establece la fecha del sistema
df [opciones] Muestra el espacio de disco utilizado.
du [opciones] Muestra el tamaño de un fichero, directorio, etc.
file [opciones][nombre_de_archivo] Muestra el tipo de archivo
find [ruta] [expresión] Busca archivos que concuerde con la expresion.
grep [opciones] pattern [nombre_de_archivo] Lee una lista de archivos e stdin y devuelve los archivos que concuerdan con la expresión.
kill [opciones] pid Termina un proceso.
ln [opciones] [origen] [destino] Crea un acceso directo
ls [opciones] Muestra el contenido del directorio
man [comando] Muestra el manual del comando.
mkdir [opciones] directorio Crea una nueva carpeta
mv [opciones] origen destino Renombra o mueve ficheros a otro directorio.
pwd Muestra la ruta del directorio donde te encuentras
rm [opciones] directorio Elimina ficheros y directorios
rmdir [opciones]directorio Elimina directorios vacíos.
ssh [opciones] [email protected] Conexión segura a servidores con SSH.
su [opciones] [usuario [arguments]] Comando para cambiar de usuario.
tail [opciones] [nombre_de_archivo] Muestra las últimas lineas de un archivo (10 por defecto)
sudo [opciones] Comando para ejecutar acciones con los permisos de otro usuario (.
tar [opciones] [nombre_de_archivo] Crea y extrae archivos de un fichero tar (.tar) (.tar o tarball (.tar.gz o .tgz) . Es capaz de comprimir.
htop Muestra los recursos utilizados por la máquina.
touch [nombre_de_archivo] Crea un archivo vacío con el nombre especificado.
kill-all-terminal
kill-all

Sacándole partido a la terminal

Creo que la siguiente afirmación, mucha gente disentirá o pensarán que no estoy del todo cuerdo (aunque también te puede pasar leyendo mi perfil de Linkedin):

La terminal es la puta ostia en bicicleta mejor herramienta de un profesional IT.

 

terminal-is-the-way
Ven al lado oscuro… tenemos Tmux

Y lo digo totalmente en serio y con conocimiento de causa. Desde que decidí abandonar el camino de Windows y proponerme conquistar Linux, he descubierto el placer de no perder tiempo. Un sentimiento que pesaba sobre mi cuando usaba Windows era el hecho de que cualquier cosa que necesitaba hacer tenia que morir al palo de hacerla en el entorno gráfico. Con el tiempo te aprendes los atajos de teclado y demás, pero poniendo un ejemplo sencillo:

Copiar todos los ficheros de una carpeta a otra, excepto los que ya existan:

Windows:
  • Abre una ventana para buscar lo que quieres copiar.
  • Muévete hasta la carpeta de destino.
  • Botón derecho -> Pegar / Ctrl + V
  • Espera a que salga el mensaje de sobrescribir
  • Haz click

Como podéis ver, son bastantes acciones y entre abrir, cerrar, etc. se pierden bastante tiempo.

Terminal:
  • Abrir terminal.

Hecho, listo, no lleva mas de 30 segundos. La contra es que tienes que saber las rutas, pero eh, con doble tab tienes el autocompletar de rutas.

Automatización

Si, has leído bien, automatización. Y es que gracias al uso de diferentes técnicas en la consola, podemos hacer que tareas monótonas y repetitivas se realicen sin necesidad de intervenir.

Para esto tenemos diferentes herramientas y usos.

Aliases:

Un alias en la terminal es básicamente una referencia a un comando (o cadena de comandos) almacenados en el perfil de la terminal, lo que nos ahorra el escribir ese comando que usas a menudo, aquí podéis ver los que uso en mi macbook (que es la maquina OhMyRoot#1)

terminal-alias-list

Como podéis ver, principalmente tengo alias para conectarme a mis servidores sin necesidad de recordar las IPs o nombres, junto con algunos alias para ejecutar comandos de Symfony 2.7.

Bash scripting.

Otra buena forma de ahorrar tiempo es el crear tus propios scripts para realizar tareas mas complejas y que no pueden ser guardadas en un alias.

Bash scripting, no es mas que un lenguaje de programación. Da la casualidad que bash, es lo que hace funcionar la terminal.

Aquí dejo un ejemplo de script para la configuración de apache y el fichero hosts.

Este script puede ser referenciado para ser usado de forma global en bin, por ejemplo en mi caso es un symlink llamado hosts_installer. Este script lo utilizo actualmente en mi puesto de trabajo y la cantidad de tiempo que me ahorra es increíble, ademas que de esta manera todos hosts siguen un patrón regular y tienen archivos de configuración que se que funcionan, con lo cual no corro el riesgo de instalar un nuevo sitio de forma incorrecta, ¡todo ventajas!

The end? O no…

Y hasta aquí hemos llegado hoy, la verdad que tengo mas post, pero como no quiero hacerlo muy pesado, he decidido que hasta aquí el Volumen I y la semana que viene publicaremos la segunda parte hablando de cosas interesantes como Tmux o Lynx.

¡Nos vemos en el próximo rootie!

Como siempre para cualquier duda, pregunta, comentario, insulto, soborno o amenaza, podéis usar los comentarios o en nuestras redes sociales Facebook y Twitter.

2 Comments

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *