1

Terminal y Línea de Comandos

Primeros pasos

Empezando a correr

Utilidades de la terminal

[]{#item1 .anchor}
¿Qué es la terminal?

La terminal es un programa que ejecuta líneas de comandos, que a su vez
estas líneas de comando ejecutan acciones y aquí tienes que aprender dos
conceptos: terminal y shell.

La terminal es otra ventana más, es un programa, una interfaz que recibe
un comando para luego pasárselo a la shell y que esta última la ejecute.
Con este programa podemos hacer todo lo que el sistema de carpetas e
interfaz gráfica del sistema operativo puede hacer, pero utilizando
comandos.

Las razones para aprender a usarla son:

  1. Tenemos mucha flexibilidad ya que podemos hacer procesos dentro

    de nuestra computadora de una forma más eficiente, mover grandes
    volúmenes de datos de forma rápida, así como hacer copias e
    incluso programar procesos que se ejecuten en cierto tiempo

  2. Normalmente hacer cosas en la terminal como copiar archivos o

    buscarlos tiende a ser mucho más rápido que hacerlo a través de
    una interfaz gráfica. Por lo tanto podemos decir que tenemos una
    velocidad mayor al realizar dichos procesos en la terminal.

  3. No siempre contaremos con una interfaz gráfica o puede llegar a

    fallar.

Concepto de shell

Ahora la terminal no ejecuta líneas de código, solo la recibe, es la
shell quien hace todo el proceso de tomar el comando, ir con el
procesador y la memoria RAM y decirles “tomen, ejecuten esto”.

Si lo pensamos de otra forma, la shell nos proporciona una forma de
comunicarnos con el procesador y la RAM sin tener que pasar por la
interfaz gráfica.

Algunos tipos de Shells

  • Bourne Shell.

  • Bash Shell. >> Shell por defecto de Linux

  • Z Shell. >> Shell por defecto de una Mac

  • C Shell.

  • Korn Shell.

  • Fish Shell.

  • PowerShell. >> Shell de Windows

¿Por qué usar la shell y no la interfaz gráfica?

Al final del día, la interfaz gráfica, como lo es el sistema de
ventanas, es un programa más y como programa que se ocupa espacio en la
memoria. De hecho, si estás en Windows 10 y abres el administrador de
tareas en la pestaña Procesos, en el grupo Procesos de Windows,
encontrarás uno llamado Explorador de Windows.

image1.png

Este programa no es todo el sistema de ventanas, pero si es todo el
sistema de ficheros y como podemos ver ocupa espacio en CPU y en memoria
RAM.

La terminal es mucho menos pesada que el sistema de ventanas y el
sistema de ficheros

[]{#item2 .anchor}
Aprendiendo a caminar en la terminal

sitema de archivos

image2.png

¿Qué significa el símbolo /?

  • Significa el root o raíz de nuestro sistema de archivos.

¿Qué carpetas podemos encontrar dentro de /?

  • Etc.

  • Dev.

  • Home.

  • Usr.

  • Var.

¿Cuál es el símbolo que hace referencia a la carpeta Home?

  • La virgulilla ~.

COMANDOS PRINCIPALES

Un comando en un programa ejecutable por la terminal, puede aceptar
parámetros y opciones.

  • ~ , sirve para indicarnos que estamos en la carpeta home.

  • / directorio raiz

  • /home alberga a los usuarios

  • ls list contents, va a listar los archivos de la carpeta en la que

    nos encontremos.

  • cd change directory, nos mueve hacia el directorio que indiquemos.

  • clear o crtl+l para limpiar la terminal.

  • Las opciones se colocan con -

  • ls -l, lista los archivos con gran detalle.

  • ls -lh, facilita la lectura de los detalles.

  • cd sin parámetros nos lleva a home.

  • pwd print working directory, nos dice la ruta actual donde nos

    encontramos.

Una ruta absoluta muestra exactamente a donde ir.

  • Operadores de ruta relativa

    1. . nos ubica en el directiorio actual

    2. … nos regresa a un directorio atrás.

  • file nos muestra el tipo de archivo.

  • cd - Change directory

  • cd <directorio> Cambia el directorio actual de trabajo, es decir,

    nos mueve a ese directorio.

  • rmdir Remove directory

  • rm Remove

  • rm -r <directorio> Elimina el directorio y todo su contenido.

  • cp - Copy

  • cp -r <origen> <destino> Hace lo mismo pero de forma recursiva,

    es decir, copia los directorios y su contenido.

  • mv - Move

  • clear Limpia todo el texto del terminal y lo deja como si acabaramos

    de abrirlo.

  • history Muestra los últimos comandos introducidos por el usuario

    actual.

Cat - Concatenar

  • cat -n Muestra el contenido de un archivo numerando las líneas.

  • head Muestra las primeras 10 líneas del archivo especificado.

  • tail Muestra las últimas 10 líneas del archivo especificado.

  • pwd Muestra el direcorio de trabajo, es decir, en el que estas

    ubicado.

  • touch <nombre de archivo> Crea un archivo vacío con el nombre

    especificado, si el archivo existe actualiza la fecha de
    modificación.

  • wget <url> Descarga el archivo del sitio web especificado.

  • wget -r <url> Descarga el sitio web especificado completo (-r de

    forma recursiva hasta 5 niveles del sitio).

ps - Process status

  • ps -aux Muestra información sobre todos los procesos que se están

    ejecutando en el sistema.

top - Top processes

  • top Muestra información sobre los procesos que más CPU consumen.

  • top -u <username> Muestra información sobre los procesos top solo

    ejecutados por un usuario concreto.

man - Manual

  • man <nombre-comando> Muestra las páginas de ayuda de ese comando.

whatis - What is this command

  • whatis <nombre-comando> Muestra una breve descripción sobre lo que

    hace o para que sirve el comando consultado.

unzip - un zip file

  • unzip <nombre-archivo.zip> Descomprime un archivo zip.

  • unzip -l <nombre-archivo.zip> Lista el contenido de un archivo sin

    descomprimirlo.

tar - Tape archive

Crea, muestra y extrae archivos .tar (el nombre viene de los sistemas
de cinta magnetica antiguos)

  • tar -cvf <nombre-archivo.tar> <archivo1> <archivo2> Crea un

    archivo que contiene los archivos indicados.

  • tar -xvf <nombre-archivo.tar> Extrae el contenido del archivo tar.

gzip - GNU zip

  • gzip <nombre-archivo> Crea y descomprime archivos gzip.

[]{#qh9uyzvn12m4 .anchor}
Manipulando archivos y directorios

Listando elementos

ls -la Lista todos los elementos del directorio, incluidos los ocultos.

ls -lS Lista todos los elementos iniciando por los más pesados.

ls -lr Lista todos los elementos de forma inversa.

tree Despliega todos nuestros directorios como un árbol.

tree -L {#} Despliega los elementos que se encuentren en el nivel
indicado.

Manipulación de elementos

mkdir {folder} Crea un nuevo directorio con el nombre indicado.

touch {file} Crea un nuevo archivo con el nombre indicado.

cp {original} {copia} Copia un archivo.

mv {file} {path} Mueve el archivo a la ubicación deseada.

mv {name} {new_name} Renombra el archivo o directorio.

rm {file} Elimina el archivo indicado.

rm -i {file} Pide confirmación antes de eliminar el archivo.

rm -r {folder} Elimina el directorio indicado.

Cómo eliminar archivos (rm)

Otra vez, la sintaxis es muy sencilla. Solo debes escribir el nombre o
la ruta del elemento que quieres eliminar delante del comando rm (rm es
de Remove)

rm [nombreDelArchivoParaEliminar]

El comando rm tiene varias opciones. Las más usadas son:

  • -i (de interactive) te pregunta si estás seguro de eliminar el

    archivo

  • -r (de recursive) elimina todo lo que esté dentro de una carpeta

  • -f (de force) fuerza a borrar todo.

Veámoslo en consola:

La opción -f se usa cuando no puedes borrar algún archivo, bien sea
porque algo lo está usando o porque se está ejecutando.

[]{#jdseyjkeetmv .anchor}
Explorando el contenido de nuestros archivos

head {file} -n {#} Muestra las primeras líneas de código indicadas.

tail {file} Muestra las últimas 10 líneas de un archivo de texto.

tail {file} -n {#} Muestra las últimas de líneas de código indicadas.

less {file} Muestra todo el archivo de texto seleccionado.

open Abre un archivo desde la terminal (MacOs).

xdg-open Abre un archivo desde la terminal (Linux).

nautilus Abrir el sistema de archivos (Linux)

En español, cabeza y cola tienen una funcionalidad muy sencilla, head
imprime las primeras 10 líneas de un archivo y tail imprime las 10
últimas líneas.

La sintaxis de ambos es bastante sencilla, solo tienes que escribir el
nombre del documento que quieres revisar delante del comando que quieras
usar.

Observar todo el contenido usando el comando Less

¿Y qué tal si quieres ver todo el documento? Pues siguiendo la sintaxis
de head y tail escribes el nombre del archivo que quieres abrir delante
del comando less.

less [nombreDelArchivoParaAbrir]

Ahora tendrás una especie de interfaz gráfica donde podrás inspeccionar
el documento. Puedes usar las flechas y el scroll para moverte arriba y
abajo.

Además, puedes buscar palabras dentro del documento. Si presionas la
tecla slash “/”, en la parte de abajo se habilitará un cuadro donde
podrás buscar palabras, solo escribe y presiona enter.

Para salir de la interfaz presiona “q”.

Abrir en un programa el archivo cpn el comando xdg-open

El comando xdg-open es sencillo porque hace algo muy simple, abre el
archivo que desees en el programa predeterminado para su extensión.

Por ejemplo, si quieres abrir un documento HTML, se abrirá el editor
predeterminado para ese tipo de documentos.

¿Qué hacer si aparece un error?

Puede que cuando estés usando xdg-open te aparezca un error:

El mensaje dice: “Comando ‘xdg-open’ no encontrado, pero puede ser
instalado con: sudo apt install xdg-utils”

Abrir una carpeta usando el comando Nautilus

¿Te acuerdas que las ventanas también son un programa? Pues como todo
programa lo podemos ejecutar desde la consola usando el comando nautilus
se usa igual que xdg-open, solo que debes seleccionar una carpeta.

[]{#oit6mil98f1p .anchor}
¿Qué es un comando?

Un comando es un mensaje enviado al ordenador que provoca una respuesta
en este sistema y se comporta como una orden, pues informa al
dispositivo informático que debe ejecutar una acción según la indicación
que pueda enviarse.

Cada sistema operativo incorpora un determinado número de comandos
básicos, que permiten ejecutar las tareas más simples con órdenes
directas. A continuación conocerás todo lo relacionado con sistemas
operativos basados en UNIX y sus comandos básicos en la terminal.

Un comando pueden significar cuatro cosas:

  1. Un programa ejecutable

  2. Un comando de utilidad de la shell. Esto es un programa en sí 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
    image3.png

Ejemplos de comandos básicos de la terminal

Ahora conocerás varios tipos de comandos que puedes aplicar en el
proyecto que estás realizando.

  • type <comando>: Nos permite conocer qué tipo de comando es.

  • alias l="<secuencia de comandos>": Nos permite crear comandos.

    Son temporales, se borran al cerrar la terminal .

  • help <comando>: Nos permite consultar un poco de documentación de

    un comando .

  • man <comando>: De manual, nos permite conocer mucha más

    información de un comando.

  • info <comando>: Similar al anterior, pero un poco resumido y con

    otro formato.

  • whatis <comando>: Describe un comando en una sola línea . No

    funciona con todos.

¿Cómo puedo saber qué comando estoy utilizando?

Puedes introducir type ls para ver qué tipo de comando es ls.

Ahora, podemos crear nuestro propio comando con un alias llamado l:

alias l=“ls -lh”

¿Cómo podemos crear alias?

  • Con el comando alias. Seguido del comando escribimos el alias que

    vamos a usar, seguido escribimos un símbolo de igual (=) y entre
    comillas escribimos el comando al que le queremos asignar el
    alias:

    • alias nombre-alias=comando-al-que-apuntamos

[]{#vys38w4n8xo5 .anchor}
Wildcards

Las wildcards o comodines son una serie de caracteres especiales que nos
permiten encontrar patrones o realizar búsquedas más avanzadas. Es
aplicable para archivos y directorios.

Las wildcards te sirven para realizar seccionamiento de archivos o
directorios, ademas de ls los wildcards tambien pueden usarse con
cualquier comando que realice la manipulación de archivos como mv, cp y
rm.

Tipos de wildcards

Buscar todo (*)

El asterisco te ayuda a buscar toda la información dentro de una
carpeta, pero puedes limitar su uso. Si por ejemplo quieres buscar los
archivos que tengan una extensión “.png”, escribes:

ls -l *.png

También lo puedes poner al final, si quisieras buscar, todos los
archivos que comiencen por unos caracteres específicos, entonces
escribes esos caracteres y luego el asterisco.

Por ejemplo, si quisieras buscar todos los archivos que comiencen por
"fotosDe", habría que escribir:

ls -l fotoDe*

Buscar por cantidad de caracteres (?)

Si dentro de tus archivos tuvieras una especie de código para guardar
tus fotos, algo así como “foto1.png”, “foto2.png”, “foto3.png”, etc. En
este caso, sabemos que primero tenemos el string “foto”, luego un solo
número y por último la extensión “.png”.

Si quisieras buscar esas fotos escribirías:

ls -l foto?.png

Aquí estás indicando:

  • Busca todo lo que comience por la cadena de caracteres “foto”

  • Que inmediatamente después tenga un solo caracter

  • Y que al final tenga la cadena de caracteres “.png”

Pero si sabes que no tiene un solo caracter, sino que tiene varios,
entonces escribes tantos signos de interrogación como caracteres
existan. Por ejemplo, si quieres buscar las fotos que tengan esta
estructura “foto11.jpg”, escribes:

ls -l foto??.jpg

También puedes combinar wildcards. Por ejemplo, si sabes que tus fotos
siguen esta especie de código, pero no sabes que extensión tienen,
escribes:

ls -l foto?.*

Aquí estás indicando:

  • Busca todo lo que comience por “foto”

  • Que inmediatamente después tenga un solo caracter

  • Y que tenga lo que sea después del punto

Buscar por caracteres específicos ([])

Si quieres buscar por varios caracteres específicos se usan corchetes.
Para utilizarlos tienes que colocar dentro de los corchetes los
caracteres que quieres buscar.

Por ejemplo, si quisieras buscar los archivos que comiencen por las
letras “c” o “i”, entonces escribes:

ls -l [ci]*

Lo que indica el comando es que busque los archivos que comiencen por la
letra “c” o por la letra “i” y que tengan lo que sea por delante. Cuando
buscamos con esta wildcard ten en cuenta que es case sensitive, por lo
que la letra “i” no es lo mismo que la letra “I”.

ls -l [cCiI]*

Por último, si quieres buscar por rango de números también tienes que
usar esta wildcard. Para hacerlo, escribe el rango de números que
quieres buscar separados por un guion.

ls -l foto[2-6]*

Lo que indica ese comando es:

  • Busca todo lo que comience por la cadena de texto “foto”

  • Que justo después tenga un número entre el 2 y el 6

  • Y que tenga lo que sea por delante.

Tabla de wildcards

WildcardFunción
*Busca todo
?Busca por cantidad de caracteres
[]Busca por caracteres específicos

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

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

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

Las wildcards son una serie de patrones o caracteres especiales que nos
permiten realizar búsquedas avanzadas de archivos. Podemos usarlos con
diferentes comandos como: ls, mv, cp y rm

###Empezando a correr###
[]{#m70h6wye6zuv .anchor}
Redirecciones: cómo funciona la shell

Qué son las entradas y salidas de la terminal

En la consola nosotros generamos una entrada cuando escribimos y una
salida casi siempre que ejecutamos un comando.

A las entradas típicamente se les suele llamar Standard Input y a las
salidas Standard Output, además se les suele abreviar como stdin y
stdout respectivamente.

Qué son file descriptors

Los file descriptors son números que identifican un recurso. Funciona
asociando un número con una acción, archivo o programa, en el caso de la
shell tenemos 3 file descriptors:

image4.png

El 2 es Standard Error.

Cómo usar el operador de redirección (>)

A veces queremos guardar la información de una salida porque nos puede
interesar almacenar lo que esa salida contiene. Veamos el siguiente
ejemplo, si utilizas el comando:

ls -l

Lo que sucede aquí es que le diste un Standard Input (el comando) y
obtuviste un Standard Output (la lista de archivos).

Si quieres que el Standard Output no vaya a la consola sino hacia un
archivo, entonces puedes usar el operador > seguido del nombre del
archivo en el que quieres guardar la salida.

ls -l > output.txt

Cómo concatenar (>>)

Suponiendo que ya tienes el archivo output.txt y ahora también quieres
guardar la información de la carpeta de documentos, entonces no puedes
volver a ejecutar: ls -l > output.txt Esto lo que hará es reescribir el
contenido del documento, lo que necesitas es concatenar el contenido del
documento con el de la salida, para eso ejecutas: ls -l >> output.txt

Como puedes ver, la salida del comando ls -l se concatenó con la salida
del comando ls -l ./ImagenesEstado. Te puedes dar cuenta porque la
palabra total se repite dos veces.

Por cierto, esa palabra total es el tamaño total de la carpeta en
kilobytes y dice que la carpeta ImagenesEstado pesa 0, porque los
archivos y carpetas vacías no ocupan espacio.

Redirección de errores (2>|2>&1)

El operador de redirección por defecto solo redirecciona el file
descriptor 1 (es decir, el Standard Output). Pero, ¿qué tal si queremos
redirigir un error? Pues tenemos que especificar que queremos el Standar
Error, que tiene el file descriptor 2.

Vamos a generar un error ejecutando un comando que saldrá mal para
redirigirlo a un archivo llamado “error.txt”.

En este caso la opción “ñ” no existe, por lo que produce un error.

También podemos especificar que no importa lo que pase si me da un
Standar Ouput o un Standar Error, igual tiene que guardar la salida en
un archivo. Esto lo hacemos así:

ls -l > output.txt 2>&1 La orden 2>& 1 significa que debe redirigir
el file descriptor 2 y el file descriptor 1.

En la primera ejecución del comando, se ejecuta correctamente y guarda
el Standar Output, pero en la segunda ejecución, el comando falla y
guarda el Standar Error.

Tabla de operadores

OperadorFunción
>Redirecciona la salida. Por defecto redirecciona el Standar Output
>>Concatena la salida con lo que ya tenga el archivo a donde se está redirigiendo la salida
2>Redirecciona el file descriptor 2 (En este caso Standar Error)
2>&1Redirecciona el file descriptor 2 y 1

Streams y redirecciones IO

💡 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

[]{#v8y83tjba1mg .anchor}

<h1>Redirecciones: pipe operator</h1>

Pipe operator es un operador que permite tomar la salida de un comando y
pasarla como entrada de otro comando. Aprendamos más comandos que te van
a ayudar.

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.

¿Cuál es el símbolo que simboliza al pipe operator?

  • |

Comandos de pipe operator

  • 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

    JAJAJA

  • ls -lh Pictures | sort | tee pictures.txt | less

Lista a nivel humano el contenido de Pictures, luego lo ordena, luego
lo ingresa en pictures.txt, luego lo ve en la terminal

Unir cadenas de texto (cat)

Si queremos crear una lista de los archivos de varias carpetas, podemos
usar cat para concatenar la salida de varios de ellos.

Por ejemplo, vamos a crear uno que tenga la lista de los archivos
contenidos en la carpeta “Images” y “ImagenesEstado”.

Crear un archivo con base en una salida (tee)

Si queremos guardar la lista creada anteriormente, podemos pasar esa
salida por medio de un pipe operator al comando tee, el cual creará un
archivo con esa salida.

cat images.txt ImagenesEstado.txt | tee archivos.txt

De momento parece lo mismo, pero si inspeccionamos el archivo
"archivos.txt" veremos esto:

Por cierto, para ver los archivos usa el comando head , para que puedas
ver la línea de comandos. Para inspeccionar archivos el comando less es
mucho más efectivo.

Organizar archivos con sort

Puede ser algo complicado encontrar un archivo dentro de la lista, por
lo que lo podemos organizar alfabéticamente una salida con el comando
sort.

ls | sort | tee archivosHome.txt

Aquí lo que estamos haciendo es:

  • Listar los archivos

  • Organizar los archivos

  • Crear un archivo llamado archivosHome.txt, con las salidas

    anteriores

[]{#ka6wvw8zp03g .anchor}
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”

¿Con que símbolo podemos correr el operador de control que corre los
comandos de manera síncrona?

  • ;

¿Para qué nos sirve el operador de control que corre los comandos de
manera síncrona?

  • Para ejecutar varios comandos al mismo tiempo.

¿Cuál es la sintaxis que necesitamos emplear para usar el operador de
control síncrono?

  • Comando; comando; comando

¿Para qué nos sirve el comando cal?

  • Para imprimir en consola un calendario del mes y día en el que nos

    encontramos en ese momento.

¿Con que símbolo podemos correr el operador de control que corre los
comandos de manera asíncrona?

  • &

¿Para qué nos sirve el comando date?

  • Para imprimir la fecha y hora del momento en que ejecutamos el

    comando.

¿Con que símbolo podemos correr el operador de control que corre los
comandos de manera condicional?

  • &&

¿Para qué nos sirve el operador de control que corre los comandos de
manera condicional?

  • Este nos permite ejecutar varios comandos al mismo tiempo, pero solo

    si el comando anterior se ejecuta correctamente.

¿Cuál es la sintaxis que necesitamos emplear para usar el operador de
control condicional?

  • Comando && comando && comando

¿Cuál es el símbolo del operador de control condicional or?

  • ||.

¿Para qué nos sirve el operador de control condicional or?

  • Nos permite ejecutar varios comandos al mismo tiempo sin importarle

    si el comando anterior se ejecuto correctamente. Este proceso lo
    hará hasta que ejecute todos los comandos que hayamos escrito en
    la terminal con dicho operador.

¿Para qué son útiles los operadores de control?

  • Para ejecutar múltiples comandos al mismo tiempo.

  • Si queremos que un comando se ejecute solo si una condición se

    cumple.

¿En qué caso de uso en desarrollo web podemos usar los operadores de
control?

  • Cuando queramos usar Webpack.

Si usas constantemente la tecla enter para ejecutar varios comandos,
puedes evitarlo si usas el operador ; que separa los comandos que
estamos ejecutando.

Comandos en la misma línea (😉

Solo necesitas escribir los comandos que quieres ejecutar separados por
; y luego presionar enter.

mkdir ProyectosSecretos; ls; date

Lo que sucedió es:

  • Se creó un directorio llamado “Proyectos Secretos”

  • Se listaron los archivos

  • Se imprimió la fecha actual

(Recuerda que el comando cd, Change Directory te cambia al directorio
que le indiques).

En este ejemplo, intentamos cambiar al directrio “lp” pero ese
directorio no existe, así que el comando falla y no se ejecuta el
siguiente.

En caso de que el primer comando se haya ejecutado correctamente pasará
al siguiente, y después verá si ese se puede ejecutar.

cd Folder1/ && touch file1.txt && ls
[]{#ythmgn3184cj .anchor}
Cómo se manejan los permisos
image5.png

image6.png
image7.png

Los permisos son las capacidades que tiene cada usuario dentro del
sistema operativo, no todos los usuarios pueden hacer todas las acciones
sobre ciertos archivos y carpetas.

Cuando listamos archivos utilizando el comando ls -l la primera columna
que nos aparece es la de permisos.

Permisos de usuario

Los siguientes caracteres se leen de 3 en 3, por cada uno de los tipos
de usuario.

Owner

El dueño del archivo, si no se ha cambiado, es quien lo creo y tiene
mayor jerarquía sobre los otros 3. Le corresponden los primeros 3
caracteres de los permisos.

Group

Se puede crear grupos de usuarios para darle a todos o varios los mismos
permisos. A estos usuarios le corresponden el cuarto, quinto y sexto
caracter de los permisos de usuarios y tienen mayor jerarquía que el
último.

World

También llamado “otros”, es cualquier otro usuario que no pertenezca a
un grupo de usuario y tampoco sea el dueño, este tiene la menor
jerarquía.

Ejercicios de práctica

Este concepto puede ser algo complicado así que lo mejor es prácticar,
te dejaré unos ejercicios para que sea más fácil interpretarlo.

Convierte los siguientes permisos a símbolos y en su representación
numérica:

  1. De un directorio, el dueño tiene permiso de lectura y escritura, el

    grupo tiene permisos de escritura y ejecución y world no tiene
    permisos.

  2. De un enlace simbólico el dueño tiene todos los permisos, el grupo y

    world sólo de lectura.

  3. De un archivo comun todos tienen todos los permisos, pero el world

    no tiene permiso de ejecución.

Si sientes que necesitas más información puedes preguntar a la comunidad
o prácticar en la terminal.

[]{#9kuucr2v44jm .anchor}
Modificando permisos en la terminal

~/Documents/CURSO_PLATZI/Terminal_Línea_Comandos/sandbox$ ls -ltotal 0

-rw-rw-r-- 1 victor victor 0 oct 13 18:54 mitexto.txt

~/Documents/CURSO_PLATZI/Terminal_Línea_Comandos/sandbox$

~/Documents/CURSO_PLATZI/Terminal_Línea_Comandos/sandbox$ chmod 755
mitexto.txt

~/Documents/CURSO_PLATZI/Terminal_Línea_Comandos/sandbox$ ls -l

total 0

-rwxr-xr-x 1 victor victor 0 oct 13 18:54 mitexto.txt

Podemos otorgar y quitar permisos de la terminal con los valores octales
y los valores simbólicos. Por ejemplo:

  • chmod u-r - > Le quitamos al usuario el permiso de leer el archivo.

  • chmod u+r - > Le otorgamos al usuario el permiso de leer el

    archivo.

Un comando un poco más avanzado:

  • chmod u-x,go=w mitexto.txt - > Al usuario le quitamos el permiso de

    ejecución, al grupo y others le dimos el permiso de write.

  • El comando whoami nos ayudará para saber quién somos, por si tenemos

    dudas existenciales en la terminal.

  • Podemos cambiar de usuario con su nombreDeUsuario, por ejemplo su

    root

  • El famoso comando sudo nos dará los permisos de root a nuestro

    usuario normal y la contraseña que pedirá para ejecutar los
    comandos es de nuestro usuario normal.

¿Para qué nos sirve el comando chmod?

  • Para cambiar los permisos de usuario sobre un archivo o directorio.

¿De qué modos podemos cambiar los permisos de usuario con el comando
chmod?

  • Octal.

  • Simbólica.

¿Cómo sería la sintaxis para cambiar los permisos sobre un archivo o
directorio usando el comando chmod de manera octal?

  • chmod 755 nombre-archivo

¿Cómo sería la sintaxis para cambiar los permisos sobre un archivo o
directorio usando el comando chmod de manera simbolica?

  • chmod simboloUsuario-operador-permioso nombre-archivoOdirectorio

    chmod g+w file.txt

¿Cuáles son los operadores que podemos usar para asignar permisos a los
usuarios de la manera simbólica?

  • +

  • =

¿Qué significan el operador + en la asignación de permisos de manera
simbólica?

  • Añade un permiso.

¿Qué significan el operador - en la asignación de permisos de manera
simbólica?

  • Quita un permiso.

¿Qué significan el operador = en la asignación de permisos de manera
simbólica?

  • Asigna un permiso.

¿Cómo podemos manipular los permisos del usuario, el grupo y el mundo al
mismo tiempo con el comando chmod?

  • Esto lo hacemos separando los permisos que queremos asignar a cada

    roll por medio de una coma (,) sin dejar espacios entre ellos. En
    caso de que queramos asignarles el mismo permiso a dos rolles
    podemos escribir seguido sus valores simbólicos y el operador
    correspondiente al permiso que les queremos dar: Chmod u-x,go=w
    archivoOdirectorio

¿Qué comando podemos usar para ser el usuario root pero sin la necesidad
de que cambiemos de usuario con el comando su?

  • Con el comando sudo ya podemos hacer cualquier cosa como si fuéramos

    el usuario root.

[]{#gly9gcl3blcq .anchor}
Cómo configurar variables de entorno

En linux hay varias variables de entorno que ya están preestablecidas,
para verlas desde la consola es tan simple como usar el comando seguido
de la variable de entorno.

Por cierto, todas las variables de entorno se mandan a llamar con un
signo de peso por delante, de lo contrario se interpretará como un
comando.

image8.png

Hay muchas más, pero estas son las que te pueden interesar. Por cierto,
por convención las variables de entorno se crean en mayúsculas.

¿Cómo crear tus propias variables de entorno?

En el home de tu usuario debe haber un archivo oculto llamado
"".bashrc"", lo puedes ver ejecutando el comando ls -la la opción -a
es de all.

ls -la

Ábrelo utilizando el comando code .bashrc, si tienes instalado VS Code
esto te mostrará el documento en el editor. Si estás en WSL y no te
funciona, ve a la cmd, ejecuta el comando wsl y vuélvelo a intentar
desde ahí.

Cuando lo abras ten cuidado con lo que tocas, podrías dañar la shell,
pero desde ahí puedes crear una variable de entorno, por ejemplo, como
yo estoy usando WSL, voy a crear una variable de entorno que me de la
ruta de mi carpeta en Windows sin que tenga que escribir toda la ruta.

alias l=‘ls -lh’

PLATZI_MESSAGE=“hola aigos”

PATH=$PATH:/home/nonbre/bin

image9.png

Link simbólicos:

  • Son acceso directo desde la terminal

  • Para usarlo escribimos: Ln -s dirección (nombre del atajo)

  • Se crea un documento especial (se puede observar con ls -l)

  • Ejemplo: ln -s Documents/Dev Desarrollo (para crear)

Definición de variable de entorno:

  • Las variables de entorno nos sirve para acceder a las

    configuraciones de tu terminal y del sistema.

  • Las variables de entorno hacen referencia a archivos, directorios y

    funciones comunes del sistema cuya ruta concreta puede variar,
    pero que otros programas necesitan poder conocer.

  • Se pueden configurar, manipular y crear.

Comando printenv

  • Lista todas las variables de entorno

Comando echo {contenido}

  • Imprime la información en contenido

  • En caso de variable de entorno: echo $variable

variable de entorno $HOME

  • Guarda la ruta del usuario

  • -echo $HOME // imprimir la ruta

  • -cd $HOME // ir a la ruta

variable de entorno $PATH

  • Guarda todas las direcciones de los binarios que ejecuta nuestro

    sistema.

  • Cuando ejecutamos node, usa esta variable para buscar el binario.

  • Esta variable es importante al instalar paquetes desde un gesto

    (como npm) pues muchas veces nos pedirá el paquete agregar la ruta
    del binario del paquete a la variable $PATH

.bashrc

  • Es el archivo donde se encuentra la configuración de nuestro bash.

  • Se puede modificar para modificar las variables de entorno.

  • De no existir debes crear lo junto al archivo .bash_profile

  • Para crear comandos tipo alias alias l=‘ls -lh’

  • Para crear variables de entorno MAXI_MESSAGE=“HOLA MUNDA”

  • Para añadir nuevas rutas a la variable de entorno $PATH debemos

    concatenar la informacion previamente guardada con la nueva que
    queremos agregar: PATH=$PATH:/home/user/bin

▶Los alias escritos directamente en la terminal solo funcionaran durante
esa sesión, si reinicias, cierras o recargas la terminal estos alias
desaparecerán.

▶Los alias asignados en el archivo .bashrc o .zshrc (ubicado y oculto en
$home) no se borran al cerrar o reiniciar la terminal.

▶$PATH es la ruta donde se buscan binarios/archivos ejecutables para
otros programas, todos los comandos que hemos ejecutado hasta ahora se
encuentran en alguna carpeta de $PATH

¿Para qué nos sirven las variables de entorno?

  • Para hacer que alguna información prevalezca para que podamos

    trabajar más rápido y no tener que recordarla en todo momento.

  • Hacer configuraciones globales.

¿Qué podemos entender como un link simbólico?

  • Como un acceso directo a algún directorio desde la terminal.

¿Cómo podemos crear un link simbólico?

  • Con el comando: ln -s ruta nombre-link

¿Un link simbólico da todos los permisos a los diferentes roles que
podemos tener en Linux?

  • Aunque veamos que todos los permisos estén dados, esto no significa

    que de verdad todos los roles tengan todos los permisos para el
    link simbólico. Esto es porque los permisos que vemos no tienen
    ningún valor.

¿Para qué nos sirve el comando printenv?

  • Para imprimir en la pantalla todas las variables de entorno de

    nuestros sistema operativo Linux.

¿Cómo podemos imprimir el contenido de una variable de entorno desde la
terminal?

  • Escribiendo: echo $NOMBRE-VARIABLE

¿Los nombres de las variables de entorno están en mayúscula?

  • Sí.

¿Qué variables de entorno importantes deberíamos de conocer?

  • HOME

  • PATH

  • BASH_VERSION

  • SHELL

¿Para qué nos sirve la variable de entorno HOME?

  • Para saber la dirección de nuestro home.

¿Para qué nos sirve la variable de entorno PATH?

  • Para saber las direcciones de nuestros binarios que usa el sistema.

¿Por qué la variable de entorno PATH es importante?

  • Porque es muy posible que necesitemos las rutas de dichos binarios

    para trabajar con manejadores de paquetes y algunos lenguajes de
    programación.

¿Para qué nos sirve la variable de entorno BASH_VERSION?

  • Para saber la versión del bash que estamo usando.

¿Para qué nos sirve la variable de entorno SHELL?

  • Para saber la dirección de la Shell que se esté usando.

¿En dónde podemos configurar nuestras variables de entorno?

  • Esto depende del sistema operativo Linux: en el archivo .bashrc Mac:

    en el archivo .zshrc

¿Cómo podemos abrir los archivos bashrc o zshrc con Visual Studio Code?

  • Escribiendo: code .bashrc code . zsgrc

¿Qué cosas podemos hacer dentro el archivo bashrc o zshrc a parte de
configurar nuestras variables de entorno?

  • Crear alias que permanezcan para siempre en nuestro sistema

    operativo.

¿Cómo sería la sintaxis para crear una variable de entorno desde los
archivos bashrc o zshrc?

NOMBRE-VARIABLE=“valor”

¿Qué debemos hacer cuando editamos los archivos bashrc o zshrc?

  • Cargar la bash.

¿Cómo cargamos la bash?

  • Con el comando bash.

¿Cómo podemos agregar contenido a la variable de entorno PATH?

  • Escribiendo: PATH=$PATH: ‘nuevo-contenido’

¿Deberíamos crear alias de comandos que ya existen?

  • No.

[]{#tdeizngtvnfr .anchor}
Comandos de búsqueda

Por ejemplo, algunos programas que funcionan desde la consola, como npm,
guardan sus errores en archivos de extensión “.log” y si no estás
pendiente de eliminarlos se van acumulando en tu disco duro.

¿Cuáles son los comandos de búsqueda en la terminal?

Para encontrar archivos de forma efectiva, usa el comando find, el cual
buscará en la ruta que le indiques el tipo de archivos que necesitas. Su
sintaxis es:

find [rutaDesdeDondeEmpezarBuscar] [opciones]

Segmentar por el nombre (-name)

Veamos un ejemplo, voy a buscar en mi carpeta home todos los archivos
que tenga una extensión “.png”.

find ./ -name *.png

El punto indica que debe empezar desde la carpeta en la que está y la
opción -name es para especificar el nombre que debe buscar.

Segmentar por el tipo (-type)

También puedes segmentar por el tipo, si es un archivo o si es un
directorio utilizando la opción -type, el cual acepta f para archivos, d
para directorios y l para enlaces simbólicos.

Si quieres usar más de una opción lo separas por comas.

find ./ -type f -name “f*”

Esto me muestra todos los archivos que comiencen con la letra “f”.

Veamos un ejemplo buscando archivos y directorios.

find ./ -type f,d -name “D*”

Segmentar por tamaño (-size)

Con la opción -size podemos segmentar por tamaño ingresando el peso que
queremos buscar. Esta opción tiene un uso un tanto especial. Primero que
todo hay que colocar la unidad de peso c para byte, k para Kilobyte, M
para Megabyte y G para Gygabyte.

Entonces, si escribes en la terminal: find ./ -size 4k

Buscará los archivos que pesen exactamente 4kb. Pero claro, atinar el
peso exacto de un archivo no es para nada sencillo, así que podemos
especificar que sea ese peso en adelante con el símbolo + o de ese peso
para abajo con el símbolo -.

find ./ -size +4k

Busca los archivos que pesen 4kb o más.

find ./ -size -4k Busca los archivos que pesen 4kb o menos.

Buscar vacíos (-empty)

Para buscar los archivos vacíos usamos la opción empty que es fácil de
usar, no tienes que especificarle nada, solo escribirla.

Por ejemplo, si quisiera buscar todas las carpetas vacías, habría que
escribir:

find ./ -type d -empty

Limitar la búsqueda (-maxdepth -mindepth)

Puede que no queramos buscar en absolutamente todas las carpetas del
sistema, sino que queremos únicamente un pedacito. Para eso limitamos la
profundidad de carpetas a la que el comando debe buscar, esto se hace
con la opción -maxdepth seguido de la profundidad.

find ./ -type d -maxdepth 2

Continuando, a veces ya conocemos más o menos la estructura de nuestras
carpetas, así que nos queremos saltar niveles, por lo que le asignamos
una profundidad mínima al comando.

find ./ -type d -mindepth 2

Una última cosa, es recomendable pasar el output al comando less, así:

find ./ | less

De esta forma podrás usar esa interfaz de less para buscar tus archivos.

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

RETO:

>> find ./ -name ‘*.txt’ > texDocs.txt && echo "archivos
gaurdados "archivos gaurdados

./.local/lib/python3.8/site-packages/pyserial-3.5.dist-info/entry_points.txt

./.local/lib/python3.8/site-packages/pyserial-3.5.dist-info/top_level.txt

./Android/Sdk/build-tools/31.0.0/NOTICE.txt

./Android/Sdk/build-tools/31.0.0/renderscript/clang-include/CMakeLists.txt

./Android/Sdk/platforms/android-31/templates/NOTICE.txt

./Android/Sdk/platforms/android-31/skins/NOTICE.txt

./Android/Sdk/platforms/android-31/data/features.txt

./Android/Sdk/platforms/android-31/data/activity_actions.txt

./Android/Sdk/platforms/android-31/data/broadcast_actions.txt

./Android/Sdk/platforms/android-31/data/categories.txt

./Android/Sdk/platforms/android-31/data/service_actions.txt

[]{#djblnuze8fun .anchor}
Usando el comando grep

¿Qué significa grep?

“Grep” significa Global Regular Expression Print.

El comando grep utiliza regex (Regular Expression) para realizar su
búsqueda, si no sabes como armar un regex aquí tienes el [Curso de
Expresiones
Regulares]{.underline}

La sintaxis es sencilla: comando, lo que quieres buscar, archivo:

grep [ExpresiónRegular] [archivoDondeBuscar]

En los recursos tienes un archivo llamado “movies.csv”; vamos a buscar
palabras dentro de ese archivo:

grep the movies.csv

Cómo usar el comando grep

Ignorar case sensitive (-i)

Puede que queramos buscar la palabra “Action” pero eso dará
exclusivamente las coincidencias con la “A” mayúscula. Esto lo podemos
ignorar con la opción -i, que buscará independientemente de si la letra
"A" es mayúscula o minúscula.

grep -i Action movies.csv

Contar ocurrencias (-c)

Si quieres saber cuántas veces se repite una palabra, usa la opción -c
seguida de la palabra que quieres buscar.

grep -c Drama movies.csv

Excluir una expresión (-v)

Para saber cuáles son los resultados que NO coinciden con tu expresión
regular, usas la opción -v.

Por ejemplo, si queremos contar todas las películas que no son de drama,
escribimos:

grep -cv Drama movies.csv

Limitar la búsqueda (-m)

Para no buscar en todo el archivo, sino las primeras ocurrencias,
podemos limitar la búsqueda en líneas con la opción -m seguida del
número de líneas que queremos encontrar.

Por ejemplo, si queremos buscar las primeras 10 líneas que concuerden
con la palabra “Fan” escribimos:

grep -m 10 Fan movies.csv

Tabla de funciones de grep

OpciónFunción
-mLimita las líneas de la búsqueda
-cCuenta las ocurrencias
-vExcluye las ocurrencias
-iIgnora él case sensitive

Aca subo los apuntes hechos en formato pregunta respuesta para que sea
mas sencillo el repaso, si usan anki es bastante mas util

  • que hace grep

    • nos permite encontrar encontrar coincidencias en un archivo
  • que hace el parámetro -i en grep

    • ignorá si es mayúscula o minúscula
  • que hace el parámetro -v

    • me trae las coincidencias que no tengan el parámetro dado
  • que hace wc

    • es el comando que nos permite contar la cantidad de palabras,

      lineas y bits

  • como son los parámetros de wc

    • -l : el numero de líneas

    • -w el numero de palabras

    • -c el numero de bits

Veamos los comandos de clase, recordar que grep usa expresiones
regulares (regex):

  1. grep -i the movies.csv : Lo que busca este comando es cualquier

    línea que contenga la palabra “the”, asi sea mayúscula o
    minúscula.

  2. grep -ci the movies.csv : Lo que hace este comando es encontrar el

    numero de veces que aparece la palabra “the” dentro del archivo,
    así sea mayúscula o minúscula.

  3. grep -vi towers movies.csv > sintowers.txt : Lo que hace este

    comando es buscar todas las lineas que no tienen la palabra
    towers, y el output ponerlo en un archivo de texto llamado
    "sintowers".

  4. wc: Cuenta la cantidad de palabras de un archivo.

  5. wc -l: Cuenta la cantidad de lineas de un archivo.

“Parametros” de **grep:

  • i : no diferenciará entre mayúsculas y minúsculas.

  • w : fuerza que sólo encuentre palabras concretas.

  • v : selecciona las líneas que no coinciden.

  • n : muestra el número de la línea con las palabras de solicitadas.

  • h : elimina el prefijo del nombre del archivo Unix en la salida.

  • r : busca directorios recursivamente.

  • R : como -r pero sigue todos los enlaces simbólicos.

  • l : muestra sólo nombres de archivos con las líneas seleccionadas.

  • c: muestra sólo una cuenta por archivo de las líneas seleccionadas.

  • color: muestra los patrones coincidentes en colores.


Comando Funcion

grep Buscar coincidencias de búsqueda -c contar -i ignorar
sensibilidad de texto -v no coincidan

wc contar cuantas palabras hay -l contar lineas -w contar palabras
-c numero de bits


[]{#item3 .anchor}
Utilidades de red

Configuración de tus dispositivos (ifconfig)

Ve a tu consola, escribe el comando ifconfig y miremos el resultado.

Cuando ingresamos el comando podemos ver el nombre del dispositivo de
red, en este caso es “eth0”, y su configuración, tenemos su dirección
IPv4 e IPv6 y su máscara de red.

También tienes la opción del comando netstat solo que te lo mostrará de
forma más amigable usando una tabla.

Enviar solicitudes a una página (ping)

A veces queremos saber si una página está disponible desde nuestra
dirección IP. Para esto escribimos el comando seguido de la URL a la que
queremos acceder.

El comando ping envía paquetes a esa página y evalúa el tiempo de
respuesta.

Por defecto, el comando se ejecutará indefinidamente, así que tienes que
detenerlo con ctrl + c.

ping www.google.com

De esta salida obtuvimos la dirección IP de esa URL, también cuanto
tiempo tardó en responder la página medida en milisegundos y en la parte
de abajo tenemos el total de paquetes que se enviaron, los paquetes que
se recibieron, el porcentaje de paquetes perdidos y el tiempo de
respuesta promedio de las consultas.

Vamos a ver unas pocas opciones más de este comando.

Limitar los paquetes enviados (-c)

Para limitar la cantidad de paquetes que enviamos, usamos la opción -c
seguida del número de paquetes por enviar.

ping -c 4 www.google.com

Especificar el tamaño de los paquetes (-s)

Para probar la conectividad con paquetes de diferentes tamaños se
utiliza la opción -s seguido del tamaño del paquete que desees usar. El
tamaño debe ser en bytes.

Para hacer pruebas con paquetes de 20 bytes escribimos:

ping -s 20 www.google.com

Obtener el archivo de una página (curl | wget)

Podemos obtener archivos que nos proporcione un sitio web o dirección IP
con el comando curl. Este te mostrará la información que haya encontrado
en la consola.

curl www.google.com

Al ejecutar este comando te dará el documento “.html” de Google, el
cual lo verás como un montón de letras locas si estás empezando.

El comando wget hace algo similar, solo que en vez de mostrar lo que h
obtenido por consola lo guarda en el archivo que le especifiques.

wget www.google.com

La última línea de la salida del comando wget dice que la información
fue guardada en el archivo “index.html”, el cual podemos ver al listar
los archivos.

También podemos específicar varias direcciones para descargar varias
páginas al mismo tiempo.

wget www.google.comwww.platzi.com

  • $ ifconfig // sirve para ver la mascara de red, puerto de

    transmisión, tarjeta de red, etc

  • $ ping // nos muestra si una ip o pagina, esta activa, si salen

    paquetes es porque hay conexión.

  • $ curl pagina_web// podemos traer el html de una pagina, podríamos

    guardarlo con el estándar output.

  • $ wget pagina_web // nos descarga el archivo html, pero con

    formato.

  • $ traceroute pagina_web // nos sirve para ver por cuales

    computadoras tenemos que ir pasando para llegar por ejemplo a una
    pagina web. Ejemplo, nos saldrán las ip que tenemos que pasar para
    llegar a la pagina que queremos.

  • $ netstat --i // nos muestra los dispositivos de

    red.

[]{#c7oaohcnrhcg .anchor}
Comprimiendo archivos tar y zip

Comprimiendo archivos con formato .tar

El formato .tar es un tipo de compresión bastante usado en UNIX.
Originalmente era utilizado para almacenar información en cintas
magnéticas, así que está hecho especialmente para comprimir los archivos
de forma lineal.

Para comprimir con este formato en la terminal usamos el comando tar que
tiene ciertas opciones para aprender.

Sintaxis:

tar [opciones] [nombreDelArchivoComprimido] [archivoAComprimir]

Comprimir (-c)

Para comprimir un archivo utilizamos la opción -c. En todos los casos
hay que usar la opción -f para indicar que estamos comprimiendo o
descomprimiendo archivos.

tar -cf compressed.tar Documents/toCompress/

Ver lo que está haciendo el comando (-v)

Si queremos ver lo que el comando está comprimiendo a medida que se va
ejecutando, usamos la opción -v. Por cierto la opción -v es de
"Verbose" y muchos comandos la usan, también te la puedes encontrar
como --verbose.

tar -cvf compressed.tar Documents/toCompress/

Comprimir con formato “.tar.gz” (-z)

El formato “.tar.gz” o también “.tgz” es una versión extendida del
formato tradicional de compresión “.zip” que puede manejar y comprimir
archivos más grandes.

Para manejar la compresión de archivos “.tar.gz” o “.tgz” se usa la
opción -z además de tener que especificar en el nombre de archivo la
extensión que quieres usar.

tar -czvf compressed.tar.gz Documents/toCompress/

Descomprimir (-x)

Para descomprimir es mucho más sencillo, solo hay que especificar la
opción -x y el archivo comprimido que se quiere descomprimir.

Si se quiere descomprimir un archivo de extensión “.tar.gz” o ".tgz"
hay que especificar la opción -z también.

tar -xzvf compressed.tar.gz

Comprimiendo archivos .zip

Para comprimir usamos el comando zip con el nombre que quieres que tenga
y lo que quieres comprimir.

Si quieres comprimir una carpeta con archivos dentro, tienes que
especificar la opción -r de “recursive”.

zip -r copressed.zip Documents/toCompress/

Y para descomprimir es incluso más fácil, solo escribe el comando unzip
seguido de lo que quieres descomprimir.

unzip compressed.zip

Comprimiendo archivos:

Veamos los comandos de la clase:

  1. tar -cvf toCompress.tar toCompress: Con este comando lo que hacemos

    es comprimir un archivo, primero debemos decir el nombre del
    archivo final y luego la carpeta u archivo que deseamos comprimir.

  2. tar -cvzf toCompress.tar.gz toCompress: Comprime de la misma manera,

    pero el output va a ser un archivo con extesion gz.

  3. tar -xzvf toCompress.tar.gz: Con este comando descomprimimos un

    archivo comprimido en gzip.

  4. zip -r toCompressInZip.zip toCompress: Con este comando lo que

    hacemos es comprimir un archivo en zip.

  5. unzip toCompressInZip.zip: Esto es para descomprimir un zip en la

    terminal.

tar

Se usa mucho en repositorios.

Comprimir

c: Es el modificador para comprimir un archivo.

v: Muestra lo que va a estar haciendo el comando en la termianal, es de
verbose o que nos muestre el output en la terminal.

f: Le decimos que va a comprimir un archivo o file.

z: Le decimos a la terminal que vamos a usar el formato .gzip, es mejor
que solamente .tar.

x: Es para descomprimir.

+Comprimiendo archivos++

  • Se hace con el comando tar o zip

  • c: de comprimir

  • v: de verbose, que muestre el proceso

  • z: que sea gzip el algoritmo (tar)

  • x: descomprimir

  • f: que es un archivo

TAR Comprimir con tar

tar -zcvf nombre-archivo-resultante.tar.gz nombre-directorio-o-archivo

Explicación del comando:

  • -z : Comprimir un archivo usando el gzip

  • -c: Crear un nuevo archivo

  • -v: Mostrar el proceso de compresión

  • -f: Nombre del archivo

Descomprimir con tar

tar -xvzf archivo-comprimido.tar.gz

Explicación del comando:

  • -x: Extrae el contenido del archivo comprimido

  • -v: Mostrar el proceso de descompresión

  • -f: Nombre del archivo

GZIP Comprimir con gzip

gzip -9 nombre-archivo-no-directorio

Explicación del comando:

  • -9: Es el nivel de compresión se puede usar desde -1 hasta -9. Donde

    -9 es compresión óptima y es más lento.

Descomprimir con gzip

gzip -d nombre-archivo-comprimido.gz

Explicación del comando:

  • -d: Descomprimir

BZ2 Comprimir con bz2

bzip archivo-no-directorio

Descomprimir con bz2

bzip2 -d archivo.bz2

ZIP Comprimir con zip

zip archivo.zip archivo-comprimir

Descomprimir con unzip

unzip archivo.zip

**RAR Comprimir con rar **

rar -a nombre-archivo-resultante.rar archivo-o-carpeta

Explicación del comando:

  • -a: Comprimir un archivo

Descomprimir con rar

rar -x archivo.rar

¿Qué formatos podemos usar para comprimir archivos?

  • .tar

  • .tar.gz

  • .zip

  • .rar

[]{#lv1zc9bv0ilj .anchor}
Manejo de procesos

El comando ps muestra los procesos que están activos en una tabla muy
sencilla de entender, donde el la primera columna tenemos el process ID
y en la última el nombre.

Ver procesos más detallados (top)

Si quieres ver una lista más detallada de los procesos con su consumo en
CPU y en RAM, además del usuario que lo activó, usamos el comando top.

Aquí podemos filtrar por user.

  • Si presionas la tecla “u” podrás escribir el nombre de usuario por

    el cual quieres buscar

  • presionas la tecla “h” te mostrará un cuadro de ayuda para más

    opciones.

  • Para salir presiona “q”.

Matar un proceso (kill)

Para matar un proceso usamos el comando kill seguido del PID del proceso
que queremos matar.

Si estás usando Windows y tienes varias aplicaciones abiertas podrás
usar la terminal para cerrarlas, pero para los que estamos usando WSL
solo podemos acceder a los procesos que se ejecuten en la terminal.

Pero la teoría es la misma, buscamos el PID del proceso que queremos
matar y lo matamos.

En este caso si ejecuto el comando kill 595 voy a cerrar la terminal.

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

  • ps ax, para ver los procesos del sistema.

  • top muestra los proceso en tiempo real

  • kill -9 pid, para terminar el proceso inmediatamente.

  • killall -9 proceso, para terminar el proceso.

Procesos en foreground y background

Como viste en la clase de procesos podemos correr de manera asíncrona
comandos, y si estos no se completan quedarán activos dentro de los
procesos de la terminal.

Cuando un proceso está en ejecución sin que sea mostrado en la terminal
se dice que se está ejecutando en el background. Si se muestra la
ejecución del comando dentro de la terminal se dice que está en el
foreground. En esta clase aprenderás a cómo mover los procesos del
background al foreground a tu voluntad, incluso a cómo suspenderlos.

¿Te acuerdas del truco que aprendimos para tener un editor de texto
supersencillo en la terminal? Lo usaremos en esta ocasión. Imagina que
queremos una nota desde la terminal y para eso usamos:

cat > mi_nota.txt

Nuestra terminal se verá de la siguiente manera, con el prompt esperando
a que ingresemos texto.\

image10.png

Podemos escribir algo y después terminar el input del texto con CTRL+D,
pero en esta ocasión no haremos eso. Lo que queremos hacer será
suspender el proceso, esto lo podemos hacer con CTRL+Z. El resultado que
nos mostrará la terminal deberá ser uno donde nos indique la suspensión
del comando cat.\

image11.png

Ahora hemos movido nuestro comando exitosamente al background de la
terminal. Para consultar todos los procesos que tenemos en background
podemos hacerlo con el comando jobs.\

image12.png

A la izquierda aparece el número del trabajo ( ⚠ ️ cuidado que no es lo
mismo que el process ID). Si queremos traer la ejecución de nuevo a la
terminal, es decir, al foreground; debemos usar el comando fg y
especificar qué número de trabajo queremos continuar. Para nuestro caso
será el 1.

fg 1

En caso de que estés usando ZSH como shell el formato para llamar el
trabajo sería con un porcentaje. ZSH tiende a interpretar algunas cosas
incluyendo las wildcards de manera diferente.

fg %1

Una vez enviado al foreground veremos como se activa la ejecución del
comando en la terminal y podremos seguir escribiendo nuestra nota.
Recuerda que una vez terminemos de escribir presionamos CTRL+D para
terminar el input y guardar.\

image13.png

Cuando se guarda nuestra nota nos daremos cuenta de que el proceso por
fin termina y si usamos jobs no nos mostrará ningún trabajo en
background.

Otras formas de enviar al background

Existen otras formas de enviar comandos al background. La primera es
usando el operador de control & al final de un comando. Este operador
nos permite enviar de manera directa un proceso al background una vez
ejecutado. Por ejemplo:

cat > mi_nota.txt &

image14.png

La segunda forma es con el comando bg. Este sirve de manera similar que
fg solo que en vez de traerlo al foreground este lleva un trabajo al
background. Por ejemplo:

bg 1

Bien, la pregunta ahora es ¿Cómo usamos bg? Imagina que abrimos algún
programa de interfaz gráfica desde la terminal. En mi caso abriré el
navegador Google Chrome. Para hacerlo desde la terminal solo ejecuta:

google-chrome-stable

Y verás como se ejecuta pero no nos deja hacer ninguna otra tarea ya que
la ventana del navegador está abierta:

image15.png

Para suspender el proceso como ya sabes lo hacemos con CTRL+Z y si
revisamos con jobs veremos como el proceso se encuentra en pausa. En
este caso la ventana del navegador que se abrió no nos dejará
interactuar ni escribir en ella.

image16.png

Como se ve en la imagen el navegador tiene el número de trabajo 1. Para
dejar nuestro navegador corriendo y al mismo tiempo seguir trabajando en
la terminal tenemos que reactivar este proceso y a la vez mandarlo al
background. Para ello ejecutamos:

bg 1

Con esto podremos ver como nuestro proceso de Google Chrome sigue
corriendo en el background dejando la terminal disponible para nosotros.

image17.png

[]{#g9anw0pdo2a2 .anchor}
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 Veamos con más detalle el uso de
Vim.

Cómo usar Vim en la terminal

Para abrir o crear un archivo utilizando Vim escribe el comando

vim [nombre del archivo]

En mi caso voy a abrir uno que ya está creado.

image18.png

Por defecto no podrás escribir hasta que actives el modo de inserción.
Para hacerlo usa la tecla i.

image19.png

Para salir del modo de inserción presiona la tecla escape. En el modo
normal (en el que no puedes escribir) si escribes el slash / activarás
un buscador similar al del comando less.

image20.png

Para borrar una línea, estando el modo normal, tienes que ubicarte sobre
ella y presionar dd.

Para guardar y salir presiona estando en el modo normal, activa los
comandos usando : y escribe “wq”. La letra “w” es para guardar y la
letra “q” es para salir, también los puedes usar por separado.

image21.png

Tabla de comandos para uso de Vim

ComandoFunción
vimAbre el archivo especificado. Si no existe lo crea
:qCierra el editor
:wGuarda los cambios
/[busqueda]Busca dentro del texto
ddEn el modo normal, selecciona una línea y la borra

Ejercicio de práctica

Si ya sabes un poco de programación, entonces para que practiques usando
Vim te dejo este ejercicio.

  1. Crea una calculadora en tu lenguaje de programación de preferencia.

Quizás ya sabes la lógica de cómo funciona una calculadora, esto es sólo
para que te acostumbres a usar Vim.

Empezar a escribir en un archivo
i

Eliminar la linea actual
dd

Salir del archivo sin guardar
:q!

Salir del archivo guardando cambios
:wq

Buscar en una archivo

:/texto_a_buscar

[]{#mvbig94x37bh .anchor}
Personalizar la terminal de comandos

Podemos personalizar la terminal para que quedé bonita, profesional y
sea muy cómoda.

Cómo personalizar la terminal de comandos

Para esto, podemos usar un emulador llamado
[Tilix]{.underline}. En Tilix
podemos tener varias terminales activas.

1. Instala Tilix

Tilix es un emulador de terminal. Para instalarlo:

[https://gnunn1.github.io/tilix-web/#features]{.underline}

$ sudo apt install tilix

2. Instala ZSH

[https://www.edevars.com/blog/personalizar-terminal]{.underline}

Vamos a usar la Shell ZSH. Para cambiarla:

$ sudo apt install zsh

$ zsh --version responde la version

Comando para dejar por DEFECTO la shell de bash o zsh:

buscar la ruta donde esta instalado bash o zsh:

$ chsh -s $(which bash)

$ chsh -s $(which zsh)

salimos de la terminal de tilix y volvemos abrir

(después de cambiar a zsh apretar la opción 0, para crear un archivo
.zshrc en blanco)

Para cambiar entre bash y zsh en el momento:

This is the Z Shell configuration function for new users,

zsh-newuser-install.

You are seeing this message because you have no zsh startup files

(the files .zshenv, .zprofile, .zshrc, .zlogin in the directory

~). This function can help you with a few settings that should

make your use of the shell easier.

You can:

(q) Quit and do nothing. The function will be run again next time.

(0) Exit, creating the file ~/.zshrc containing just a comment.

That will prevent this function being run again.

(1) Continue to the main menu.

(2) Populate your ~/.zshrc with the configuration recommended

by the system administrator and exit (you will need to edit

the file by hand, if so desired).

— Type one of the keys in parentheses — 0

3. Personaliza funcionalidades y colores

[https://ohmyz.sh/]{.underline}

Ahora, puedes ponerle funcionalidades y colores con OH-MY-ZSH

$ sh -c “$(wget
https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh
-O -)”

4. Usa Power Level

[https://github.com/romkatv/powerlevel10k]{.underline}

en la seccion Oh My Zsh

Vamos a instalarle un tema (powerLevel10K):

> git clone --depth=1 https://github.com/romkatv/powerlevel10k.git
${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

después vamos a entrar al archivo .zshrc:

$ vim ~/.zshrc

buscamos y cambiamos la parte que dice ZSH_THEME por esto:

$ ZSH_THEME=“powerlevel10k/powerlevel10k”

Guardamos y salimos.

Después instalamos estas 4 fuentes de texto

  • MesloLGS NF Regular.ttf

  • MesloLGS NF Bold.ttf

  • MesloLGS NF Italic.ttf

  • MesloLGS NF Bold Italic.ttf

después de instalar las fuentes en tiles vamos a

profile>edit profile seleccionamos defaul y seleccionamos la fuente
instalada

recargamos nuestra shell

$ zsh

image22.png
Escribe tu comentario
+ 2