3.3 La terminal y el uso de comandos

21 marzo 2017

[ Estás en Unidades Didácticas / Unidad 3 – GNU Linux / 3.3 La terminal y el uso de comandos ]
 

La base de todas las distribuciones Linux es el kernel linux, un sistema operativo completo con interfaz de línea de comandos. Aprender a comunicarse con el kernel significa poder hacerlo con todas las distros, sea cual sea su entorno gráfico.

El usuario medio de recursos informáticos sólo debe utilizar aplicaciones con interfaz gráfica de usuario (GUI). El usuario avanzado puede además utilizar interfaz de línea de comandos (CLI).

El usuario de MS-Windows no suele utilizar CLI, esa aplicación que sólo muestra una pantalla negra en la que sólo se puede escribir texto plano.

El usuario de Linux tiene siempre una interfaz CLI dispuesta a recibir instrucciones. La mayoría de distribuciones Linux tienen una interfaz gráfica a la que denominamos escritorio que permite que la mayoría de usuarios puedan interactuar con el equipo sin ser expertos (como proponen MS-Windows y Mac OS-X desde sus inicios). Este escritorio tiene emuladores de terminal, como MS-Windows y Mac OS-X, y además el sistema tiene hasta 6 terminales con las que poder tener un control mayor sobre sistema operativo y, por tanto, sobre el equipo.

Desde el escritorio Linux basta con pulsar Ctrl+Alt+F1 para acceder a la primera terminal (y si cambias F1 por F2F6 accederás a las demás terminales). Desaparece el escritorio y sólo vemos una pantalla con un mensaje de texto y un prompt que nos pregunta con qué usuario queremos iniciar sesión en esa terminal. Podemos tener hasta 6 usuarios diferentes ejecutando procesos gracias a estas terminales, o al mismo usuario ejecutando procesos independientes en diferentes terminales.

El mensaje inicial nos da información sobre la distribución Linux que estamos usando, el nombre de la máquina (que puede coincidir con el nombre de super-usuario pero no tiene por qué) y el identificador de la terminal que termina con número de la terminal en que nos encontramos.

Primera terminal Linux

Primera terminal Linux

Para iniciar sesión desde un LiveUSB de Ubuntu 16.04 (y de sus derivados oficiales) nos identificamos con el nombre de usuario (ubuntu en la imagen, en la versión de 64 bits es it, no hay que recordarlo porque siempre nos lo dice dos veces), nos solicita la contraseña y pulsamos Return (o Intro) pues este usuario no tiene contraseña (es un recurso para poder usar cualquier LiveUSB que no haya sido modificado en este aspecto).

Si el usuario y contraseña son correctos nos presentará el prompt de la sesión:

ubuntu@ubuntu:~$

y ya podemos empezar a trabajar con CLI.

Importante: No dejes ninguna sesión abierta en terminal, sobre todo si utilizas un LiveUSB, podría estar manipulando el sistema de ficheros al extraer el dispositivo y estropearlo por completo. Antes de salir de la terminal cierra la sesión con

ubuntu@ubuntu:~$exit

Te aparecerá la misma pantalla que al acceder a la terminal. Ahora podemos volver al escritorio con Ctrl+Alt+F7 (o F8F12 si tienes más escritorios en ejecución).

En Linux también tenemos terminales virtuales en su escritorio, con facilidades estéticas y de comunicación (Ctrl+C o Ctrl+V hacen lo que esperamos los usuarios GUI…). No es necesario abrir una terminal con Ctrl+Alt+F... (y más sabiendo que no debemos olvidar cerrarla correctamente) cada vez que queramos escribir órdenes que se ejecuten en segundo plano, o órdenes que ya conocemos y son idénticas para todas las distribuciones (pues comparten el mismo kernel Linux), como

$sudo gparted

con la que invocamos al programa gparted aunque no sepamos en qué lugar del menú está en una distribución concreta. En Ubunto es fácil buscarlo pero en Lubunto hay que saber dónde está, y en las distribuciones que no he probado sólo te puedo decir que con $sudo gparted (o $gksudo gparted) podrás abrir la aplicación desde línea de comandos.

 
 

¿Cuándo y por qué hemos de usar cada interfaz?

 
Si sabemos encontrar con facilidad la aplicación GUI y su uso no interfiere en el rendimiento de nuestro equipo no hay motivo para usar CLI. En otro caso podemos encontrar múltiples motivos:

  1. El escritorio se ha quedado colgado, no responde, quiero apagar el equipo con seguridad…
  2. Quiero ejecutar uno o varios procesos lentos en segundo plano para que no me distraigan ni ocupen demasiados recursos gráficos que no voy a vigilar.
  3. El comando que controlo es más rápido que la aplicación GUI que hace lo mismo.

 
 

Terminal

 
Una terminal (o consola) es el modo de acceso más básico a un sistema informático. Necesita un dispositivo de entrada (generalmente un teclado) y otro de salida (generalmente pantalla), además de una conexión al sistema informático que quiere operar. Antiguamente la mayoría de usuarios sólo tenían acceso a un terminal (yo he llegado a usar tarjetas perforadas como dispositivo de entrada -las escribía usando un teclado especial y se las pasaba al sistema a través de un lector especial- y listados en papel como dispositivo de salida, y no soy tan viejo…).

Las máquinas de hoy en día son mucho más accesibles y apenas se usan terminales físicas, aunque personalmente opino que deberían volver a usarse en entornos como nuestras aulas (de informática o de teoría) ya que conseguiríamos dar acceso a casi todos sus usuarios sin invertir en grandes máquinas que quedan obsoletas al poco tiempo de terminar de pagarlas. Las máquinas actuales tienen su propio sistema por lo que para usar una terminal han de crear una virtual (la conocida pantalla negra que sólo se expresa usando texto). En linux se diferencian dos tipos de estas terminales: las consolas virtuales de texto, el modo por defecto cuando arranca (puedes ver la terminal ejecutando comandos al arrancar y apagar una distribución linux) y las consolas o terminales gráficos como xterm, eterm, konsole…

Si pulsas Ctrl+Alt+F1 (… hasta F6) en una distribución linux verás una de las consolas virtuales de texto de tu distribución. Puedes usar cualquiera de ellas para que linux vaya haciendo cosas sin molestarte en tu escritorio. Para volver a tu escritorio prueba con Ctrl+Alt+F7 (… hasta F12). Si abres una terminal e inicias sesión en ella recuerda cerrar la sesión antes de apagar el equipo.

 
 

CLI

 
El intérprete de línea de comandos, intérprete de comandos, intérprete o shell, es uno de los puntos fuertes de linux. Permite ejecutar cualquier comando o aplicación en cualquier distribución de linux, compartiendo todas ellas los comandos del kernel (lo que hace que el administrador linux no deba aprender demasiados conceptos distintos para cada distribución). Está a disposición de todos, aunque los usuarios no avanzados sólo se sienten atraídos por el escritorio visual de las distribuciones linux. Quien no sabe qué es linux y qué es una distribución linux puede pensar que es sólo algo para expertos, quien lo sabe piensa que cada cosa es lo que es, espero que al finalizar esta asignatura tú pertenezcas a estos últimos.

El shell es realmente un programa que es capaz de interpretar las instrucciones que recibe en forma de texto plano y generalmente realiza unas acciones y a menudo muestra en la misma terminal algún resultado. La terminal y el shell forman una Interfaz de Usuario, (casi) universal para todas las distribuciones linux. Como se trata de un programa, existen muchos: Thompson Shell (sh), Bourne Shell (sh), C-Shell (csh), Korn Shell (ksh), Z-Shell (zsh), Bourne Again Shell (bash), Tenex C Shell (tcsh), A Shell (ash), Debian Almquist Shell (dash)…

Todos ellos son similares en uso, si vas a usar uno en concreto es bueno que conozcas perfectamente sus normas y sintaxis. Por defecto suele usarse bash, pero como se trata de programas al fin y al cabo, podemos indicar a bash que queremos trabajar con cualquier otro de ellos simplemente escribiendo una instrucción con su nombre en la línea de comandos. El resto de lección nos centraremos en bash, casi todo lo que se diga será aplicable también a otros shells pero te dejo a ti averiguar cuáles son las similitudes y diferencias (hazlo si crees que alguna vez vas a necesitarlo, el tiempo te lo dirá en su momento).

Puedes ver los shells que tienes instalados en el archivo /etc/shells (en el macOS que uso tengo por defecto bash, csh, ksh, sh, tcsh y zsh). Para averiguarlo sólo he escrito en la terminal:

cat /etc/shells

Para saber qué shell estás usando:

echo $SHELL

Y para cambiar de shell, si tenemos permisos de superusuario (sudo su en las máquinas del aula):

chsh -s /bin/bash umh

pudiendo escribir en lugar de bash cualquiera de las que tiene nuestro sistema instaladas o cualquiera que instalemos nosotros.

 

bash

bash toma las ideas iniciales del sh de Bourne, que sustituyó en su día al de Thompson, y algunas funcionalidades de ksh o csh. Al ser un programa libre se utiliza, además de en linux, en otros sistemas operativos como macOS o MS-Windows, así que lo que aprendas en este tema podrás usarlo en más lugares de los que esperabas.

bash se comunica con el usuario a través de la línea de comandos o prompt, en la pantalla, en la que nos da algo de información y espera a que le demos alguna instrucción a través del teclado (instrucción que también veremos en la pantalla). Su aspecto es, por defecto, el siguiente:

usuario@equipo:rutaactual$█

Donde $ puede ser también > e indica que el usuario no tiene privilegios de administrador (en cuyo caso mostraría #). Y es lo que solemos llamar cursor, a veces un guión bajo parpadeando o una barra vertical, que es donde se mostrará la siguiente tecla pulsada en el teclado.

Hay caracteres con significado especial en la rutaactual, como la virgulilla (~) que hace referencia al directorio personal del usuario. Estos detalles los aprenderemos cuando hablemos del sistema de archivos que usa linux.

Hay una variable de entorno llamada PS1 que controla el aspecto de la línea de comando, podemos modificarla para personalizarla. Escribe echo $PS1 para que bash te muestre el valor que tiene en estos momentos, observa que usa una nomenclatura del tipo \u@\h:\w$, donde cada letra escapada tiene un significado, el que ves realmente en el prompt de tu terminal.

Las teclas de dirección arriba y abajo sirven para movernos por el historial de instrucciones de esta sesión. Con el comando history o fc -l podemos ver ese historial y conocer el identificador de cada una de las instrucciones usadas, e incluso cambiar uno de ellos con el comando fc -s. Combinando esto con comandos que permitan escribir un resultado en un archivo (o redireccionar la salida a un archivo) podemos crear un script para automatizar tareas.

Para desplazarse por la instrucción que estamos escribiendo (cuando queremos cambiar un caracter, añadir unas comillas…) se pueden usar las teclas de dirección derecha e izquierda. También es útil conocer los siguientes atajos de teclado:

  • Ctrl+A para ir al principio de la línea.
  • Ctrl+E para ir al final de la línea.
  • Ctrl+U borrar la línea desde el principio hasta el cursor.
  • Ctrl+A borrar la línea desde el cursor hasta el final.
  • Ctrl+L borrar la línea y limpiar la terminal (como el comando clear)

Cuando se está ejecutando una instrucción, si el proceso se alarga, podemos actuar sobre él con los siguientes atajos:

  • Ctrl+C aborta el proceso.
  • Ctrl+Z detiene el proceso. Con bg, fg o kill podemos controlarlo cuando está detenido.

Nunca recomiendo aprender de memoria un atajo de teclado, siempre digo lo que yo hago: tenerlos a mano por si los necesito consultar, recordar que los tengo a mano, si los necesito usar pocas veces no suelo consultarlos pero cuando ya veo que son muchas las veces que me hubieran venido bien sí los consulto. Al cabo del tiempo se me quedan en la cabeza los que realmente me han resultado útiles, sin forzar la máquina. Por ejemplo Ctrl+C fue uno de los primeros que aprendí en la consola de linux cuando quería abortar cualquiera de mis primeras aplicaciones de consola sobre minería de datos, y aún sigo usándolo de vez en cuando.

En clase repasaremos varios comandos: pwd, echo, cal, file, ls, cd

 

Ejercicios

  1. Ejecuta la instrucción bash --help para obtener una ayuda rápida de bash. Observa los dos ejemplos del final de la ayuda obtenida, pruébalos e intenta comprender aunque sea el significado de un par de líneas.
  2. Cambia el prompt para que muestre fecha y hora.
  3. Prueba todos los comandos que puedas de Linux Terminal Command Reference

 

Fuentes

 
 


<– Anterior               Siguiente –>