[]{#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:
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
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.
No siempre contaremos con una interfaz gráfica o puede llegar a
fallar.
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.
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
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.
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
Etc.
Dev.
Home.
Usr.
Var.
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
. nos ubica en el directiorio actual
… 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
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
whatis - What is this command
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
[]{#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.
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:
Un programa ejecutable
Un comando de utilidad de la shell. Esto es un programa en sí mismo,
que puede tener funciones. Ejemplo cd
Una función de shell. Son funciones de shell externas al comando de
utilidad. Ejemplo mkdir
Un alias. Un ejemplo es ls
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:
[]{#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
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*
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
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.
Wildcard | Función |
---|---|
* | Busca todo |
? | Busca por cantidad de caracteres |
[] | Busca por caracteres específicos |
[: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 * .
% - 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
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.
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:
El 2 es Standard Error.
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
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.
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.
Operador | Funció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>&1 | Redirecciona 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
<h1>Redirecciones: pipe operator</h1>[]{#v8y83tjba1mg .anchor}
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?
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
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”.
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.
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:
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?
¿Cuál es la sintaxis que necesitamos emplear para usar el operador de
control síncrono?
¿Para qué nos sirve el comando cal?
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?
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?
si el comando anterior se ejecuta correctamente.
¿Cuál es la sintaxis que necesitamos emplear para usar el operador de
control condicional?
¿Cuál es el símbolo del operador de control condicional or?
¿Para qué nos sirve el operador de control condicional or?
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?
Si usas constantemente la tecla enter para ejecutar varios comandos,
puedes evitarlo si usas el operador ; que separa los comandos que
estamos ejecutando.
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
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.
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.
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.
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.
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:
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.
De un enlace simbólico el dueño tiene todos los permisos, el grupo y
world sólo de lectura.
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?
¿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?
¿Cómo sería la sintaxis para cambiar los permisos sobre un archivo o
directorio usando el comando chmod de manera simbolica?
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?
¿Qué significan el operador - en la asignación de permisos de manera
simbólica?
¿Qué significan el operador = en la asignación de permisos de manera
simbólica?
¿Cómo podemos manipular los permisos del usuario, el grupo y el mundo al
mismo tiempo con el comando chmod?
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?
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.
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.
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
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
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?
¿Cómo podemos crear un link simbólico?
¿Un link simbólico da todos los permisos a los diferentes roles que
podemos tener en Linux?
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?
nuestros sistema operativo Linux.
¿Cómo podemos imprimir el contenido de una variable de entorno desde la
terminal?
¿Los nombres de las variables de entorno están en mayúscula?
¿Qué variables de entorno importantes deberíamos de conocer?
HOME
PATH
BASH_VERSION
SHELL
¿Para qué nos sirve la variable de entorno HOME?
¿Para qué nos sirve la variable de entorno PATH?
¿Por qué la variable de entorno PATH es importante?
para trabajar con manejadores de paquetes y algunos lenguajes de
programación.
¿Para qué nos sirve la variable de entorno BASH_VERSION?
¿Para qué nos sirve la variable de entorno SHELL?
¿En dónde podemos configurar nuestras variables de entorno?
en el archivo .zshrc
¿Cómo podemos abrir los archivos bashrc o zshrc con Visual Studio Code?
¿Qué cosas podemos hacer dentro el archivo bashrc o zshrc a parte de
configurar nuestras variables de entorno?
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?
¿Cómo cargamos la bash?
¿Cómo podemos agregar contenido a la variable de entorno PATH?
¿Deberíamos crear alias de comandos que ya existen?
[]{#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.
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]
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.
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*”
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.
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
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
“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
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
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
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
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
Opción | Función |
---|---|
-m | Limita las líneas de la búsqueda |
-c | Cuenta las ocurrencias |
-v | Excluye las ocurrencias |
-i | Ignora é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
que hace el parámetro -i en grep
que hace el parámetro -v
que hace wc
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):
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.
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.
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".
wc: Cuenta la cantidad de palabras de un archivo.
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
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.
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.
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
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
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
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]
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/
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/
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/
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
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
Veamos los comandos de la clase:
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.
tar -cvzf toCompress.tar.gz toCompress: Comprime de la misma manera,
pero el output va a ser un archivo con extesion gz.
tar -xzvf toCompress.tar.gz: Con este comando descomprimimos un
archivo comprimido en gzip.
zip -r toCompressInZip.zip toCompress: Con este comando lo que
hacemos es comprimir un archivo en zip.
unzip toCompressInZip.zip: Esto es para descomprimir un zip en la
terminal.
Se usa mucho en repositorios.
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 compresión óptima y es más lento.
Descomprimir con gzip
gzip -d nombre-archivo-comprimido.gz
Explicación del comando:
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:
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.
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”.
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.\
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.\
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.\
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.\
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.
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 &
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:
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.
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.
[]{#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.
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.
Por defecto no podrás escribir hasta que actives el modo de inserción.
Para hacerlo usa la tecla i.
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.
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.
Comando | Función |
---|---|
vim | Abre el archivo especificado. Si no existe lo crea |
:q | Cierra el editor |
:w | Guarda los cambios |
/[busqueda] | Busca dentro del texto |
dd | En el modo normal, selecciona una línea y la borra |
Si ya sabes un poco de programación, entonces para que practiques usando
Vim te dejo este ejercicio.
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.
Para esto, podemos usar un emulador llamado
[Tilix]{.underline}. En Tilix
podemos tener varias terminales activas.
Tilix es un emulador de terminal. Para instalarlo:
[https://gnunn1.github.io/tilix-web/#features]{.underline}
$ sudo apt install tilix
[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
[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 -)”
[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