Tutorial Terminal de Linux (bash)
1. Qué es la terminal.
2. Para qué sirve?
3. Cómo se usa?
4. Ejemplos de uso básico.
- sudo su
- pwd
- ls
- cd
- mkdir
- apt-get
- vim
- cat
- cp
- rm
- mv
- touch
- clear
- man
5. Utilidades Comunes.
- curl
- chmod
- tree
- nmap
- ncat
- df
- free
- ps
- kill
- uname
- top
- ifconfig
6. Bash.
7. Pipes/Tuberias.
- grep
- less
- head
- tail
- wc
La terminal es la consola de comandos de Linux. Una interfaz que te permite utilizar un montón de programas en forma de comandos. Una de las partes más potentes de un sistema Linux es la terminal. ∆
Con la terminal puedes usar un montón de programas para realizar tareas de todo tipo de forma ágil y sencilla. Crear archivos, modificar ajustes, descargar programas... Utilizando la terminal podrás acelerar y automatizar todo tipo de tareas. Muchas de las herramientas y software más útil y potente se encuentra en forma de programa cli (command line interface). ∆
Para utilizarla solo tienes que escribir el comando que quieras. Pudes pasarle argumentos al comando. ∆
$ sudo su
El primer comando que debes conocer es sudo su. Te preguntará cual es tu usuario del sistema y tu contraseña. Escribes y presionas enter. A partir de este momento pasas a ser root en esta terminal. Es decir, usuario con privilegios para ejecutar todo tipo de comandos. ∆
$ pwd
Este comando son las siglas de print working directory (en español mostrar directorio actual). Nos sirve para conocer la carpeta en la que estamos actualmente. En mi caso al escribir el comando, me sale: /home
En Linux Ubuntu (Así como otros Linux con interfaz gráfica) si haaces click derecho en una carpeta te saldrá la opción de "open terminal here" que te abrirá la terminal en la carpeta en la que estás. ∆
$ ls
Este comando permite listar (mostrar la lista) los archivos de la carpeta en la que estás actualmente.
Por ejemplo si estás en /home te saldrá una lista de los archivos que tienes en /home. ∆
$ cd
Este comando te deja cambiar el directorio actual. Tienes que añadir en el comando el directorio al que entrar. Por ejemplo si tienes una carpeta llamada Tutoriales dentro de /home y estás en /home, podrás entrar en la carpeta con el comando $ cd Tutoriales
Si vuelves a utilizar $ pwd verás que ahora estás en /home/Tutoriales. Para volver a la carpeta anterior puedes usar $ cd ../
Si te pierdes por las rutas(carpetas), hay un símbolo especial para ir siempre a /home sin importar donde estés actualmente. $ cd ~ ∆
$ mkdir
El comando mkdir (make directory) sirve para crear una nueva carpeta como subdirectorio de la carpeta actual donde te encuentras. Puedes irte a home, crear la carpeta Tutoriales en /home y listar los archivos dentro de home para confirmar que la carpera existe.
$ cd ~
$ mkdir Tutoriales
$ ls ∆
$ apt-get
El comando apt-get te permite instalar y desintalar programas/comandos nuevos. El editor de texto en consola vim es de los mas potentes. Para instalarlo $ apt-get install vim
Si te pide confirmación escribe y (i griega) y presiona enter. ∆
$ vim miArchivo.txt
Con el comando vim miArchivo.txt se creará un nuevo archivo de texto en la ruta actual y se abrirá el editor de texto en modo lectura. Antes de hacer nada más, abajo del todo puedes leer "miArchivo.txt" [New File]. Para entrar en modo escritura pulsa la tecla i
Entonces cambiará el texto a -- INSERT -- indicando que estas en modo escritura y puedes insertar texto en el archivo.
Prueba a escribir Este texto está dentro de miArchivo.txt
Una vez acabas de escribir presionas la tecla ESC para salir del modo escritura. Ahora para guardar los cambios y salir escribes :x
Presionas enter y ya vuelves a donde estabas, con el archivo creado. Si no quieres guardar los cambios puedes escribir :q! en lugar de :x ∆
$ cat
El comando cat sirve para poder ver en la consola el contenido de un archivo. Prueba a hacer cat de algún archivo que tengas en wl directorio actual o alade la ruta al argumento. $ cat miArchivo.txt ∆
$ cp
El comando cp (copy) sirve para copiar y pegar un archivo. El primer argumento es el archivo que quieres copiar y el segundo el nombre que quieres que tenga el archivo pegado.
Creaste el archivo miArchivo.txt asique puedes escribir $ ls para ver si te sale en la carpeta actual. Si estabas en /home, puedes copiarlo también a Tutoriales. $ cp miArchivo.txt /Tutoriales/copiaDeMiArchivo.txt
Si ahora te mueves dentro de la carpeta Tutoriales y utilizas el comando ls, podrás ver el archivo creado. ∆
$ rm
El comando rm (remove) sirve para eliminar un archivo. Usa $ ls para listar los ficheros que tienes, así sabes el nombre exacto. La tecla TAB sirve para que la consola te autocomplete el comando. Por ejemplo el archivo copiaDeMiArchivo.txt tiene un nombre bastante largo. Como es un nombre único puedes escribir $ rm copi y presionar TAB para que la consola te ponga todo el nombre del archivo. ∆
$ mv
El comando mv (move) funciona exactamente de la misma forma que $ cp pero en lugar de copiar el archivo lo mueve. ∆
$ touch
El comando touch sirve para crear un archivo vacio.
$ touch archivoVacio ∆
$ clear
El comando clear limpia la pantalla. ∆
$ man
El comando man sirve para ver todas las opciones de cualquier comando. Por ejemplo, si quieres ver para que sirve el comando ls y todas las opciones que tiene, puedes usar $ man ls. Si lees lo que te salen en el manual de ls, verás que existe una argumento --full-time te saldrá la fecha de creacción de los archivos. $ ls --full-time
Se mostrará en consola algo tal que:
-rw------- 1 u0_a04 u0_a04 34 2020-12-15 16:58:47.410789029 +0100 miArchivo.txt
-rw Son los permisos del archivo (r read lectura) (w write escritura)
u0_a04 es el nombre de mi usuario en el sistema.
2020-12-15 es el año, mes y día de creacción del fichero.
16:58:47:410789029 es la hora en la que se creo el archico.
+0100 es el la zona (+0100 es España Península). ∆
Extra:
- A parte de.poder usar man, los propios comandos suelen traer un argumento para poder ver su manual propio.
Este suele ser --help
$ ls --help
- Puedes navegar por todos los comandos que escribiste usando las flechas del teclado arriba y abajo. ∆
Existen un gran número de comandos con muchísimas opciones. Algunos de ellos suelen venir instalados por defecto en Linux y otros tendras que instalarlos si te interesa usarlos.
$ curl
curl es un cliente de unos 25 protocolos de internet. Uno de los más utilizados es el protocolo HTTP, el mismo que utilizan los navegadores como Chrome o Mozilla para solicitar y recibir páginas web, imagenes, etc.
Si no conoces el protocolo, el uso basico del comando será escribir $ curl https://example.com para ver el código de la página. Si no entiendes html, algunas páginas traen apis para poder ver ciertas acciones de forma muy sencilla. Si ir mas lejos el propio foro tiene este tipo de funcionalidad:
$ curl https://foro.elhacker.net/SSI.php?ssi_function=whosOnline
El comando tiene muchísima funcionalidad, por ejemplo podrías descargar una imagen (o cualquier otro archivo) con el argumento -o $ curl https://foro.elhacker.net/Themes/converted/selogo.jpg -o selogo.jpg ∆
$ chmod
chmod sirve para cambiar los permisos de un archivo. Si por ejemolo te descargas un programa, lo compilas a partir de código o lo haces tú, podras darle permisos con $ chmod +775 nombrePrograma. ∆
$ tree
El comando tree muestra todo los subdirectorios y archivos de forma gerárgica. Un ejemplo de la salida en consola de hacer tree a mi carpeta home.
$ tree ~
.
├── Myszkowski.py
├── Tutoriales
│ └── miArchivo.txt
├── alb
├── deleteMe
│ └── album.py
├── exploitdb.txt
├── installed.txt
├── maInstalled.txt
├── req
├── request
└── storage
├── dcim -> /storage/emulated/0/DCIM
├── downloads -> /storage/emulated/0/Download
├── external-1 -> /storage/445A-5BC1/Android/data/com.termux/files
├── movies -> /storage/emulated/0/Movies
├── music -> /storage/emulated/0/Music
├── pictures -> /storage/emulated/0/Pictures
└── shared -> /storage/emulated/0
10 directories, 9 files
tree no suele venir instalado asique debes instalarlo con $ apt-get install tree ∆
$ nmap
Nmap es uno de los scanneres de redes más popular. Nos sirve para averiguar que servicios están disponibles en una red. No viene preinstalado pero es muy útil y al descargarlo también incluye otro comando llamado ncat para comunicarte por la red o establecer servicios. Como siempre instálalo con $ apt-get install nmap
Por ejemplo si utilizas el comando $ nmap google.com obtendras una salida tal que:
Starting Nmap 7.91 ( https://nmap.org ) at 2020-12-15 19:26 CET
Nmap scan report for google.com (216.58.201.174)
Host is up (0.11s latency).
Other addresses for google.com (not scanned): 2a00:1450:4003:802::200e
rDNS record for 216.58.201.174: mad08s06-in-f14.1e100.net
Not shown: 998 filtered ports
PORT STATE SERVICE
80/tcp open http
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 114.64 seconds
Como ves a parte de mostrar la IPv4, la IPv6 y un dominio que resuelve a la ip, muestra los puertos abiertos. En este caso en concreto está el puerto 80 abierto (El servicio que te responde la web de google usando HTTP) y el puerto 443 (El mismo servicio que el 80 pero establece una capa de cifrado sobre http (https))
Son los servicios que usa Chrome cuando escribes http://google.com y https://google.com respectivamente.
A parte de estos servicios hay un montón más como pueda ser un servidor de correos, un vpn, un proxy, un ftp, un ssh, un dns... ∆
$ ncat
Ncat es la herramienta rey para escribir datos a través de todo tipo de redes. Con esta herramienta puedes obtener o enviar una página web, subir o descargar archivos entre equipos, hacer chats... En el apartado de pipes/tuberias de este tutorial se verá su uso, ya que el uso de pipes es prácticamente impresindible. ∆
$ df
df (disk free) muestra información sobre el espacio en todos los sistemas de ficheros de Linux. ∆
$ free
free muestra información sobre la cantidad de memoria RAM disponible y también información del pagefile (archico que utiliza el sistema cuando no queda RAM). Con el argumento -m se muestra en megabytes. ∆
$ ps
ps muestra los procesos activos. PID es un numero para que podamos identificar el proceso. TTY es un identificador de la consola en la que está funcionando el comando. TIME es el tiempo que lleva abierto el proceso. CMD es el nombre del ejecutable o comando que abrió el proceso. Uno de los argumentos mas útiles es -a para mostrar todos los procesos. ∆
$ kill
kill sirve para matar un proceso activo usando su PID. Por ejemplo si tiene vim abierto y se quedó congelado por un error, podrías cerrarlo listando el proceso con ps y usando el comando $ kill 2277 donde 2277 es el PID que mostró ps. ∆
$ uname
uname muestras diversa información sobre el sistema. Procesador, arquitectura, fecha... ∆
$ top
Muestra información sobre tareas, procesos, recursos...
*Algunos comandos se mantienen abiertos. Puedes cerrar este tipo de comandos usando la combinación de teclas control + C o si no funciona, control + D. ∆
$ ifconfig
Muestra las interfaces de red del sistema. ∆
Bash es un lenguaje de programación/scripting simple recomendado para hacer tareas muy simples y rápidas, sobre todo para arrancar programas con configuraciones específicas, hacer pequelas utilidades, etc.
El lenguaje funciona directamente sobre la terminal como si de un comando se tratase, o se puede guardar en un archivo.
El programa más sencillo de bash, sería un programa que diga hola. $ echo "Hola!"
No muy útil, pero puedes guardar información en variables.
$ nombre=Manolo; echo "Hola $nombre";
Combinando algunos de los comandos anteriores con bash, puedes pir ejemplo guardar tu ip en una variable.
$ ip=$(curl http://ipv4bot.whatismyipaddress.com/)
Ahora podrás ver la ip guardada a partir de ahora con $ echo $ip o añadirle un texto: $ echo "Tu ip pública es:$ip"A partir de ahora podrás usar la variable en todos tus programas y comandos donde lo necesites.
Como ves, cuando curl no muestra la información directamente en consola, en su lugar te muestra un progreso. Lo puedes ocultar añadiéndole un argumento:
$ ip=$(curl http://ipv4bot.whatismyipaddress.com/ --silent); echo $ip
Puedes meter varios comandos o lineas de bash separándolas por punto y coma.
Puede que queramos guardar y ejecutar un comando/instrucción, o una serie de comandos (programa) de forma sencilla y sin tener rescribirlos todos. Podemos usar vim para guardarlos. Vamos a hacer una utilidad sencilla que nos muestre la ip actual.
Los comandos y utilidades que hemos estado usando, apt-get install se encargó de meterlas en una carpeta en la ruta bin/ asique podemos movernos ahí, crear nuestro programa y darle permisos. $ cd ~/../usr/bin/; vim miIp; chmod +775 miIp
Presionamos i para escribir en el nuevo archivo. En la primera linea añadiremos un shebang. Esta es una linea para indicar que las instrucciones de este archivo van a correr en el intérprete de bash. #!/bin/bash
En las siguientes lineas podemos añadir comandos e instrucciones como si se tratase de la terminal:
curl http://ipv4bot.whatismyipaddress.com --silent
echo ""
Guardas el archivo con la secuencia ESC :x
El echo "" sirve para hacer un salto de línea tras que curl imprima la ip.
Ya puedes usar este nuevo comando cuando quieras y desde donde quieras escribiendo $ miIp
Usa $ ls para ver todos los comandos que tienes instalados en bin
Tienes mas funcionalidad de bash en el siguiente enlace:
https://zhenye-na.github.io/2018/10/10/learn-shell-scripts-in-15-min.html
Es un buen lenguaje para tareas muy sencillas y básicas. Si buscas algo mas eficiente, sencillo y completo tienes una amplia varieadad de lenguajes de programación.v∆
Las tuberías nos permiten redirigir la salida de los comandos y/o sus errores a la entrada de otros comandos. Existen varios caracteres que sirven para conectar comandos.
Un ejemplo de los más básicos es enviar la salida de un comando a un archivo. $ miIp > miIp.txt
Con > se envia la salida del comando a un nuevo archivo. Si el archivo ya existia se elimina. Si no existía se crea.
Si en lugar de borrar el archivo, quieres añadirle la salida del comando puedes usar >>. $ echo "Mi ip es " >> miIp.txt; miIp >> miIp.txt;
También puedes usar < y << para meter input a tu comando de otro lado, por ejemplo de un archivo.
Cuando usamos los comandos separados por ; se ejecutan de forma independiente. Esto nos podría generar un problema si por ejemplo corres un comando que depende de que el anterior funcionase. Para eso puedes separalos por && en lugar de ;
Otro carcater muy útil es | que sirve para pasar el output entre comandos. Existen múltiples utilidades diseñadas para trabajar con el |. Algunas de ellas:
grep
Este comando permite filtrar la salida de otro comando. Por ejemplo imagínate visitas mi página web y ves que el servidor va muy rápido y te interesa saber que servidor uso. $ curl https://stringmanolo.ga --silent -I | grep -i SERVER
La opción -I de curl es para ver las cabeceras que manda el servidor. La opción -i de grep es para hacer la búsqueda case-insensitive. Esto siginifica que se mostratan todas las líneas que tengan la palabra server independientemente de si server empieza por mayúsculas o no. ∆
less
Este comando te permite abrir la salida del comando como si fuese un archivo. Es útil para cuando un comando envía más información de la que entra en la consola. $ netstat | less ∆
head
Este es útil para cuando solo te interesa mostrar un numero de lineas. Por defecto solo muestra las primera 10, pero puedes cambiarlo con el argumento -n o tambien con el argumento -c el numero de caracteres de la línea. Por ejemplo si quisieses comprobar si alguien ha escrito algo nuevo en la sección de hardware. $ curl https://foro.elhacker.net/SSI.php?ssi_function=recentPosts --silent | grep -i hardware/ | head -n 1 ∆
tail
Hace los mismo que head, pero funciona de abajo hacia arriba, es decir muestra los últimos 10 en lugar de los primeros 10. ∆
wc
wc muestra las lineas, palabras o caracteres que se le pasen. Si lo utilizas sin argumentos te mostrará las 3 cosas. Pudes añadirle -l -w o -c para que solo muestra las letras, palabras o caracteres respectivamente. $ echo "Hola qué tal?" | wc