Está en la página 1de 20

Aprendiendo a caminar en la terminal

Definición

Un  comando  es una acción escrita, generalmente, a través de una terminal y emulada por una shell
para ser ejecutada por nuestro sistema operativo.

.
Comandos de la clase

Wsl

 pwd o print working directory. Comando para encontrar el ruta actual de trabajo de manera
absoluta o desde el directorio /

 cd o change directory. Comando para navegar entre directorios requiriendo, dependiendo, del
directorio o ruta a navegar.
Hay varios shortcuts para navegar rápidamente:

o cd .. para mover a un directorio inmediato anterior

o cd para ir al directorio home

o cd - para mover a un directorio previo

o cd ~ volvemos al home

o pwd te muestra donde te encuentras

 ls. Comando para ver el contenido de un directorio. Por defecto, se mostrará el contenido del
directorio actual.
Algunas opciones son:

o ls -R listar archivos de sub-directorios

o ls -al listar archivos ocultos y de manera detallada

 file . Comando para reconocer el tipo descriptivo del archivo

Comandos básicos
1. pwd (print working directory) es para ver en la carpeta que estamos actualmente
2. cd (change directory) para poder navegar en una carpeta, ponemos cd espacio y el
nombre de la carpeta a la que queremos ir
3. Si queremos ir al home colocamos /, si hay un / es que estamos en el home, si muestra
el signo ~ es que estamos en el hogar de mis documentos
4. ls (list) listar los archivos que tenemos en ese momento
5. ls -al, es un argumento, el espacio significa que el comando principal es ls, el guion que
estamos trayendo argumentos especiales al comando, la a de que nos muestre todos los
archivos incluso los ocultos y la l que sea en forma de lista
6. la flecha para arriba nos muestra el ultimo comando que escribimos
7. Para limpiar la consola puede ser con ctrl l o escribir clear
8. Para volver a la carpeta anterior usamos cd . .
9. mkdir (make directory ) para crear carpetas, ponemos mkdir espaacio y el nombre de la
carpeta
10. touch, para crear un archivo vació usamos el comando touch, permite crear archivos
que no tienen nada por dentro.
11. Wslview es para abrir el archivo.
12. Para ejecutar el explorador de archivos usa el comando explorer.exe . donde el último
punto indica que abrirá el explorador en el archivo desde el que estés invocando el
comando en la terminal. Sin el punto, el explorer se abrirá en la ruta por defecto de
Windows.
13. cat (concatenate), nos muestra el contenido de un archivo
14. history, para ver el historial de nuestros comandos. Si queremos repetir un comando
ponemos el numero del comando, ponemos !#
15. rem (remove), es para borrar un archivo, MUCHO CUIDADO, si se usa mal este comando
puede borrar tu disco duro. Hay otra opciones para borrar como rm -rf
16. - help, ponemos cualquier comando y ponemos - - help, funciona para ver como
funciona cada uno de los comandos.
17. /mnt/c es la dirección para ver el disco duro
18. Dpkg
19. Sudo es para crear carpetas con permisos de administrador o ejecutar como
administrador.
20. Mv es para mover carpetas o archivos en la terminal mv _inicio_ __final___
21. Cat es un conmando que nos permite visualizar un archivo.
22. Man es un comando que nos permite visualizar el manual de algunos comando por ejem
man cat sale el manual de cat
23. Npx es un ejecutable descarga y despues borra al finalizar no lo descarga permanente
mente
24. Npm descarga de forma permanente
25. Sudo apt-get update visualizer ubunto.
26. Sudo apt-get upgrade es actualizar todo.
27. Sudo apt install git es para instalar git.
28. sudo apt-get install -y nodejs
29. sudo apt-get install curl
30. npx create-react-app test para activar un servidor para detener el servidor es con ctrl + c
para finalizar
31. para activar el servidor es npm start
32. para resolver el error que no te deja editar las carpetas es sudo chown -R username
~/nombre de la carpeta te da todos los permisos.
33. Para borrar un archivo es rm elNombreDelArchivo.
34. Para borrar un directorio vacio es rm -b ElNombreCarpeta.
35. Para borar directorio con contenido es rm -rf ElNombreCarpeta.
36. Ssh-keygen el ssh es solo llave que vamos estar utilizando para pasarlo GitHub así
conctar la terminal a GitHub
37. Git add . es un comando que permite agregar todos los archivos del repositorio y si
asemos unos cambios los comandos se usa git add . para actualizar y luego git commit -
m “el mensaje que quieres agregar” y después para finalizar git push -u origin main
38. git commit si solo se agrega asi te manda a un editor
39. Git add NombreDelArchivo REAMDE.md se usa para especificar que archivos quieres
guardar.
40.

1. Regresar a la terminal
2. Crear una llave de tipo SSH la cual es una llave o token que se le estará pasando a GitHub
a. ssh-keygen -t rsa -b 4096 -C “email de github”, en cuanto se ejecute nos indicara la ruta en
donde estará almacenando la llave (en mi caso en: (/home/marcoev/.ssh/id_rsa),
aceptamosy nos creara la carpeta .ssh
i. las carpetas o archivos que inician con . (punto) en el nombre, en Linux se crean como
escondidos
b. posteriormente nos pide una contraseña, la que se indique es importante que no la
olvidemos
c. el archivo id_rsa.pub es el que enviaremos a github y es la parte publica, la parte privada
es la que mantendremos nosotros y no debemos de compartir
i. The key fingerprint is:
ii. SHA256:***********************
d. Comando para evaluar si tenemos un agente de ssh corriendo
i. eval “$(ssh-agent -s)”
3. ssh-copy-id “correo”
a. ADVERTENCIA, El estudiante Sneyder Alfonso indica que este paso no es correcto o
necesario hacerlo, ya que este comando no funciona como un control + c (copy), yo no lo
realice y pude concluir el paso sin problema
4. Nos cambios a la carpeta de .ssh
a. cd ~/.ssh
5. mostramos el contenido del archivo id_rsa.pub, seleccionamos y lo copiamos (con el
mouse)
a. cat id_rsa.pub
b. Para validar que se haya copiado correctamente, en la línea de comandos damos clic
derecho y si se pega, quiere decir que esta bien
6. Vamos al portal de github, en tu usuario ir a settings>SSH and GPG Keys y damos clic en
New SSH Keys
7. Pegamos el contenido en el campo de key y en title escribimos el nombre de la computadora
y clic en Add SSH Key
Clave publica
SHA256:etHB5aMroKKLVpILlFLL2Fjr9q/VTZ5GQtKoI/xZ22U
Agent pid 99
Token de git
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
Repositorio
AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\
settings.json
Comandos para WSL
 Para abrir todo el contenido de un archivo desde la terminal: cat nombreDelArchivo
 Para abrir el administrador de archivos explorer.exe . No olvides incluir el punto
 Para abrir un archivo o un directorio wslview nombreDelArchivo o wslview
nombreDelDirectorio
Espero les sea muy útil el resumen 😄
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 <documento de texto>: Nos muestra las primeras 10 líneas de un archivo de
texto. Para especificar el número de líneas head -n <numero de lineas> <archivo>
 tail <documento>: Nos muestra las últimas 10 líneas.
 less <archivo>: Este es muy cool, es muy interactivo, nos permite hacer scroll, y nos
permite hacer búsquedas haciendo /<palabra a buscar>. Para salir presionamos q 🔍.
 xdg-open <archivo>: Para abrir un archivo desde la terminal. Usa las aplicaciones
predeterminadas. Esto para linux, para mac, es open. Esto crea un proceso en la
terminal que no nos dejará hacer nada mas. Para terminar el proceso ctrl+c.
 nautilus nos permite abrir el explorador de archivos en una posición dada (en linux) 📁

Un comando puede ser 4 cosas:


 Un programa ejecutable: que se compilo en algun lenguaje de programación y se puede
ejecutar
 Un comando de utilidad de la shell.
 Una función de shell
 Un alias
Comandos
 type nos permite saber que clase es un comando. Por ejemplo type cd (es una funcion
de shell), ls (es un alias)
 Para crear un alias: alias ‘nombreDelAlias’ = ‘comandoQueInvoca’. Por ejemploalias
l=”ls -lh”. Temporales, por el momento.
 Con –help o help, puedes tener una ayuda sobre los comandos.
 man ‘comando’ : hace referencia al manual de usuario de un comando, otro similar es
informático
 whatis ‘comando’ : nos da una descripcion muy corta de que hace ese comando. Pero
no funciona con todos.
Wildcard
💡Alternativamente llamado como wild character o wildcard character.
.
Definición
Son un símbolo usado para remplazar o representar uno más caracteres donde comúnmente
se utiliza el * .
. Clases dentro de los Wildcards:
 [:alnum:] Coincide con cualquier carácter alfanumérico
 [:alpha:] Coincide con cualquier carácter alfabético
 [:digit:] Coincide con cualquier número
 [:lower:] Coincide con cualquier letra minúscula
 [:upper:] Coincide con cualquier letra mayúscula

Tipos de wildcards
 % - Usado en SQL para relacionar más de un caracteres 0 o más veces.
 * - Relaciona cualquier carácter 0 o más veces.
 ? - Para relacionar un caracter una vez.
 [ ] - Realizamos relaciones a través de expresiones regular.
Cabe mencionar que los wildcard, pueden ser utilizar como prefijo o postfijo:
# prefijo
dir *.mp3
# postfijo
dir main.*
 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 como mv, cp o rm 💫. También se conocen como comodines.
 ls *<texto>: Nos muestra todos los archivos que tengan en su nombre dicho texto al
final. Si haces ls <texto>* lo busca al final. El asterisco significa cualquier string.
 ls <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 que una mayúscula; esto busca también
dentro de los directorios.
 ls [[:lower:]]* Lo mismo pero con minúsculas.
 ls -d Se muestran solo directorios.
 ls [ad]* Todo lo que inicie con a o con b
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 ejemplo ls > 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 los stdout.
 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.
💡 Los streams son flujos de información relacionadas con algún instrucción realizada, en
proceso o terminada.
.
Definición
*Cuando se interactúa con la bash, hay tres flujos importantes:
 stdin o standard input stream, el cual provee comandos de entrada, descritos con 0.
 stdout o standard output stream, el cual muestra comandos de salida, descritos con 1.
 stderr o standard error stream, el cual provee salidas de errores de los comandos,
descritos con 2.*
.
Redirecciones de salida
Hay dos formas de redireccionar la salida a un archivo
n> Redirecciona la salida para con un archivo.
n>> Redirecciona la salida para con un archivo, concatenando contenido.
.
Considere que se deberá tener permisos de escritura en el destino del archivo.
.
Algunas veces, pudiera necesitar el redirigir el stdout y el stderr para con un archivo. Esto es a
menudo hecho para automatizar procesos o trabajos en background, generando un log o
registro. Por ello, usamos &> &>> donde indicamos el orden u el tipo de salida.
Cabe mencionar que el orden es importante, por ejemplo:
# 1 command 2> &1>output.txt
# 2 command >output.txt 2>&1
1. stderr es redirigido al actual localización del stdout y, luego, stdout es redirigido
al output.txt pero esta segunda redirección, solamente afecta al stdout ignorando
al stderr
2. stderr es redirigido a la actual localización del stdout que es el stdout

Pipe operator |
💡Los filtros son el procesos de tomar una entrada de flujo y, realizando una conversión,
es mandado a la salida de otro stream.
.
Definición
Un pipeline sirve en la construcción de comandos para generar filtros.
.
Pipeline stdout a stdin
Usamos el operado pipe | entre dos comando para direccionar el stdout del primero con
el stdin del segundo. Cualquier comando, entre pipes, puede tener opciones o
argumentos para construir filtros complejos.
Una de las ventajas de los pipes, en Linux y UNIX, es de que pueden variar y generar
salidas intermedias de diferentes procesos, generando todo un trace de flujo de
información.
 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 <texto> genera un stdout con el texto que tenemos.
 cat <archivo1> <archivo2> muestra los dos archivos concatenados 💩.
 El pipe operator | hace que el stdout de un comando sea el stdin de otro comando. Por
ejemplo ls -lh | less
 tee hace algo parecido a >, pero dentro de los pipe´s, por ejemplo ls -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 😂.

¡Los pipe operators de Linux son de lo mejor! En serio puedes hacer cosas muy increíbles con ellos. Por
ejemplo, yo llegué a hacer un comando super poderoso que me consultaba todos los archivos que tenía
guardados en Amazon S3 y me los ponía en varias líneas ordenaditos (porque Amazon te los devuelve
con demasiada información desordenada), es más aquí se los enseño (no te asustes por esto, es algo un
poquito avanzado, pero quiero que veas cómo usando pipe operators puedes hacer cosas increíbles):

aws s3 ls s3://$BUCKET --recursive | awk '{print $4}' | awk -F/ '{print $NF}'

Aquí uso el comando awk (uno de los comandos que ya te expliqué en otra clase 👀). Claro, no necesitas
llegar a hacer cosas complejas para usar pipe operators, puedes hacer cosas sencillas, por ejemplo,
buscar tus paquetes instalados en tu computadora y filtrar por alguno específico:
.

.
En este caso, el comando dpkg --get-selections te dice qué paquetes tienes instalados en Ubuntu, y el
comando grep hace el filtro (little spoiler, lo verás más a profundida más adelante) 👀.
.
¡Pero imagina todo lo que puedes hacer con el pipe operator! Lo mejor es que si logras dominarlo,
aprenderás a automatizar procesos en la terminal 💚.

Notas 😄
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 ejemplo ls; 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 ejemplo ls & date & cal ⏲️

 Condicionales: Podemos agregar lógica a como se corren los comandos:

o AND: Si se cumple un comando, entonces se ejecuta el siguiente, se usa &&, un ejemplo


es mkdir carpeta1 && cd carpeta1 && echo "Si se pudo" . Si no se puede ejecutar el
primer comando, no se ejecuta el siguiente. 🚆

o OR: Se ejecuta el primer comando que se pueda ejecutar, y se usa ||, por ejemplo cd
carpeta || echo "No hay carpeta" 🤩

Nota importante:

 Comandos separados por punto y coma “;” : Se ejecutan uno seguido del otro en el orden en
que fueron puesto. Uno no se ejecuta hasta que el otro proceso aya terminado.

 Comandos separados por & : Se ejecutan todos al mismo tiempo, es decir de forma asíncrona.

 Comandos separados por && : Se ejecutan solo si el comando anterior se aya ejecutado
exitosamente. Suponemos que A, B y C son comando:
A && B && C
El B solo se va ejecutar si el A se ejecuta exitosamente, y el C solo se va ejecutar si el B si ejecuta
exitosamente. Si el B no se ejecuta exitosamenta el C no se ejecuta. Si el A no se ejecuta
exitomante el B y el C no se ejecutan.

 Comandos separados por || : Solo se ejecuta uno. Sea cuantos comandos tienes separados por
|| solo ejecuta o toma en cuenta el primer que se ejecuta exitosamente (bajo la redundacia), y
descarta automaticamente los demas. Cuando uno de los comandos se ejecuta exitosamente,
descarta los demas comandos.

Notas 😄
Cómo se manejan los permisos.
 Cuando listamos con ls -l se muestran varias cosas. Los tipos de archivos:

o - archivo normal.

o d directorio.

o l link simbólico.

o 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.

o rwx (1,1,1) dueño. En modo octal es 7.

o r-x (1,1,1) grupo. En modo octal es 5.

o r-x (1,0,1) world. Octal 5.

 Modo simbólico: Esto es para asignar los permisos a los diferentes posibles usuarios.

o u Solo para el usuario.

o g Solo para el grupo.

o o Solo para otros (world).

o 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 con cat >
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> change mode nos
sirve para cambiar los permisos de un archivo. Si hacemos por ejemplo chmod 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 laresta,
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 con id.

 su root para cambiar de usuario hacía root, hay que tener cuidado al usar este usuario 😟. Su
home es incluso distinto. Los archivos que crea root (o otro usuario) no se pueden eliminar por
un usuario normal.

 sudo <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!!

¿No te parece que el comando whoami es un poco inútil? ¿Qué sentido tiene saber quién soy yo… ¡si yo
sé quién soy!.. 👀.
.
Bien, pues déjame decirte que tiene mucho sentido, y aquí te voy a explicar algunos de sus usos, pero
primero, déjame decirte que en la terminal puedes ejecutar comandos dentro de comandos, ¿cómo?
¡Sencillo!, simplemente escribes: $(cualquiercomando) y este se ejecutará, por ejemplo:

cat $(find ~/Escritorio -name test.txt)

En este comando estoy ejecutando el comando cat (un comando que ya debes saber qué hace), pero a
su vez, dentro de $() estoy ejecutando un comando llamado find (little spoiler), este comando buscará
un archivo dentro de cierta ubicación y te devolverá la ruta completa de ese archivo, entonces, como ya
sabes que te devuelve la ruta completa de ese archivo, el resultado de ese comando se lo está pasando
al comando cat.
.
Pero ahora, ¿cómo podemos aplicarlo al comando whoami? ¡Fácil!, y de hecho lo haremos aplicando un
comando de los que acabamos de ver para modificar permisos.
.

¡Ejemplo práctico!
Este ejemplo que te voy a dar es un problema que a muchas personas les pasa en el Curso de Prework:
Configuración de Entorno de Desarrollo en Windows.
.
Imagina que crear una carpeta llamada PersonalProjects, pero la creas de la siguiente manera:

sudo mkdir PersonalProjects

Al hacer eso, tu carpeta se creará, sí, pero si intentas escribir archivos dentro de ella no podrás, te dirá
“Permission denied”, porque tú no eres el dueño de esa carpeta. Como creaste la carpeta usando sudo,
entonces el dueño de esa carpeta es el usuario root ☝👀,
.
¡Cambiemos al dueño de la carpeta!, para hacer esto, podemos usar el comando chown (Change
Owner), este comando se estructura de la siguiente forma:

chown -R <user>:<group> folder

Entonces, yo podría poner esto:

chown -R retaxmaster:retaxmaster PersonalProjects

Eso sería suficiente para que yo sea el dueño de mi carpeta y pueda escribir en ella. ¿Por qué el grupo
tiene mi nombre de usuario? Porque, en Linux, al crear un usuario, automáticamente se crea un grupo
con el mismo nombre.
.
Muy bien, pero aún no te he dicho en qué interviene whoami aquí, pero seguro ya lo intuyes 👀…
.
Imagina que más personas tienen el mismo problema, y en lugar de decirles algo como: “Primero tienes
que saber cuál es tu usario, luego pones este comando, pero cambias ahí donde dice ‘usuario’ por tu
propio usuario…” mejor les dices: “Toma, con este comando lo solucionas”, sería mucho más eficiente,
¿no crees? Hagamos ese comando:

chown -R $(whoami):$(whoami) PersonalProjects

¿Ves? Exte comando se lo puedes dar a culquiera y le funcionará, porque whoami está poniendo dentro
de dichos parámetros el nombre del usuario!!
.
Esta es tan solo una de las muchas ventajas que tiene el comando whoami, al principio parece un
comando inútil, pero cuando empiezas a combinarlo con más utilidades de la terminal empiezas a ver
que es muy útil ☝👀.

Variables de entorno.
 La termina 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> <Nombre> 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> esto nos sirve para imprimir una variable en particular.
 Algunas variables son:
o HOME es nuestro HOME de usuario 😆.
o 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" para crear un alias útil 👀.
 code <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>,
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 😟.

Cómo configurar variables de entorno


☝ Las variables de entorno son muy útiles cuando quieres compartir un script que usa dichas variables de
entorno. Por ejemplo, ¿alguna vez has usado variables de entorno en proyectos de NodeJS, PHP, Vue,
React? Esas que se guardan en archivos .env, aquí en la terminal son muy similares, puedes tener tus
propias variables de entorno, y puedes crear un script para la terminal que haga uso de ellas!
.
Claro, si solo nos enfocamos al uso exclusivo de la terminal podemos sacarle mucho provecho también,
por ejemplo, podemos saber cuántas rutas tiene nuestra variable PATH:

echo $PATH

Esto por ejemplo, sirve para debuguear cuando algún comando no funcione, podemos mirar si la ruta de
su archvio está dentro de PATH 😄

 La termina 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> <Nombre> 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> esto nos sirve para imprimir una variable en particular.

 Algunas variables son:

o HOME es nuestro HOME de usuario 😆.


o 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" para crear un alias útil 👀.

 code <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>, 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 😟.

Comandos de búsqueda
 Hay otro comando que no se vio en esta clase MUY interesante 👀.
.
Este es el comando whereis (en español: ¿dónde está?), este comando es algo similar a which,
pero mucho mejor. Este comando localiza los ficheros binarios, fuentes y páginas del manual de
un programa, es decir, podemos decir que hace algo así como una “búsqueda mucho más
profunda”, me encanta porque puedes saberlo casi todo sobre la ubicación de un programa 😄.
.
Adicionalmente, find es uno de esos comandos que más amo con toda mi vida, ya puse un
ejemplo usando find en una clase anterior, pero es que es un comando muy bueno! A modo de
anécdota, una vez me pasaron un archivo… escondido entre un montón de carpetas, sí, una
carpeta dentro de otra, dentro de otra, y al lado otras 10 carpetas más… ¿qué hice? usé el
comando find 👀. Ventajas se saber usar la terminal, ¡y ahora tú también sabes usarla! 😄

Es una de las partes mas interesantes de la terminal, ya que nos permite buscar archivos de
manera eficiente y específica 💫.
 which <programa> Busca en todas las rutas del PATH para encontrar donde está alojado algún
archivo binario 🔢.
 find <ruta inicial> -name <archivo> Nos permite encontrar un archivo a partir de una ruta inicial,
y dentro de todas las carpetas que surjan de ese inicio 🌲.
o Algo muy cool es que podemos usar wildcards para hacer mas eficiente la búsqueda 🔍.

o find <ruta inicial> -type <tipo> -name <nombre> podemos especificar el tipo de archivo,
d → directorio, f → documento.
o find <ruta inicial> -size <tamaño><unidad> 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"

Banderas del comando find


Banderas básicas:

 -name: Realiza una búsqueda por nombre de archivo.

 -iname: Realiza una búsqueda por nombre de archivo sin tomar en cuenta las mayúsculas o
minúsculas.

 -type: Realiza una búsqueda por tipo de archivo, f(files) y d(directories) que son los más
comunes.

 -size: Realiza una búsqueda por el tamaño de archivo y/o directorio.

Banderas de tiempo⏰

 mmin: Búsqueda por tiempo en minutos.

 mtime: Búsqueda por tiempo en días.

Más banderas👀

 -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).

Hay muchas más banderas, pero esas son las que me parecieron más útiles.
.
Ejemplos:
A continuación pondré unos cuantos ejemplos de las banderas mencionadas anteriormente.
.

Búsqueda de todos los archivos con el permiso 644 a partir del directorio actual con una profundidad de
2 niveles.

find . -perm 644 -maxdepth 2


.
Búsqueda de archivos vacíos a partir del directorio actual.

find . -type f -empty

.
Búsqueda de todos los archivos .log, todos los resultados serán eliminados.

find . -type d -iname "*.log" -delete

.
Para este aporte use como referencia algunas clases y aportes del curso pasado, así como también
conocimientos propios, dejo los link de referencia por si quieren verlo más a fondo(están en inglés):
Link 1
Link 2
Espero que les sea de ayuda, 💚 si te ayudo.

Su majestad: grep
grep es un comando con muchas utilidades, la verdad es que tiene muchos casos de uso, aquí te
dejo algunos que a mí me han sido de utilidad 👀👇:
1. Buscar algún paquete en específico que tengas instalado:
dpkg --get-selections | grep nombreDelPaquete
# dpkg --get-selections te dirá todos tus paquetes instalados
# grep filtrará esa lista con el paquete que te interesa
1. Filtrar algún archivo en específico después de un ls:
ls -al | grep myFile.txt

# ls te dará la lista de todos tus archivos


# grep filtrará todos y te mostrará únicamente el que deseas
1. Buscar algún contenido en específico dentro de algún archivo:
cat unArchivoLargo.txt | grep "La línea que busco"

# cat Te listará todo el contenido de ese archivo


# grep te filtrará únicamente lo que quieres ver

1. Buscar una línea en específico en diferentes archivos por medio de un patrón:


grep "string" archivo_*

# grep buscará la palabra "string" en todos los archivos que comienzen por
"archivo_" y te los mostrará.
1. Buscar usando expresiones regulares (te recomiendo aprender expresiones regulares, son
MUY poderosas 👀):
Imagina que tienes un archivo llamado test.txt y adentro contiene la siguiente frase:
Imagina que quieres buscar algo
Entonces, podemos usar grep así:
grep "Imagina .* algo" test.txt
# grep buscará alguna coincidencia, la expresion .* indica que ahí dentro
puede haber una o más letras, cualquier que sea, así que podrías leerla
como: Imagina (cualquier cosa) algo.
Esto encontrará justo la frase que quieres:
Imagina que quieres buscar algo
.
Hay muchos más casos de uso para grep, te dejo este blog que habla de algunos cuantos casos de
uso más 👀👇:
15 Practical Grep Command Examples In Linux / UNIX
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>: 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:

o -i para ignorar case-sensitive.

o -c cuenta el número de elementos.

o -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 de ls, algo
cómo ls -lh | grep > busqueda.txt 🧠

 wc <archivo> cuenta el número de palabras. Opciones:

o -l cuenta el número de lineas.

o -w cuenta el número de palabras.

o -c número de bits.

 Curso de expresiones regulares:

Curso de Expresiones Regulares - Platzi

 Las expresiones regulares pueden ser útiles en otros contextos, por ejemplo, en otros lenguajes
de programación 🐍 que las soporten.

 Utilidades de red
Existen comandos que nos dan información sobre la red 🥅:

 ifconfig: Nos da información general sobre nuestra red 🔍.


 ping <url>: 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 <url>: Nos trae un archivo de texto a través de la red 🌎. (El index.html).

 wget <url>: Web get, trae un archivo de la web, descarga el archivo directamente a nuestra


computadora 💻. (El index.html con mejor formato).

 traceroute <url>: 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 a ifconfig pero más resumido 👀

Comprimiendo archivos
 Podemos crear archivos comprimidos .zip o .tar desde la terminal. 🤖
 .tar se usa mucho en repositorios. Para comprimir tar -cvf <nombre>.tar
<archivos>, donde c → compress, v → verbose, f→ file. 📁
 .gz es un poco mejor, se usa el mismo comando pero con la bandera z→zip tar -cvzf
<nombre>.gz <archivos>. 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
<directorio>. Para descomprimir usamos unzip <nombre>.zip. 📃
 .rar funciona igual que .zip, pero con rar y unrar 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 <PID> nos ayuda a terminar procesos fuera de nuestra terminal. 🛑
 top <PID> 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 como top pero con esteroides. Debemos instalarlo. Tiene muchas más opciones
💪🏽

Procesos en 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 <numero de trabajo> nos permite traer un proceso al foreground. Es importante notar que el


número de trabajo no es lo mismo que el PID.

 bg <numero de trabajo> 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 🤔.
 vi <archivo> es la versión vieja. 👴🏽
 vim <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>.
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.

Pero, aunque prácticamente es cierto, cada editor es bueno para hacer ciertas actividades, claro,
hay algunos que se destaca más que otros en sus actividades.
.
Por ejemplo, nano, aunque es muy simple, te ayuda con tareas simple, a mí en lo personal me
encanta usar nano (sí soy un psicópata… 👀 jaja), pero lo uso para tareas simples, por ejemplo,
crear un archivo de notas, modificar líneas de algún archivo (por ejemplo, modificar variables de
entorno, etc).
.
Por otro lado, vim es un editor de texto muy poderoso, una de las ventajas de vim es que puedes
llegar a convertirlo en todo un editor de código super liviano. He conocido chicos que tienen
Vim casi como si fuera un Visual Studio Code, le instalaron algunos temas y listo.
.
Vim resulta ser muy liviano y perfecto para computadoras de bajos recursos, sin embargo, por lo
que tengo entendido, su curva de aprendizaje es un poco lenta.
.
Cada editor responde a una necesidad diferente, cada quién sabrá cuál usar en X momento 👀.
.
PD: Dato curioso, el Curso de Creación de Lenguajes de Programación: Intérpretes fue hecho
usando 100% vim como editor de código principal 👀.

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.
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:
Oh My Zsh - a delightful & open source framework for Zsh
 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:
Customize Windows Terminal with WSL2
 Para regresar a bash exec bash y para ir a ZSH exec zsh. 👀
 Puedes mejorar aún más tu terminal con PowerLevel10k 🚀:
GitHub - romkatv/powerlevel10k: A Zsh theme
 Es importante que instales las fonts necesarias para usar la funcionalidad máxima de esto
🔥.
Mi terminal quedó así:

También podría gustarte