La terminal como herramienta fundamental
Table of Contents
La terminal o emulador de terminal es una herramienta que te va a acompañar a lo largo de tu vida como desarrollador/a. En este apartado vemos su uso básico y los comandos principales para que te puedas desenvolver con soltura en ella.
En este apartado, cuando veas un texto entre paréntesis angulares significa que tienes que sustituir toda esa parte (paréntesis angulares incluidos) por lo que se describe dentro. Por ejemplo, si lees algo como ls <directorio destino> significa que tienes que escribir ls seguido de una ruta que especifique el destino como, por ejemplo: ls /home/roman. Como ves, he sustituido <directorio destino> por un directorio como es /home/roman.
En este curso te voy a mostrar cómo usar la terminal de sistemas tipo UNIX como GNU/Linux y macOS. En Windows tienes una terminal llamada PowerShell con algunas diferencias. Una vez aprendas a usar un sistema desde la terminal no te va a suponer gran esfuerzo adaptarte a las pequeñas diferencias que te encontrarás en las terminales de otros sistemas.
¿Qué es la terminal?
El emulador de terminal o simplemente terminal, consola o shell es una interfaz en línea de comandos o CLI (Command Line Interface) que nos permite usar un ordenador y comunicarnos con él por medio de órdenes o comandos.
Estas fueron las primeras interfaces, luego aparecieron las interface gráficas o GUI (Graphical User Interface). No obstante, hoy en día las siguen usando administradores de sistema, programadores y usuarios avanzados por la gran potencia que ofrecen.
La terminal se encuentra en todos los sistemas operativos: Windows, MacOS, GNU/Linux, Android, iOS, etc.
Los comandos u órdenes son en realidad programas que llevan a cabo una serie de instrucciones.
Aunque no es exactamente lo mismo un emulador de terminal, un terminal, una consola o un shell, se suelen utilizar como sinónimos. Lo que nosotros vamos a utilizar es en realidad un emulador de terminal o shell, aunque lo vamos a llamar indistintamente como terminal, consola o shell.
Para terminar, debes tener en presente, cuando uses una terminal, que siempre estás dentro de un directorio de trabajo de la jerarquía de directorios del Sistema Operativo.
Sintaxis general
Los comandos, en general, siguen la siguiente sintaxis:
comando [opciones] [argumentos]
donde:
comandoes el nombre de la orden o programa de la terminal,opcionesson determinadas opciones que se pueden aplicar sobre el comando y que cambian su comportamiento, yargumentosson datos que se le pasan al comando.
No todos los comandos tienen opciones y/o argumentos.
Comandos básicos
cd
El comando cd (change directory) se utiliza, como su nombre indica, para cambiar a un directorio.
Un directorio es una carpeta. Aunque son sinónimos en el contexto del shell se suele utilizar el término directorio.
Se usa de la siguiente manera:
cd <ruta absoluta o relativa>
Por ejemplo:
cd /home/romancambia al directorio /home/roman
pwd
El comando pwd (Path WorD) imprime por pantalla la ruta absoluta donde nos encontramos en estos momentos. Auque tiene algunas opciones (muy pocas) nosotros lo vamos a utilizar tal cual, sin opciones ni argumentos.
ls
El comando ls (LiSt) imprime por pantalla los archivos y los directorios que hay donde estamos o los que hay en el directorio que le indicamos como argumento.
Se utiliza de la siguiente manera:
ls [opciones] [argumentos]
Se puede usar la orden sola o con opciones. Algunos ejemplos:
lsImprime por pantalla con un formato estándarls -lCon la opción-lse imprime por pantalla lo archivos y los directorios con información adicional como: usuario, fecha última actualización, permisos, etc.ls -tOrdena los archivos y los directorios por fecha de última actualización.ls -l -tSe aplican las opciones-ly-t.ls -ltSe aplican las opciones-ly-t.
Como ves en los ejemplos de arriba las opciones constan de un guión seguido de una letra. Además se pueden concatenar opciones como ves en los dos últimos ejemplos.
Además, como se comenta arriba, se puede indicar un la ruta (absoluta o relativa) de un directorio para listar su contenido. Por defecto, se lista el contenido del directorio de trabajo (en el que estamos). Algunos ejemplos:
ls /etcImprime por pantalla el contenido del directorio/etcls -l /etcImprime por pantalla el contenido del directorio/etcmostrando información adicional (opción-l).ls /usr/local/binImprime por pantalla el contenido del directorio/usr/local/bin
cat, more
Los comandos cat (conCAT) y more imprimen por pantalla el contenido de un fichero de texto.
Estos comandos requieren como argumento la ruta absoluta o relativa del fichero de texto:
cat <ruta al fichero de texto>
more <ruta al fichero de texto>
Algunos ejemplos:
cat /home/roman/informatica.txtMuestra el contenido del ficheroinformatica.txtque está dentro de/home/romanmore ../informatica.txtMuestra el contenido del ficheroinformatica.txtque está en el directorio de arribamore informatica.txtMuestra el contenido del ficheroinformatica.txtque está en el directorio de trabajo actual
mkdir
El comando mkdir (MaKe DIRectory) crea un directorio en el lugar especificado. Este comando necesita, al menos, un argumento: el nombre del nuevo directorio.
Este comando lo usamos de la siguiente manera:
mkdir [opciones] <dir1> <dir2> <dir3> … <dirN>
Algunos ejemplos:
mkdir /home/roman/nuevoCrea el directorio nuevo dentro de/home/romanmkdir uno dos tresCrea los directoriosuno,dosytresen el directoriode trabajo actualmkdir Documentos/nuevo1 nuevo2Crea los directoriosnuevo1dentro deDocumentosynuevo2dentro del directorio de trabajo actual
Este comando tiene un opción muy útil y utilizada: la opción -p que permite crear los directorios padres de una ruta si no existen. Por ejemplo: si ejecutamos la orden:
mkdir /home/roman/trabajo/nuevo
pero el directorio trabajo no existe dentro de roman, entonces mkdir acaba con un error dado que no puede crear el directorio nuevo si no existe el directorio trabajo. Sin embargo, si ejecutamos la misma orden con la opción -p:
mkdir -p /home/roman/trabajo/nuevo
crearía la carpeta home si no existe, la carpeta roman si no existe, la carpeta trabajo si no existe y la carpeta nuevo si no existe.
rm
El comando rm (ReMove) se utiliza para eliminar ficheros y directorios. Se utiliza de la siguiente manera para eliminar ficheros:
rm <ruta al/los fichero/s a eliminar>
Y de la siguiente manera (con la opción -r) para eliminar directorios (aunque también borraría ficheros):
rm -r <ruta al/los fichero/s o directorio/s a eliminar>
Ejemplos:
rm Documentos/informatica.txtBorra el ficheroinformatica.txtque hay enDocumentosrm -r /home/roman/DocumentosBorra el directorioDocumentosy todo lo que haya dentro (es peligroso y hay que utilizarlo con cuidado)rm uno.txt dos.txt tres.txtBorra los tres ficherosrm -r uno.txt dir1 dir2Borra el fichero y los tres directorios
cp
El comando cp (CoPy) se utiliza para copiar ficheros y directorios. Se emplea la opción -r para copiar directorios y sin opción para copiar ficheros. Además, se requieren dos argumentos:
origen: ruta al fichero o directorio que se desea copiar.destino: ruta al fichero o directorio donde se quiere pegar.
La sintaxis es la siguiente:
cp <origen> <destino> cp -r <origen> <destino>
Ejemplos:
cp /home/roman/infor.txt /home/roman/Documentos/infor.txtCopia el ficheroinfor.txtque está en/home/romandentro de/home/roman/Documentoscon el mismo nombre.cp Documentos/avatar.jpg Escritorio/avatar.jpgCopia la imagenavatar.jpgque está dentro deDocumentosen la carpetaEscritoriocon el mismo nombre.cp snoopdog.mp3 Musica/snoopdog.mp3Copiasnoopdog.mp3que está en el directorio de trabajo dentro de la carpetaMusicacon el mismo nombre.cp inform.txt Documentos/informatica.txtCopia el ficheroinform.txtque hay en el directorio de trabajo dentro de la carpetaDocumentoscon el nombreinformatica.txt(se le ha cambiado el nombre al fichero).cp snoopdog.mp3 Musica/.Forma especial de copiar dentro de un directorio un fichero con el mismo nombre: mediante el.al final como ves.
Comodines
El . es un comodín que se utiliza para ahorrarnos el escribir el mismo nombre cuadno utilizamos el comando cp. Otro comodín que se emplea muy a menudo en órdenes como cp y rm es el *.
El * significa "todo". Lo entenderás mejor con algunos ejemplos:
rm *elimina todos los ficheros en la carpeta de trabajorm -r *elimina todos los ficheros y directorios que hay en la carpeta de trabajorm /home/roman/Documentos/*elimina todos los ficheros que hay dentro de la carpeta /home/roman/Documetoscp * /home/roman/DocumentosCopia todos los ficheros de la carpeta de trabajo a la carpeta /home/roman/Documentos con el mismo nombrecp -r * /home/roman/Documentos/Copia todos los ficheros y directorios de la carpeta de trabajo a la carpeta /home/roman/Documentos con el mismo nombre
mv
El comando mv (MoVe) se utiliza para mover archivos y directorios de un sitio a otro. Su sintaxis es muy sencilla:
mv <origen> <destino>
donde tanto <origen> como <destino> son rutas: la ruta del fichero que quiero mover y la ruta del lugar donde lo quiero mover, respectivamente.
Algunos ejemplos:
mv foto.png Imagenes/foto.pngMueve la imagenfoto.pnga la carpetaImagenescon el mismo nombremv foto.png Imagenes/.Igual que el comando anterior pero usamos el comodín.para indicar que la queremos mover con el mismo nombremv foto.png Imagenes/foto_coche.pngMovemos la imagenfoto.pngdentro deImagenescambiando el nombre afoto_coche.pngmv /home/roman/Documentos/* /home/roman/backup/.Movemos todo lo que hay dentro de la carpetaDocumentosdel usuarioromanal directoriobackupque hay dentro de la carpeta personal del usuarioroman
wget
Se utiliza para descargar ficheros desde Internet (o cualquier red en general). Lo único que debemos conocer es la URL del recurso que queremos descargar. Su uso es muy simple:
wget <URL del recurso>
zip y unzip
Para comprimir ficheros y directorios se utiliza el comando zip de la siguiente manera:
zip <fichero> <list>
donde:
<fichero>es el nombre del fichero comprimido que se obtiene como resultado de comprimir la lista, y<lista>es la lista de ficheros y directorios que se van a introducir en el fichero comprimido.
Por ejemplo, para comprimir 4 imágenes (imagen1.jpg, imagen2.png, imagen3.jpg e imagen4.jpg) en un fichero llamado imagenes.zip tendríamos que ejecutar este comando:
zip imagenes.zip imagen1.jpg imagen2.png imagen3.jpg imagen4.jpg
Otro ejemplo podría ser el siguiente: comprimir la carpeta Documentos/ del usuario roman en un fichero llamado backup.zip:
zip backup.zip /home/roman/Documentos
Para descomprimir se utiliza la orden unzip tal que así:
unzip <fichero comprimido>
donde:
<fichero comprimido>es el fichero comprimido en ZIP.
El resultado de descomprimir se deja en el directorio en el cual estás ejecutando la orden.
Instalar, desinstalar y buscar programas en distribuciones basadas en Debian
En las distribuciones de GNU/Linux basadas en Debian como son Lliurex o Ubuntu, entre otras, se utiliza un gestor de paquetes denominado APT (Advanced Packaging Tool) que se emplea para instalar y desinstalar programas.
Todas las distribuciones traen consigo herramientas GUI para instalar y desinstalar programas. No obstante, aprenderás a instalar y desinstalar programas mediante la herramienta para la terminal denominada apt-get.
Para instalar un programa mediante apt-get se emplea la orden siguiente:
apt-get install <nombre del paquete>
donde:
<nombre del paquete>es el nombre del programa que queremos instalar.
En el mundo GNU/Linux a los programas se les denomina paquetes. En realidad, se puede decir que un programa en GNU/Linux es un conjunto de paquetes. De hecho, cuando instales algún programa verás que se instalarán varios paquetes en muchos casos.
Para desinstalar un programa mediante apt-get se emplea la orden siguiente:
apt-get remove <nombre del paquete>
donde:
<nombre del paquete>es el nombre del programa que queremos desinstalar.
También podemos buscar programas en el repositorio de programas (una especie de "tienda de aplicaciones") mediante la orden apt-cache tal que así:
apt-cache search <criterio de búsqueda>
donde:
<criterio de búsqueda>es el patrón de búsqueda que deseamos utilizar para encontrar el programa que buscamos.
Solo los usuarios administradores pueden instalar y desinstalar programas.
sudo
Hay tareas y comandos que solo pueden ejecutar los usuarios con permisos de administrador. Para llevar a cabo dichas tareas debemos escalar en credenciales usando el comando:
sudo su
el cual nos pedirá la contraseña. Tras ellos comprueba que nuestro usuario tiene permisos de administración, si es así acabamos de entrar en un entorno peligroso porque hemos escalado en permisos y podemos hacer lo que deseemos, nada nos podrá detener.
Cuando estamos "logeados" como administradores el final del prompt tiene un # en vez de $.
Tras ellos podemos llevar a cabo tareas como:
- Instalar y desinstalar programas
- Crear y eliminar usuarios
- Cambiar permisos
- Programar tarea.
- Y, en definitiva, cualquier cosa que se pueda hacer con un ordenador sin límites
En realidad sí hay límites que root puede establecer como explicaré en clase. Seguro que has oído hablar de “rootear un teléfono con Android”. Esto significa que has activado el usuario root que es el “Dios de los usuarios” ya puede hacer cualquier cosa y, por eso, por motivos de seguridad, viene desactivado en los dispositivos con Android y en algunas distribuciones de GNU/Linux. En GNU/Linux hay tres tipos de usuario: - El usuario root. - Usuarios administradores. - Usuarios regulares.
Comodines
Los comodines son patrones de búsqueda que permite seleccionar palabras, frases o secuencias de caracteres. Se pueden usar con prácticamente cualquier comando como cp, rm o ls, por ejemplo.
Estos patrones son, a su vez, secuencias de caracteres con un significado especial.
Los comodines más utilizados son los siguientes:
?representa un único carácter
ls fic?.txt Ejemplo que muestra todos los ficheros cuyo nombre sea "fic" seguido de un carácter y a continuación ".txt". Por ejemplo, ficheros con los siguientes nombre: fic1.txt fic2.txt fico.txt Pero no listaría ficheros cuyo nombre fuera, por ejemplo: fic11.txt fico1.txt
*representa cualquier conjunto de caracteres: desde 0 caracteres hasta cualquier cantidad de caracteres (letras o dígitos).
ls fic*.txt Este ejemplo mostraría todos los ficheros que empiezan por "fic" y acaban por ".txt". Por ejemplo, ficheros con los siguientes nombres: fic1.txt fic2.txt fico.txt Pero no listaría ficheros cuyo nombre fuera, por ejemplo: fic11.txt fico1.txt
[]representa un ranto, ya sea de letras o dígitos.
ls fic[1-5].txt Este ejemplo mostraría los ficheros cuyo nombre fueran: fic1.txt fic2.txt fic3.txt fic4.txt fic5.txt ls fic[aeiou].txt Este otro ejemplo mostraría los ficheros cuyos nombres fueran: fica.txt fice.txt fici.txt fico.txt ficu.txt
[!]representa justo lo contrario que el comodín[].
ls fic[!aeiou].txt Este ejemplo mostraría todos los ficheros que empiecen por "fic"; sigan por cualquier carácter excepto "a", "e", "i", "o", "u"; y termine por ".txt". Este ejemplo mostraría ficheros con estos nombres: fic1.txt ficb.txt Pero no mostraría ficheros con estos otros nombres: fica.txt fice.txt fici.txt fico.txt ficu.txt
{}no es un comodín como tal pero permite especificar varios comodines separados por puntos.
ls {fic*.txt,fac*.txt}
Este ejemplo mostraría los ficheros que empiecen por "fic" y acaben por
".txt" y también los que empiecen por "fac" y acaben por ".txt".
\no es un comodín como tal pero es útil en determinados casos. Se trata del carácter de escape y sirve para "escapar" caracteres que puedan tener un significado especial. Lo veremos con ejemplos en clase.