Aprendiendo Linux

Aprendiendo Linux Primera Parte

Aquí vengo con otra entrega de las traducciones de TryHackMe. En este caso, se trata de la sala Learn Linux (Aprendiendo Linux Primera Parte) y la he dividido en varias partes, ya que es una sala con muchas tareas y secciones, por lo que en esta primera parte solo pondré la introducción, la metodología, y la sección 1.

Índice

APRENDIENDO LINUX PRIMERA PARTE.-

Tarea 1: Introducción

Esta sala está diseñada para enseñarte acerca de varios conceptos y herramientas internas de Linux.

No es necesario ningún conocimiento previo. Lo único que se espera es afán de aprender, y disponer de Google por si te atascas.

El contenido a aprender fluye de manera natural; de todos modos, si tienes experiencia en Linux, y solo quieres refrescar un poco algún tema concreto, puedes saltarte lo que consideres necesario.

Tarea 2: Metodología

Después de considerarlo cuidadosamente, he pensado que la mejor forma de seguir adelante es introducir varios conceptos en secciones, con cada sección un poco más complicada que la anterior, y siendo necesario el conocimiento de las secciones anteriores. Para una mejor transición entre secciones, he dividido cada sección en diferentes usuarios en la Máquina Virtual (VM); cuando acabes una sección, necesitarás completar un desafío y entonces podrás continuar a la sección siguiente.

Tarea 3: [Sección 1: SSH] – Introducción

SSH es el acto de acceder de forma remota a una máquina. SSH te permite ejecutar comandos de forma interactiva en la máquina remota. Esto se debe al uso de un programa en la máquina objetivo, el cual permite al cliente SSH interactuar con el huésped objetivo.

Mientras el uso común de un sistema operativo tradicional es su interfaz gráfica (permitiendo ver imágenes, navegadores web, gestores de archivos, etc) SSH trabaja mediante la línea de comandos, lo que significa que cualquier cosa que hagas en la máquina objetivo, se llevará a cabo a través de una terminal similar a esta:

Root Parabox

Puede parecer intimidante al principio, pero pronto verás que puedes hacer muchas cosas con la misma funcionalidad que si estuvieras usando una interfaz gráfica.

Es una herramienta de valor incalculable, y el modo en que accederás a esta máquina para aprender y realizar los desafíos. Dependiendo del sistema operativo hay distintas formas de hacerle SSH a una máquina. Esta sección se enfocará puramente en el método en Windows (PuTTY), y después de que aprendamos más acerca de los comandos de Linux, y de cómo trabajan, volveremos a esta sección y aprenderemos el método de hacerlo en Linux.

Tarea 4: [Sección 1: SSH] – Putty y SSH

Aviso: No uses putty si ya estás en Linux. Sigue las instrucciones para el ssh binario más abajo.

La descarga de putty se puede realizar desde aquí, una vez descargado lo instalaremos. Cuando ya esté instalado, ábrelo y verás una pantalla como esta:

Putty sin hostname

El campo que más nos interesa es el de “Host Name (or IP Address)”. Aquí es donde pondremos la IP de la máquina remota. Esto es porque el formato de las conexiones SSH es <usuario>@<host>, y en este caso host es igual a la IP de la máquina. El usuario para esta prueba será shiba1, por lo que el “Host Name” completado sería algo como:

Putty con Hostname

(Nota: la IP 10.10.10.10 es solo un ejemplo, deberás sustituirla por la IP de la máquina remota)

Desde aquí pulsa Open y te aparecerá esta pantalla:

Abriendo Putty

Haz clic en Yes (esta ventana solo tiene propósito de verificar los datos) y entonces te será requerida la contraseña o password:

Usando Username

Escribe “shiba1” y pulsa Enter, y estarás dentro.

Bienvenido a Ubuntu

Nota: A veces putty no funciona del todo bien, en ese caso sigue las instrucciones del binario más abajo.

Como alternativa a putty, debes tener un ssh binario en tu ordenador. Para acceder a ese binario, has de abrir tu terminal (cmd/terminal de MacOS), y escribir ssh.

SSH

La sintaxis para usar este comando es ssh <usuario>@<host>. Así que para entrar en la máquina que nos ocupa, necesitarás escribir lo siguiente: ssh shiba1@IP_DE_LA_MÁQUINA. En ese momento se te pedirá la contraseña, que en este caso también es shiba1.

SSH con Username

Y de esta forma puedes correr comandos de forma interactiva.

Tarea 5: [Sección 2: Corriendo Comandos] – Ejecución Básica de Comandos

Ahora que estás dentro del servidor, llevarás a cabo algunas tareas, y todo lo que se puede hacer sobre SSH se hace ejecutando comandos. Para empezar, echaremos un vistazo a algunos de los comandos básicos, y el primer comando será echo. Escribe echo hello y pulsa Enter y verás como la terminal te devuelve el eco.

Aprendiendo Linux Segunda Parte

Al igual que la palabra que lleva su nombre, echo devuelve cualquier cosa que le escribas. Felicidades, acabas de ejecutar tu primer comando en Linux.

Tarea 6: [Sección 2: Corriendo Comandos] – Páginas del Manual y Banderas

La mayoría de los comandos que aprenderás tienen un montón de opciones que no conocerás a primera vista, estas opciones son conocidas como banderas, y tienen el formato <comando> <bandera> <entrada>. Estas banderas se pueden aprender usando el comando man. Este comando tiene el formato man <comando>. Por ejemplo, para aprender las banderas del comando echo, escribiríamos man echo. Escribiendo eso, tendríamos una salida formateada como la siguiente:

Comando man

Así recibimos mucha información, pero las banderas que nos interesan están en la sección de Descripción. Por ejemplo, la bandera para eliminar una nueva línea es -n. De ese modo, para mostrar la salida “Shiba” sin la nueva línea, deberíamos escribir echo -n Shiba.

Nota: Algunos comandos soportan la bandera -h, lo cual significa que escribiendo <comando> -h conseguiremos una lista de banderas y otra información útil sin tener que usar man.

Tarea 7: [Sección 3: Operaciones Básicas con Archivos] – ls

ls es un comando que lista la información acerca de cada archivo/directorio en el directorio actual. Solo con ejecutar el comando lsnos muestra el nombre de todos los archivos en el directorio.

Comando ls

Como con otros comandos, lstiene algunas banderas que pueden manipular la salida. Por ejemplo, ls -a muestra todos los archivos/directorios, incluido los que empiezan con . .

Comando ls -a

Tarea 8: [Sección 3: Operaciones Básicas con Archivos] – cat

cat es una abreviatura de concatenar, y eso es exactamente lo que hace, nos muestra por consola el contenido de los archivos. Por ejemplo, si tenemos un archivo llamado a.txt que contiene la palabra “hello”, cat a.txt nos mostraría hello por la salida.

Comando cat

Nota: cat soporta la bandera –help, la cual nos sirve para ver sus banderas sin necesidad de acudir a la página del manual.

Cat Help

Tarea 9: [Sección 3: Operaciones Básicas con Archivos] – touch

touch es un comando muy simple, crea archivos. Dado el comando touch b.txt, se crearía el archivo b.txt.

Comando touch

Tarea 10: [Sección 3: Operaciones Básicas con Archivos] – Corriendo un binario

Ocasionalmente habrá veces que querrás correr programas descargados o creados por un usuario. Esto se hace proveyendo de la ruta completa del binario. Por ejemplo, digamos que descargas un binario que saca hello por consola, pues poniendo la ruta completa del binario se ejecutará.

Ejecutando bin

Nota: Un binario solo es código ejecutable, como los exe de Windows.

Este parece un buen momento para mencionar el tema de las rutas relativas. Cada vez que intentes ejecutar un binario, no necesitarás poner la ruta completa, puedes usar rutas relativas.

Rutas Relativas:

La tabla inferior asume que la ruta actual es /tmp/aa:

Ruta RelativaSignificadoRuta AbsolutaRuta RelativaCorriendo un binario con ruta relativaCorriendo un binario con ruta absoluta
.Directorio actual/tmp/aa../hello/tmp/aa/hello
..Directorio padre del actual/tmp..../hello/tmp/hello
~Directorio raíz del usuario/home/<usuario actual>~~/hello/home/<usuario>/hello

Estos atajos son increíblemente eficaces y nos ahorran tiempo. Funcionan para todos los comandos, por lo que si ejecutas ls . será lo mismo que ejecutar ls <directorio actual>

Ls tmp

Tarea 11: [Sección 4: Operadores de Linux] – Introducción

Esta sección cubrirá los operadores más comunes usados para interactuar con los programas. Los operadores que cubriremos en esta sección son “>, >>, &, && y $”. Durante las próximas tareas aprenderéis lo que hace cada uno de ellos.

Tarea 12: [Sección 4: Operadores de Linux] – “>”

“>” es el operador para redirigir la salida. Esto significa que puedes redirigir la salida de un comando a un archivo. Por ejemplo, si corremos echo hello > file, en lugar de mostrarnos el mensaje “hello” por consola, nos lo guardaría en un archivo llamado file.

Comando echo hello Aprendiendo Linux Tercera Parte

Es importante señalar que si utilizas este operador sobre un archivo existente, éste borrará completamente el contenido del archivo y lo reemplazará por la salida del comando.

cat file echo

Tarea 13: [Sección 4: Operadores de Linux] – “>>”

“>>” hace principalmente lo mismo que el operador “>”, con tan solo una diferencia. “>>” añade al final del archivo la salida del comando, en lugar de eliminar el contenido.

echo hello file

Tarea 14: [Sección 4: Operadores de Linux] – “&&”

“&&” significa que esperamos el resultado de una operación “and”. “&&” te permite ejecutar un segundo comando después de que el primero haya sido ejecutado de forma exitosa. Por ejemplo, ls && echo hello se ejecutaría de forma correcta, pero dsfdfssdffds && echo hello fallaría.

ls echo hello

Nota: Debido a que el segundo comando solo se ejecuta si el primero ha sido exitoso, puedes utilizar lo creado con el primer comando en el segundo comando.

echo file cat

Tarea 15: [Sección 4: Operadores de Linux] – “&”

En este caso, “&” no tiene nada que ver en absoluto con “&&”. “&” es un operador de fondo, lo que quiere decir que si corres un comando que tarda 10 segundos en ejecutarse, normalmente no podrías ejecutar otro comando hasta que no pasase ese tiempo. Con “&” el comando se ejecutará y podrás seguir ejecutando otros comandos.

sleep

Nota: No puedo mostraros por pantalla la duración en una imagen, pero creedme, realmente habría que esperar esos 5 segundos.

Tarea 16: [Sección 4: Operadores de Linux] – “$”

El operador “$” es un operador especial, que se usa para denotar variables de entorno. Estas variables son puestas por el sistema operativo (puedes añadir las tuyas propias, pero eso ya lo veremos más adelante) y se usan para afectar a diferentes procesos y su funcionamiento. Esto significa que si editas estas variables, puedes cambiar la forma en que los procesos trabajan en tu ordenador. Por ejemplo, tu usuario actual está siempre almacenado en una variable de entorno llamada $USER. Puedes ver estas variables con el comando echo.

echo USER

Naturalmente, esto significa que estas variables pueden usarse como entrada para otros comandos. Por ejemplo, si quieres crear un archivo cuyo nombre sea el nombre del usuario actual, lo puedes hacer con el comando touch $USER.

touch USER

Recuerda que el operador “>>” añade la salida a un archivo.

Las variables de entorno pueden configurarse de forma sencilla, solo has de ejecutar el comando export <nombrevariable>=<valor> y se configurará la variable de entorno correspondiente.

export

Tarea 17: [Sección 4: Operadores de Linux] – “|”

Continuando con esta retahíla de operadores, tenemos la tubería “|”. Éste es único porque, mientras que operadores como “>>” permiten almacenar la salida de un comando, el operador “|” permite tomar la salida de un comando y usarla como entrada para un segundo comando.

Por ejemplo, si usamos catpara obtener la salida de un archivo, podemos usar la tubería para pasar esa salida por el comando grep para buscar una cadena en concreto (Nota: Aprenderemos más sobre grep más adelante, por ahora basta saber que es un comando que se usa para encontrar cadenas específicas en una salida).

cat test

No todos los comandos soportan el operador “|”, y algunos que lo soportan requerirán el uso de “-“ en lugar de la entrada, por ejemplo cat –. Así que asegúrate siempre de comprobar que el comando lo soporta.

Tarea 18: [Sección 4: Operadores de Linux] – “;”

El operador “;” funciona de forma muy similar a “&&”, de todos modos, en este caso no es necesario que la ejecución del primer comando sea exitosa. Esto significa que podemos ejecutar dsfdfssdffds; ls e igualmente recibiremos la salida de ls.

ls file

Tarea 19: [Sección 5: Operaciones avanzadas con archivos] – Intro

Al igual que en Windows, los archivos son bastante complejos. Existen múltiples parámetros distintos que deben ser modificados para permitir que ciertos usuarios puedan leer, escribir o ejecutar ciertos archivos. Esta sección cubrirá la modificación de estos parámetros.

Tarea 20: [Sección 5: Operaciones avanzadas con archivos] – Un poco de trasfondo

Recuerda que ls tiene diferentes banderas que permiten ver la información acerca de distintos tipos de archivos.

Aprendiendo Linux Cuarta Parte ls -al

Esta imagen tiene todos los atributos que cubriremos en esta sección. Nos interesan, principalmente, los tres marcados aquí:

Comando ls -al con marca azul

Estos atributos son (en orden) los permisos de archivo, el propietario del archivo y el grupo en el que está el archivo en cuestión.

Las próximas tareas irán en la línea de cómo modificar estos atributos.

Tarea 21: [Sección 5: Operaciones avanzadas con archivos] – chmod

chmod permite configurar los distintos permisos de un archivo, y controlar quién puede leerlo. La sintaxis de este comando normalmente es chmod <permisos> <archivo>.

Lo interesante es cómo se configuran estos permisos. Se hace usando un número de tres dígitos, donde cada dígito controla un permiso específico. Es decir, el primer dígito controla los permisos para el usuario propietario, el segundo dígito controla los permisos para el grupo, y el tercer dígito controla los permisos para aquellos usuarios que no son el propietario del archivo ni forman parte del grupo.

Aquí os muestro los valores de los dígitos para poder leer, escribir o ejecutar un archivo, o hacer las tres cosas, y de forma matemática podréis calcular el resto de permisos.

DígitoSignificado
1El archivo puede ser ejecutado
2El archivo puede ser escrito
3El archivo puede ser ejecutado y escrito
4El archivo se puede leer
5El archivo se puede leer y ejecutar
6El archivo puede leerse y ejecutarse
7El arhcivo puede leerse, escribirse y ejecutarse

La forma de calcular estos valores es la siguiente. El dígito 1 significa que el archivo puede ser ejecutado, el 2 significa que puede ser escrito y el 4 que puede ser leído. Se consiguen el resto de permisos sumando estos dígitos entre sí. Por ejemplo, 1+2 es 3, lo que significa que el archivo puede ser ejecutado y escrito. Veamos cómo trabaja esto en perspectiva:

Comando:Significado:
chmod 341 archivoEl archivo puede ejecutarse y escribirse por el usuario propietario El archivo puede leerse por los usuarios del grupo al que pertenece El archivo puede ser ejecutado por cualquier otro usuario
chmod 777 archivoEl archivo puede ser leído, escrito y ejecutado por el propietario El archivo puede ser leído, escrito y ejecutado por el grupo El archivo puede ser leído, escrito y ejecutado por cualquier otro usuario
chmod 455 archivoEl archivo puede ser leído por el propietario El archivo puede ser leído y ejecutado por el grupo El archivo puede ser leído y ejecutado por cualquier otro usuario

ls nos provee de una forma para comprobar los permisos de los archivos en el directorio actual.

Comando ls -al

Recuerda que los permisos se dividen en tres secciones, usuario, grupo y cualquier otro usuario. Aquí ocurre lo mismo: empezando por el segundo carácter (el primero tiene otro significado), podemos ver que, en orden secuencial, la primera terna de caracteres controlan los permisos para el propietario, la segunda terna controla los permisos para el grupo y la tercera terna controla los permisos para los demás usuarios.

Comando ls -al con permisos

rw significa que puedes “leer y escribir”, lo que quiere decir que el propietario tiene permisos de lectura y escritura. Siguiendo esta lógica, podemos comprobar que los miembros del grupo y el resto de usuarios tienen solo permiso de lectura. Para convertir esto a números, los permisos de este archivo serían 644. Podemos comprobarlo cambiando los permisos.

Comando chmod 544

Cuando intentamos cambiar los permisos a 644 no ocurre nada, porque los permisos ya son 644. Lo interesante viene cuando podemos escribir datos en .profile con echo mientras los permisos son 644, pero no podemos si los permisos son 544, porque hemos quitado los permisos de escritura. Siguiendo esta lógica, significa que podemos incluso bloquear nuestros propios permisos para escribir un archivo del que ya somos propietarios.

Nota: Es posible no darle permisos a alguien para un archivo, solo hemos de usar el dígito 0. 770 significa que todo aquél que no sea parte del grupo o no sea el propietario, no tiene permisos de ningún tipo.

Tarea 22: [Sección 5: Operaciones avanzadas con archivos] – chown

Recuerda que ls nos muestra nuestro nombre dos veces:

Comando ls -al shiba amarillo

Estos atributos son el usuario y el grupo, respectivamente. Recuerda también que podemos editar los permisos para estos atributos, aunque también podemos cambiar los atributos en sí. Esto se hace usando el comando chown, el cual nos permite cambiar el propietario y el grupo a cualquier archivo. La sintaxis para este comando es chown usuario:grupo archivo. Por ejemplo, si queremos cambiar el propietario del archivo a shiba2 y el nombre del grupo también a shiba2, utilizamos chown shiba2:shiba2 archivo.

Nota: Solo puedes usar el comando chown si tú eres ese otro usuario, lo cual significa que la mejor manera de hacerlo es con el usuario root (administrador).

Comando chown

También puedes usarlo sin especificar el grupo. Esto es útil si lo único que quieres cambiar es el usuario, pero dejar el grupo igual.

Comando chown shiba1 file

Tarea 23: [Sección 5: Operaciones avanzadas con archivos] – rm

Tomémonos un descanso con el tema de los permisos y las matemáticas, y vamos a echar un vistazo a algo que podría destruir tu sistema Linux entero si se usa sin cuidado. rm, como ya debes haber supuesto, significa eliminar (remove), y eso es exactamente lo que hace.

Comando rm

Como puedes imaginar, es algo increíblemente peligroso, ya que puedes borrar algunos archivos importantes, y dejar tu sistema completamente inservible. Es importante señalar que necesitas tener permisos de escritura para el archivo para poder borrarlo, por lo que no podrás hacerlo si eres un usuario regular.

Comando rm /etc/shadow

Tarea 24: [Sección 5: Operaciones avanzadas con archivos] – mv

mv te permite mover archivos de un sitio a otro. La sintaxis para este comando es mv <archivo> <destino>. Si queremos mover un archivo a nuestro directorio de usuario, habremos de escribir mv archivo ~.

Comando mv

Nota: También podemos usar mv para cambiar el nombre de un archivo, mv archivo ~/ghfds renombrará el archivo a ghfds.

Comando mv 2

Tarea 25: [Sección 5: Operaciones avanzadas con archivos] – cp

cp hace básicamente lo mismo que mv, con la salvedad de que crea un duplicado del archivo (lo copia). La sintaxis es la misma que en mv, cambiando el mv por cpcp <archivo> <destino>.

Comando cp

Tarea 26: [Sección 5: Operaciones avanzadas con archivos] – cd && mkdir

En Windows existen las carpetas. Éstas te permiten almacenar múltiples archivos en un solo grupo, lo que hace más sencilla la organización y el acceso a los mismos. Linux tiene exactamente lo mismo, excepto que en este caso se llaman directorios.

Linux permite cambiar la dirección del directorio actual mediante el uso del comando cd. La sintaxis de este comando es cd <directorio>.

Comando cd

Se permite tanto el uso de rutas relativas como de rutas absolutas. En la línea de comandos hay una parte que nos muestra exactamente el directorio en el que estamos, así no nos perderemos nunca.

Esto nos lleva a mkdir. Ocasionalmente querrás crear un nuevo directorio para almacenar archivos dentro, y eso se hace usando mkdir. La sintaxis es mkdir <nombre del directorio>.

Comando mkdir

Nota: Como has podido comprobar, ls también nos muestra los directorios.

Tarea 27: [Sección 5: Operaciones avanzadas con archivos] – ln

ln es algo más complicado, porque tiene dos formas distintas de uso. Una de ellas es lo que llamamos “hard linking”, lo que duplica completamente un archivo, y enlaza el duplicado a la copia original. Esto quiere decir que todo lo que se haga en el enlazado, se lleva a cabo también en el original. La sintaxis es ln original destino.

Comando ln

Es importante tener mucho cuidado con este tipo de enlaces, ya que dependiendo de lo que estés haciendo, fácilmente puedes borrar datos de un archivo.

La otra forma de enlazar es con enlaces simbólicos (symlink). Mientras que con el hard link el archivo contenía los datos del original, en un enlace simbólico creamos tan solo una referencia. Es decir, el enlace simbólico actual no tiene ningún dato en él, es solo una referencia a otro archivo.

La sintaxis para un enlace simbólico es exactamente la misma, pero usaremos la bandera -s para crear el enlace simbólico, por lo que quedaría ln -s <archivo> <destino>.

Comando ln 2

ls incluso nos muestra que es un enlace simbólico, señalando con la flecha el archivo al que hace referencia. Es importante ver los permisos del enlace simbólico. Tiene permisos completos 777, lo cual significa que puedes ejecutar el enlace, pero como es tan solo una referencia, realmente tiene los mismos permisos que el archivo original.

Comando ln 3

Tarea 28: [Sección 5: Operaciones avanzadas con archivos] – find

find es un potente comando, aunque increíblemente simple. Permite hacer precisamente lo que dice, encontrar archivos. Esto se hace listando todos los archivos en el directorio actual, por lo que si ejecutamos find /tmp listará todos los archivos en /tmp.

Comando find

Es importante darse cuenta de que find es recursivo, por lo que busca en todos los directorios que haya en el directorio indicado. Esto significa que, si ejecutamos el comando find /, se listarían todos los archivos en el sistema operativo. Otra cosa importante es que solo listará los archivos de los directorios sobre los que tienes permiso de acceso, lo que quiere decir que no puedes listar todos los archivos siendo cualquier usuario.

El verdadero poder de este comando viene de los parámetros que se le pueden pasar. Puedes usar find directorio -user usuario para listar todos los archivos propiedad de usuario; puedes usar find directorio -group grupo para listar todos los archivos propiedad de un grupo. La posibilidad de personalización del comando es su característica más poderosa.

Comando find 2

Este es un comando del cual recomiendo leer bien la página de manual para aprender todas sus opciones. Es de un valor incalculable cuando trabajamos con archivos.

Tarea 29: [Sección 5: Operaciones avanzadas con archivos] – grep

Puedo decir sin reservas que grep es uno de los comandos más útiles a aprender. Nos permite encontrar datos dentro de datos. Cuando trabajamos con archivos largos, o con una salida larga, es sin duda la mejor manera de acotar la salida para encontrar de una forma más sencilla lo que andamos buscando. La sintaxis del comando es grep <cadena> <archivo>, aunque el archivo es opcional si estás usando tuberías.

Nota: Puedes realizar la búsqueda en varios archivos a la vez, lo cual quiere decir que puedes, teóricamente, hacer grep <cadena> <archivo1> <archivo2>.

Por ejemplo, digamos que sabes el nombre de un archivo llamado test1234, pero no sabes dónde está guardado en tu sistema. find se puede utilizar para listar todos los archivos del sistema operativo, y grep se utiliza para encontrar el archivo buscado.

Comando grep

¿Qué ocurre si tienes un montón de datos en un archivo, y quieres buscar la cadena hello en él, y la línea en la que se encuentra?

Comando grep 2

Estoy seguro de que puedes ver la utilidad de este comando. Cuando buscamos en logs un mensaje de error, cuando buscamos en archivos con gran cantidad de datos, cuando buscamos cada archivo dentro de un directorio buscando esa línea que necesitamos cambiar. Otra cosa importante a destacar es que grep soporta expresiones regulares, por lo que la sintaxis se puede convertir en grep <expresión regular> <archivo>. Desafortunadamente, las expresiones regulares quedan fuera del temario de esta sala, pero te recomiendo encarecidamente que leas al respecto de ellas, ya que incrementarán el poder de tu uso de grep.

Tarea 30: [Sección 6: Miscelánea] – Introducción

Aunque hemos repasado cómo funciona el sistema operativo Linux y algunas de sus funciones y comandos más útiles, hay algunos comandos y conceptos que no se han cubierto en las secciones anteriores. Por eso, esta sección está dedicada a todos esos comandos y conceptos que es útil conocer.

Tarea 31: [Sección 6: Miscelánea] – sudo

A lo largo de esta sala hemos visto en varias ocasiones mencionar al usuario root. Este usuario es el equivalente al usuario administrador en Windows, y como en Windows, algunos comandos y ciertas cosas que descargues de Internet requerirán permisos de administrador.

Ahí es donde llega sudo. sudo es la forma de ejecutar como administrador que existe en Linux, y la sintaxis es sudo <comando>.

Aprendiendo Linux Quinta Parte Comando sudo

Nota: whoami es solo un comando que muestra tu usuario actual.

Como puedes ver, cuando usas sudo el comando se ejecuta como root. Es importante darse cuenta de que necesitas tener la contraseña de tu usuario para usarlo. De nuevo como en Windows, no todos los usuarios tienen permiso para usar sudo, pero la mayoría de sistemas operativos Linux configuran un usuario con esos permisos cuando los instalas.

Asumiendo que creas un nuevo usuario al que también le quieres dar permisos para acceder a sudo, la página de man de sudo tiene una sección acerca de cómo agregar permisos a un usuario. También es importante ver que puedes configurar sudo para ejecutar comandos como otros usuarios, de nuevo la página de man de sudo tiene una sección sobre ello (sudo tiene una página de man la mar de bonita).

Tarea 32: [Sección 6: Miscelánea] – Añadiendo usuarios y grupos

Ya sabes cómo modificar los permisos para usuarios y grupos, así que te será de mucha ayuda conocer cómo crearlos. Por suerte, Linux nos provee de una forma muy intuitiva de hacerlo, con los comandos adduser addgroup. La sintaxis para ambos comandos es adduser nombre_de_usuario addgroup nombre_de_grupo.

Comando adduser
Comando addgroup

Algo importante a tener en cuenta es que solo el usuario root tiene permisos para agregar usuarios y grupos, como podemos ver en el error de la imagen cuando hemos intentado usar estos comandos sin sudo. Debes estar preguntándote cómo agregar un usuario a un grupo. Pues bien, eso se hace con el comando usermod, con la siguiente sintaxis: usermod -a -G <grupos separados por comas> <usuario>. Lo cual quiere decir que si quisiera agregar el usuario noot a b, ejecutaría el comando usermod -a -G b noot.

Comando usermod

Nota: id es un comando que te permite ver información básica acerca de un usuario.

Tarea 33: [Sección 6: Miscelánea] – nano

Hasta aquí has podido ver que he usado >> para agregar contenido a un archivo. Por suerte, no es la única forma de hacerlo, también tenemos a nano que es un editor de texto basado en la terminal. La sintaxis para nano es nano <archivo en el que quieres escribir>. Por ejemplo, escribiendo nano test, nos mostraría esta pantalla:

Comando nano

A partir de aquí puedes escribir lo que te venga en gana.

Comando nano 2

nano tiene un montón de comandos internos al editor, y el editor de texto probablemente necesitaría toda una sala para él solo, pero en el 99.9% de los casos vas a querer utilizar ctrl+x.

Nota: ^X significa ctrl+x, la mayoría de veces que veas ^<tecla>, el ^ significa control.

Una vez que presiones ctrl+x, te aparecerá una pantalla como esta:

Comando nano 3

Aquí pulsa Y, y a continuación el programa te preguntará qué nombre quieres ponerle al archivo.

Comando nano 4

Escribe lo que quieras como nombre del archivo, pulsa Enter y te llevará a la pantalla del terminal. Podrás comprobar que tu archivo está ahí y que todo lo que has escrito en él también.

Comando nano 5

Ahora ya puedes editar archivos de texto.

Tarea 34: [Sección 6: Miscelánea] – Shell scripting básico

Linux tiene una forma de ejecutar comandos uno tras otro sin necesidad de utilizar operadores especiales. Esto es posible almacenando los comandos que quieres ejecutar en un archivo con extensión .sh.

Script básico

Si guardamos y ejecutamos bash s.sh se ejecutan esos comandos en orden.

Script básico 2

Se han mostrado por pantalla hello, después whoami, y después se ha ejecutado whoami exactamente como se pedía en el archivo. Felicidades, acabas de crear tu primer script de bash.

Es importante destacar que la extensión sh no es totalmente necesaria, técnicamente hablando, si incluyes un “shebang” (#!), seguido de la ruta al shell que queremos usar para ejecutar nuestros comandos.

Script básico 3

A partir de aquí, puedes eliminar la extensión sh, y hacer ejecutable el archivo.

Script básico 4

Nota: El shebang DEBE estar al principio del archivo.

Tarea 35: [Sección 6: Miscelánea] – Archivos y directorios importantes

A lo largo de esta sala has visto un montón de archivos y directorios, por lo que utilizaré esta tarea para definir los más importantes a tener en cuenta.

Antes de nada, date cuenta de cómo trabaja exactamente el sistema de archivos de Linux. Todo lo que hay en el sistema de archivos de Linux cuelga de “/”. /es el equivalente a C: en Windows. Esto significa que, por ejemplo, si borrases “/”, borrarías todos los archivos de tu sistema.

/etc/passwd – Almacena la información acerca de los usuarios – A menudo se usa para ver todos los usuarios en un sistema.

Archivos varios

/etc/shadow – Contiene todas las contraseñas para estos usuarios.

No se muestra por razones obvias.

/tmp – Todos los archivos que hay dentro se borran al apagar – se usa para archivos temporales.

Archivos varios 2

/etc/sudoers – Se usa para controlar los permisos de sudo de cada usuario en el sistema.

Demasiado largo para mostrarlo.

/home – El directorio donde están todas tus descargas, documentos, etc. – El equivalente en Windows es C:Users<usuario>.

Archivos varios 3

/root – El directorio principal del usuario root – El equivalente en Windows es C:UsersAdministrador

No se muestra por posible spoiler de los retos.

/usr – Donde se instala todo tu software.

Archivos varios 4

/bin y /sbin – Se usan para los archivos críticos del sistema – NO BORRAR.

Demasiado largo para mostrar, pero contienen todos los programas básicos necesarios para que Linux funcione.

/var – El directorio misceláneo de Linux, muchos procesos guardan sus datos en /var.

Archivos varios 5

$PATH – Almacena los binarios que puedes ejecutar – lo mismo que $PATH en Windows.

$PATH es una variable de entorno que contiene todos los binarios que puedes ejecutar.

Archivos varios 6

Cabe destacar que las rutas en $PATH están separadas por dos puntos (:). Puedes ejecutar todos los archivos ejecutables en cada una de esas rutas con tan solo escribir el nombre del ejecutable, si ser necesaria la ruta completa.

Archivos varios 7

Nota: which es un comando que muestra dónde se encuentra un ejecutable dentro de cualquiera de los directorios de PATH.

Tarea 36: [Sección 6: Miscelánea] – Instalando paquetes (apt)

Esta es una tarea delicada porque, dependiendo del sistema Linux que utilices, la información que en ella encuentras te puede ser útil o no. De todas formas, voy a explicarte cómo instalar paquetes usando el administrador de paquetes más popular, que es apt. Un paquete es, esencialmente, un programa, puedes pensar en él como en los archivos .exe de Windows. Para instalar paquetes necesitas permisos de administrador (root), porque cada paquete modificará algún directorio crítico del sistema, como por ejemplo el directorio /usr. La sintaxis para instalar paquetes es apt install paquete.

Comando apt

Nota: python-dev es el primer paquete aleatorio que me vino a la mente.

apt descarga el paquete de un repositorio (lista de programas). Después lo instala y te devuelve el control de la terminal, al igual que pasa cuando instalas un programa en Windows.

Comando apt 2

apt tiene un montón de sub comandos, y de nuevo haría falta una sala solo para él, pero en la mayoría de ocasiones puedes buscar en Google qué es lo que quieres y encontrarás el nombre del paquete a instalar.

Tarea 37: [Sección 6: Miscelánea] – Procesos

Cada binario que ejecutas en Linux se convierte en un proceso al cargarse. Un proceso es tan solo otro modo de nombrar a un programa que está corriendo. Se puede ver la lista de procesos de un usuario con el comando ps.

Procesos

Mientras que estos son, técnicamente, todos los procesos creados por el usuario, no es la información que buscas si lo que quieres es examinar los procesos. Para ver una lista de todos los procesos del sistema, deberás usar la bandera -ef.

Procesos 2

Cada proceso que está corriendo actualmente en el sistema se encuentra listado, junto a parte de la información básica sobre el proceso. Posiblemente, la parte más interesante de esta lista es la segunda columna, la que tiene números de 3 a 5 dígitos. Éstos se conocen con el nombre de ID de Proceso (PID) y es lo que usarás para interactuar con los procesos. El 90% de las veces querrás parar uno de estos procesos, y para ello usarás el comando kill.

La sintaxis de kill es kill <PID>.

Procesos 3
Procesos 4

Después de correr kill, el proceso ya no se mostrará más. Otra forma útil de interactuar con los PID es a través del comando top. top nos muestra qué procesos están usando más recursos del sistema, lo cual nos permite administrar la localización de recursos del sistema eliminando los procesos innecesarios.

Procesos 5

Nota: La página de man del comando top tiene descripciones de lo que significa cada valor, y de cómo afectan a tu sistema. Te recomiendo encarecidamente que la leas

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Ads Blocker Image Powered by Code Help Pro

¡¡¡Ads Blocker Detectado!!!

Hemos detectado que usas extensiones para bloquear anuncios. Por favor, si te interesa el contenido, no bloquees los anuncios, que son lo que nos ayuda a poder publicar más contenido como este 😊