Curso de Introducción a la Terminal y Línea de Comandos
Instructor: Enrique Devars
Materials: https://platzi.com/clases/terminal/
Primeros pasos.
¿Qué es la terminal?
- La terminal es una herramienta indispensable que cualquier persona en la tecnología debe conocer 👀. Es importante porque:
- Te da flexibilidad 📏. Con unos pocos comandos, puedes hacer mucho.
- Es mucho más veloz que una interfaz 💻.
- Es tu única opción si no hay interfaz 😆, como para configurar un servidor remoto.
- Puedes invocar demonios 👿. Hay que tener cuidado con los comandos.
- Específicamente, la terminal es una interfaz gráfica muy sencilla que simula una línea de comandos:
- Terminal: Ventana que muestra el promt.
- Shell (línea de comandos): Programa que ejecuta los comandos. Hay varios tipos de shell, pero sirven para lo mismo. La más comunes son bash shell o Z shell. En este curso, usaremos la primera 🍎.
- Es importante comenzar a usar Linux 😟.
- Un comando es un programa que se puede ejecutar desde la terminal.
Aprendiendo a caminar en la terminal.
- El sistema de archivos 📁 inicia en un slash
/
y desciende a otras carpetas. De todas las carpetas, nos interesahome
ya que dentro se encuentran las carpetas de cada usuario, donde están todos los documentos. - Cuando entramos, la terminal nos coloca en
~
, que es donde están nuestros documentos/home/usuario
. cd
Para acceder una carpeta, usacd <carpeta></carpeta>
, para regresar a la carpeta anteriorcd ..
. Para regresar a home, solo hazcd
.clear
Para limpiar la pantalla, o bien, el comandoctrl+l
.- En cada comando, hay varias especificaciones que podemos poner, después de
-
. ls
para listar archivos. Agrega-l
o-lh
para agregar detalles.pwd
print working directory 🖨️.file <archivo></archivo>
sirve para describir un tipo de archivo y sus características 🥴.
Linux File Hierarchy Structure - GeeksforGeeks
Manipulando archivos y directorios.
- Todo lo que hacemos normalmente en una interfaz gráfica, lo podemos hacer en la terminal 👀.
ls
: Algunas variantes:ls -la
: Nos muestra todo, incluso los ocultos.ls -lS
: Los ordena por tamaño.ls -lr
: Los muestra en reversa.
tree
: Nos muestra todo, lo que hay dentro de cada carpeta, en forma de arbol 🌲. Podemos elegir el nivel de profundidad contree -L
mkdir
: Para crear un directorio nuevo 📁. No es buena idea en general poner espacios en el nombre de los directorios. Si lo quieres hacer, usa comillas"Nombre con espacios"
.touch
: Para crear archivos vacíos. Puedes crear varios con un solo comando 📄.cp <archivo a="" copiar=""></archivo>
: Para copiar un archivo. Si no se pone una ruta en el nombre del nuevo, se va a copiar en el directorio donde estés 🖨️.mv <archivo><archivo con="" nueva="" ruta=""></archivo></archivo>
: Para mover archivos a otra ruta. También te sirve para renombrarlos 💫, funciona con directorios y con archivos.rm <archivo></archivo>
: Elimina archivos. Hay una opción muy útil que esrm -i <archivo></archivo>
(interactivo) que te pregunta explícitamente si en verdad si quiere borrarlo 😟. Funciona de manera directa para directorios vacíos, pero si hay archivos dentro, debes usar la opción recursivarm -r
, que lo que hace es ir borrando todo lo que hay dentro y al final borra el directorio 🔫. Te va preguntando por cada cosa.- Ojo: Lo que borras desde la terminal se borra para siempre 😟.
Explorando el contenido de nuestro archivos.
- Podemos explorar el contenido de archivos sin la necesidad de abrirlos, desde la terminal 🧐. Esto para archivos de texto.
head
: Nos muestra las primeras 10 líneas de un archivo de texto. Para especificar el número de líneashead -n<numero de="" lineas=""><archivo></archivo></numero>
tail
: Nos muestra las últimas 10 líneas.less <archivo></archivo>
: Este es muy cool, es muy interactivo, nos permite hacer scroll, y nos permite hacer búsquedas haciendo/<palabra a="" buscar=""></palabra>
. Para salir presionamosq
🔍.xdg-open <archivo></archivo>
: Para abrir un archivo desde la terminal. Usa las aplicaciones predeterminadas. Esto para linux, para mac, esopen
. Esto crea un proceso en la terminal que no nos dejará hacer nada mas. Para terminar el procesoctrl+c
.nautilus
nos permite abrir el explorador de archivos en una posición dada (en linux) 📁.
¿Qué es un comando?
- Un comando puede ser 4 cosas 4️⃣:
- Un programa ejecutable.
- Un comando de utilidad de la shell. Esto es un programa en si mismo, que puede tener funciones. Ejemplo
cd
- Una función de shell. Son funciones de shell externas al comando de utilidad. Ejemplo
mkdir
- Un alias. Un ejemplo es
ls
type <comando></comando>
: Nos permite conocer que tipo de comando es 🤔.alias l="<secuencia de="" comandos="">"</secuencia>
: Nos permite crear comandos. Son temporales, se borran al cerrar la terminal 👶🏼.help <comando></comando>
: Nos permite consultar un poco de documentación de un comando 📄.man <comando></comando>
: De manual, nos permite conocer mucha mas información de un comando.info <comando></comando>
: Similar al anterior, pero un poco resumido y con otro formato.whatis <comando></comando>
: Describe un comando en una sola línea ☺️. No funciona con todos.
Wildcards.
- Son una serie de caracteres especiales que nos permiten realizar búsquedas muy avanzadas utilizando
ls
🔍. Puedes utilizar wildcards con otros comandos que realicen manipulación de archivos comomv
,cp
orm
💫. También se conocen como comodines. ls *
: Nos muestra todos los archivos que tengan en su nombre dicho texto al final. Si hacesls <texto>*</texto>
lo busca al final. El asterisco significa cualquier string.ls <text>?</text>
El signo de interrogación sustituye a cualquier carácter, por ejemplo, buscamos todos los archivos que tengan una palabra y un número dado de caracteres después. El signo de interrogación significa cualquier carácter.ls [[:upper:]]*
Para filtrar cosas que inicien con una mayúscula; esto busca también dentro de los directorios. Esto se conoce como una clase.ls [[:lower:]]*
Lo mismo pero con minúsculas.ls -d
Se muestran solo directorios.ls [ad]*
Todo lo que inicie cona
o conb
Empezando a correr.
Redirecciones: Cómo funciona la shell.
- Normalmente, cuando pones un comando en la terminal, la salida se muestra ahí mismo, pero se puede redirigir la salida a un archivo 👀. Si la salida es correcta tiene file descriptor 1, si no, file descriptor 2.
- La entrada estándar es nuestro teclado que tiene file descriptor 0, pero también puede venir de otro lado 🧠.
- Para redirigir algo usamos
>
. Por ejemplols > misarchivos.txt
, entonces la salida del comando se guarda en ese archivo de texto. Siempre crea este archivo (si ya existe, lo reescribe).✍🏽 - Para que se concatene la salida en un archivo preexistente usa
"comando" >> "archivo"
. Esto ambos solo redirigen losstdout
. - Para redirigir
stderr
, agregas su file descriptor"comando" 2> "archivo"
. 👽 - Si quiere redirigir cualquiera de las dos opciones
"comando" >> "archivo" 2>&1
. - Esto nos puede servir para, por ejemplo, guardar los mensajes de error que manda un servidor 🤯.
- Para redirigir
stdin
se usa<
. Esto te permite tener de entrada de comandos algún archivo. Un ejemplo seríatail < archivo.txt > archivo_tail.txt
. Se puede emplear también para pasar datos de entrada desde un archivo a un script de Python a ejecutar 🐍. Esto espython3 scrip.py < entrada.txt
. Realmente no se usa mucho.
Redirecciones: pipe operator.
- Es uno de los operadores mas útiles que existen, ya que nos permite poner varios comandos, tales que la salida de uno es la entrada del siguiente 📤.
echo
genera un stdout con el texto que tenemos.cat <archivo1><archivo2></archivo2></archivo1>
muestra los dos archivos concatenados 💩.- El pipe operator
|
hace que el stdout de un comando sea el stdin de otro comando. Por ejemplols -lh | less
tee
hace algo parecido a>
, pero dentro de los pipe´s, por ejemplols -lh | tee output.txt |less
. Se puede poner en medio, pero se ignora porque se sigue pasando.cowsay "Texto"
es un comando que imprime una vaca que dice algo JAJAJAJAJ 🐮.
_________________________
< Nunca pares de aprender >
-------------------------
\^__^
\(oo)\_______
(__)\ )\/\
||----w |
|| ||
echo "Texto" | lolcat
esto lo imprime con colores bonitos 😂.
Encadenando comandos: operadores de control.
- Son símbolos reservados por la terminal que nos permiten ejecutar varios comandos seguidos, e incluso agregar condicionales ⛓️.
- Síncronos: Se corre uno detrás de otro, en orden. Se hace esto con
;
, por ejemplols; mkdir carpeta1; cal
👁️ - Asíncrono: Por cada comando, se abre una nueva terminal, y cada comando se corre de manera paralela, esto es con
&
, por ejemplols & date & cal
⏲️ - Condicionales: Podemos agregar lógica a como se corren los comandos:
- AND: Si se cumple un comando, entonces se ejecuta el siguiente, se usa
&&
, un ejemplo esmkdir carpeta1 && cd carpeta1 && echo "Si se pudo"
. Si no se puede ejecutar el primer comando, no se ejecuta el siguiente. 🚆 - OR: Se ejecuta el primer comando que se pueda ejecutar, y se usa
||
, por ejemplocd carpeta || echo "No hay carpeta"
🤩
- AND: Si se cumple un comando, entonces se ejecuta el siguiente, se usa
Cómo se manejan los permisos.
-
Cuando listamos con
ls -l
se muestran varias cosas. Los tipos de archivos:-
archivo normal.d
directorio.l
link simbólico.b
archivo de bloque especial.
-
Tipos de modos:
rwx
corresponde con read, write y execute. Se representan con 3 bits, y los podemos manejar a través de un modo octal, esto es, pasar de binario a número.rwx (1,1,1)
dueño. En modo octal es 7.r-x (1,0,1)
grupo. En modo octal es 5.r-x (1,0,1)
world. Octal 5.
-
Modo simbólico: Esto es para asignar los permisos a los diferentes posibles usuarios.
u
Solo para el usuario.g
Solo para el grupo.o
Solo para otros (world).a
Aplica para todos.!
Modificando permisos en la terminal.
- Existen diversos usuarios con permisos cada uno; el usuario
root
es especial y puede hacer de todo🚶🏽. - Puedes crear archivos de texto también con
> archivo.txt
y también podemos editarlo concat > archivo.txt
📜 - En un archivo, se muestran:
[tipo de archivo][rwx usuario][rwx grupo][rwx mundo]
, por ejemplo,-rw-r--r-- mitexto.txt
👀. chmod <permiso en="" octal="" para="" usuario=""><para grupo=""><para mundo=""><archivo></archivo></para></para></permiso>
change mode nos sirve para cambiar los permisos de un archivo. Si hacemos por ejemplochmod 755 mitexto.txt
tendremos ahora-rwxr-xr-x mitexto.txt
, esto no cambia para nada el contenido del archivo.- Para quitarle los permisos a alguien en particular, usamos el modo simbólico y usando la resta, por ejemplo quitando el permiso de lectura al usuario
chmod u-r mitexto.txt
. Para agregar, se usa la suma. 🧮 - Podemos hacer configuraciones mas avanzadas, por ejemplo, podemos asignar varios permisos al mismo tiempo
chmod u-x,go=w mitexto.txt
. whoami
Para saber que usuario somos, y también podemos obtener el ID del usuario conid
.su root
para cambiar de usuario hacíaroot
, hay que tener cuidado al usar este usuario 😟. Su home es incluso distinto. Los archivos que crearoot
(o otro usuario) no se pueden eliminar por un usuario normal.sudo <comando></comando>
nos otorga temporalmente los permisos de root para ejecutar algún comando que ocupe permisos especiales. 🦸🏽 Nunca dejes el usuario root por defecto, y ponle una contraseña distinta!!
Variables de entorno.
- La terminal tiene una configuración con diferentes valores, que se pueden acceder con las variables de entorno. Estas son muy importantes para la configuración general del sistema 🚒.
- Podemos guardar alias para que se queden de manera permanente con esto 😉.
ln -s <ruta></ruta>
Esto para hacer link simbólicos, que son un tipo de archivo que hacen referencia a otro lugar, básicamente es un acceso directo desde terminal 📁.printenv
nos muestra todas las variables de entorno que tenemos configuradas 📔.echo $<variables></variables>
esto nos sirve para imprimir una variable en particular.- Algunas variables son:
HOME
es nuestro HOME de usuario 😆.PATH
tiene todas las rutas donde se encuentran los binarios en los que se ejecuta nuestro sistema. 🛣️ Hay varios manejadores de paquetes para binarios, pero no todas las veces se agregan a PATH, y se deben agregar a mano.
- En HOME, existe un archivo que se llama
.bashrc
que es donde está nuestra configuración de Bash. Lo podemos abrir con VS Code para modificarlo. En este archivo podemos crear alias. alias <nombre>="comando"</nombre>
para crear un alias útil 👀.code <archivo></archivo>
para abrir un archivo de texto en VS Code desde la terminal.- Para modificar o crear una variable de entorno, se hace, por ejemplo
PLATZI_MESSAGE='Hola amigos"
. - Para agregar una ruta a la variable PATH ponemos en .bashrc
PATH=$PATH:<ruta></ruta>
, guardamos, cargamos bash en la terminal, y listo 😄. - Es muuuy importante tener cuidado con los alias, nunca hay que nombrar un alias como un comando ya existente 😟.
Improve Your Productivity Using Git and Bash Aliases
Comandos de búsqueda.
- Es una de las partes mas interesantes de la terminal, ya que nos permite buscar archivos de manera eficiente y específica 💫.
which <programa></programa>
Busca en todas las rutas del PATH para encontrar donde está alojado algún archivo binario 🔢.find <ruta inicial="">-name <archivo></archivo></ruta>
Nos permite encontrar un archivo a partir de una ruta inicial, y dentro de todas las carpetas que surjan de ese inicio 🌲.- Algo muy cool es que podemos usar wildcards para hacer mas eficiente la búsqueda 🔍.
find <ruta inicial="">-type <tipo>-name</tipo></ruta>
podemos especificar el tipo de archivo, d → directorio, f → documento.find <ruta inicial="">-size <tamaño><unidad></unidad></tamaño></ruta>
podemos buscar tamaños mayores a un determinado tamaño, por ejemplo, de 20M (megas).
- Solución al reto:
find ./ -name *.txt -type f -size 1M > mis_archivos_texto.txt | echo "archivos guardadados exitosamente"
- Más banderas de
find
👀-**maxdepth**
: Después de está bandera se pone el número de niveles de profundidad en los que queremos realizar la búsqueda-**empty**
: Realiza una búsqueda de archivos y/o directorios vacíos.-**perm**
: Búsqueda de archivos por permisos.-**not**
: Retorna los resultados que no coinciden con la búsqueda.-**delete**
: Está bandera se coloca al final del comando, eliminara los resultados de la busqueda(⚠️Hay que tener mucho cuidado al usarla).
Su majestad: grep.
-
Es uno de los comandos mas útiles, y de los mas potentes dentro de Linux.🤖
-
Nos permite encontrar coincidencias de una búsqueda dentro de una archivo 🤯.
-
grep <expresión regular=""><archivo></archivo></expresión>
: El primer parámetro es una expresión regular, y es diferente a las wildcarts; es muy versátil para realizar búsquedas. ¡Hay un curso de eso en Platzi!. -
Tenemos varías opciones:
-i
para ignorar case-sensitive.-c
cuenta el número de elementos.-v
para hacer búsqueda complementaria, esto es, todos los elementos que no coincidan.
-
Puedes usar
grep
junto con otros comandos. Por ejemplo, para filtar los resultados dels
, algo cómols -lh | grep > busqueda.txt
🧠 -
wc <archivo></archivo>
cuenta el número de palabras. Opciones:-l
cuenta el número de lineas.-w
cuenta el número de palabras.-c
número de bits.
-
Curso de expresiones regulares:
-
Las expresiones regulares pueden ser útiles en otros contextos, por ejemplo, en otros lenguajes de programación 🐍 que las soporten.
Utilidad de la terminal.
Utilidades de red.
Existen comandos que nos dan información sobre la red 🥅:
ifconfig
: Nos da información general sobre nuestra red 🔍.ping
: Nos dice si una página está activa a no 🏃🏽. Lo revisa continuamente, y podemos usarla para ver la velocidad de nuestra conexión.curl
: Nos trae un archivo de texto a través de la red 🌎. (El index.html).wget
: Web get, trae un archivo de la web, descarga el archivo directamente a nuestra computadora 💻. (El index.html con mejor formato).traceroute
: Nos da la lista de todas las computadoras (direcciones IP) por la que nuestra conexión pasa para llegar a un sitio web 🚰.netstat -i
: Nos muestra los dispositivos de red. Similar aifconfig
pero más resumido 👀
Comprimiendo archivos.
- Podemos crear archivos comprimidos
.zip
o.tar
desde la terminal. 🤖 .tar
se usa mucho en repositorios. Para comprimirtar -cvf <nombre>.tar <archivos></archivos></nombre>
, donde c → compress, v → verbose, f→ file. 📁.gz
es un poco mejor, se usa el mismo comando pero con la bandera z→ziptar -cvzf <nombre>.gz <archivos></archivos></nombre>
. Usa el algoritmo gzip que es muy eficiente para comprimir. 📄- Para descomprimirlo, usamos el mismo comando pero con la bandera x → decompress en lugar de c → compress. Para que funcione, debemos descomprimir debemos usar el mismo tipo de compresión (tar o zip). 📖
.zip
es uno muy común. Es necesario instalarlo en linux.zip -r <nombre>.zip</nombre>
. Para descomprimir usamosunzip <nombre>.zip</nombre>
. 📃.rar
funciona igual que.zip
, pero conrar
yunrar
de comandos 👁️🗨️.
Manejo de procesos.
- Cuando se traba nuestro OS, normalmente terminamos procesos con el administrador de tareas 😆, en la terminal se puede hacer, pero es un poco diferente.
ps
nos muestra los procesos que están corriendo actualmente. Cada proceso tiene un PID. Podemos ver los procesos que estén en el background (por ejemplo, CAT).kill
nos ayuda a terminar procesos fuera de nuestra terminal. 🛑top
nos muestra los procesos que están usando más recursos de nuestra computadora. Podemos filtrar los procesos (para ver como, usamos bandera h → help). 🆘- La terminal, sabiéndola usar bien, es más eficiente que el administrador de tareas.
htop
es comotop
pero con esteroides. Debemos instalarlo. Tiene muchas más opciones 💪🏽
Procesos de foreground y background.
- Los procesos que están corriendo pero no se muestran en terminal se dice que están en background. Los que si se muestran están en foregroung. 🏘️
- Para mover un proceso al background, usamos Ctrl+z. Esto lo suspende, pero sigue corriendo (como con Cat). Para matar un proceso se usa Ctrl+c
fg
nos permite traer un proceso al foreground. Es importante notar que el número de trabajo no es lo mismo que el PID.bg
nos permite llevar un proceso al background, pero sin suspender el proceso.⭐
Editores de texto en la terminal.
- Una de las utilidades más importantes de la terminal es el editor de texto.
- Hay diferentes opciones, pero Vim es uno de los mas sencillos y populares. También está Emacs y Nano 🤔. Vim es muy rápido y consume pocos recursos.
vi <archivo></archivo>
es la versión vieja. 👴🏽vim <archivo></archivo>
: Vi modern. Tenemos dos modos, el normal o de inserción, para instertar presionamos la tecla i y para salir presionamos Esc. Para salir del editor y guardar :wq. 🔒- Este editor tiene un resaltador de sintaxis 😄 depende del tipo de archivo.
- Al igual que con
less
para buscar una palabra, podemos hacerlo en Vim con/<palabra></palabra>
. Te lleva a la primera coincidencia. - Para eliminar una línea, desde el modo normal, nos ponemos al inicio de la línea y presionamos dd.

Un memingo 😆
Vim documentation : vim online
Personalizar la terminal de comandos.
-
Podemos personalizar la terminal para que quedé bonita, profesional y sea muy cómoda 💖.
-
Para esto, podemos usar un emulador llamado Tilix.
-
En Tilix podemos tener varias terminales activas 🤯.
-
Podemos instalar ZSH, y luego
chsh -s <> $(which zsh)
, con este comando podemos cambiar de shell. -
Ya en ZSH, podemos instalar un enhancer que incrementa las capacidades de la shell:
-
Windows Subsystem for linux no permite GUI 😢 por lo que no se puede usar Ubuntu en windows con esta terminal. Pero podemos usar WINDOWS TERMINAL y esta hermosaaaa 💕. Este blog me resultó muy útil para instalarlo:
-
Para regresar a bash
exec bash
y para ir a ZSHexec zsh
. 👀 -
Puedes mejorar aún más tu terminal con PowerLevel10k 🚀:
-
Es importante que instales las fonts necesarias para usar la funcionalidad máxima de esto 🔥.
Curso de Introducción a la Terminal y Línea de Comandos