6

Notas del Curso de Introducción a la Terminal y Línea de Comandos 🔥

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:
    1. Te da flexibilidad 📏. Con unos pocos comandos, puedes hacer mucho.
    2. Es mucho más veloz que una interfaz 💻.
    3. Es tu única opción si no hay interfaz 😆, como para configurar un servidor remoto.
    4. 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:
    1. Terminal: Ventana que muestra el promt.
    2. 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 interesa home 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, usa cd <carpeta></carpeta>, para regresar a la carpeta anterior cd ... Para regresar a home, solo haz cd.
  • clear Para limpiar la pantalla, o bien, el comando ctrl+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 con tree -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 es rm -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 recursiva rm -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íneas head -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 presionamos q 🔍.
  • xdg-open <archivo></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) 📁.

¿Qué es un comando?

  • Un comando puede ser 4 cosas 4️⃣:
    1. Un programa ejecutable.
    2. Un comando de utilidad de la shell. Esto es un programa en si mismo, que puede tener funciones. Ejemplo cd
    3. Una función de shell. Son funciones de shell externas al comando de utilidad. Ejemplo mkdir
    4. 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 como mv, cp o rm 💫. También se conocen como comodines.
  • ls *: Nos muestra todos los archivos que tengan en su nombre dicho texto al final. Si haces ls <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 con a o con b

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 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. Un ejemplo sería tail < 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 es python3 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 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 😂.

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:
    • 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. 🚆
    • OR: Se ejecuta el primer comando que se pueda ejecutar, y se usa ||, por ejemplo cd carpeta || echo "No hay carpeta" 🤩

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 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></archivo></para></para></permiso>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 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 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></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 de ls, algo cómo ls -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:

    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.


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 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></archivos></nombre>, 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></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 usamos unzip <nombre>.zip</nombre>. 📃
  • .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 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 como top 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.
https://i.imgur.com/vvhSAqf.png

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.

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

    https://i.imgur.com/4SCuC4g.jpg
Escribe tu comentario
+ 2
Ordenar por:
1
7895Puntos

Estan super completos tus apuntes 😃