Skip to content

Curso de linux

Updated: at 10:08

Table of contents

Open Table of contents

Comandos y control de flujo

!$ -> representa el último argumento del comando ejecutado. 
whoami -> quien soy en el sistema.
who -> usuarios que hay actualmente en el sistema. Con el parametro -q nos contará los usuarios que hay.
which -> nos indica donde esta el binario a ejecutar.
printenv -> para listar todas las variables de entorno del sistema.
& -> al final del comando para dejarlo en segundo plano.
disown -> para dejar el proceso en segundo plando sin depender de la terminal que lo haya lanzado y que no genere salida stdout ni stderr. Se pondrá al final del comando a ejecutar.
nohup -> igual que disown pero genera salida en el archivo nohup.out. Se pondrá al inicio del comando a ejecutar.
echo $? -> para ver la salida del estado del último comando ejecutado.
cd -> a secas nos llevará a la home del usuario.
whoami; ls -> podemos ejecutar comandos en una solo línea separando cada uno de ellos por ;
whoami && ls -> solo se ejecuta el segundo si tiene exito el primero.
whoami || ls -> se ejecuta el segundo siempre independiente del primero.
cmd &> /dev/null -> redirecciono tanto stdout como stderr a la nada.
cmd 2>&1 /dev/null -> redirecciono stderr a stdout y este a la nada.
dpkg -i -> instalar archivos binarios como por ejempolo. Si estamos en debian por ejemplo los deb.
echo $HOME
echo $PATH
which python3.9 | xargs ls -ls, con xargs volcaremos la salida del comando which a ls
$(comando) -> nos saldra por la salida estandar el output del sistema.
echo -e -> para interpretar los caracteres especiales.
printf -> para formatear la salida. Serial igual que echo pero con más opciones.
file -> para ver el tipo de archivo.
tee -> para redirigir la salida a un archivo y a la vez a la salida estandar.
export VAR="value" -> para crear una variable de entorno o asignar un nuevo valor a una existente.
tail -f /var/log/syslog -> para ver en tiempo real el log del sistema. (-f de follow).
dmesg -wT -> para ver el registro de dmesg en tiempo real. Si le quitamos el -w se verá el registro de dmesg.
strings -> para ver el contenido de un archivo binario.
xxd -> para ver el contenido de un archivo binario en hexadecimal.
uniq -> para eliminar lineas duplicadas. Interesante para hacer un sort y luego un uniq -c para contar las lineas duplicadas.
pgrep -> para buscar un proceso por nombre.
/etc/passwd -> listado de usuarios.
/etc/group -> listado de grupos.
/etc/group- -> algunos archivos importantes tendran una copia de seguridad por defecto por si las moscas.
/etc/shadow -> listado de pass, obviamente esta encriptadas.
/etc/shells -> listado de las shells disponibles en el sistema.

Para el tema de las redirecciones tenemos que tener claro los flujos estandares del sistema.

STDIN -> es la entrada estandar del sistema (por defecto es el teclado o salida de otro comando) se representa con el número 0.
STDOUT -> es la salida estandar del sistema (por defecto la pantalla o la entrada de otro comando), se representa con el número 1.
STDERR -> es la salida de errores (por defecto también la pantalla), se representa con el número 2.

Chuleta de comandos Linux Comandos básicos de Linux Guía en PDF de comandos básicos de Linux Redirectores en Bash Formato PDF

Permisos

Con respecto a los persmisos de archivos recuerda que el permiso de ejecución en un directorio es para poder acceder a él, que se dividen en 3 pares que son PROPIETARIO, GRUPO Y OTROS, que indicará en la linea quien es el propietario de los permisos y el grupo al que pertenece, por defecto será el mismo que el usuario, ya que todos los usuarios por defecto tiene un grupo que se llama igual que el usuario.

chmod -> cambiar permisos.
chown -> cambiar propietario. con chown pepe:pepe pepe, cambiaremos tanto el propietario como el grupo en este caso a la carpeta pepe.
chgrp -> cambiar grupo.

El resto de los permisos lo de siempre,

chmod u-x+w,g+r,o-x

También tenemos la forma octal, más rápida pero hay que aprenderse un poco los números. El truco puede ser con el patron 421 Esto es, podemos leer los permisos de la siguiente forma:

rwx r-x --x
111 101 001

Con el patron 421 siendo este respectivo a rwx, sustituimos solo donde hay 1 y sumamos de esta forma los permisos en octal serian:

rwx r-x --x
111 101 001
7   5   1

A tener en cuenta con los permisos es que prevalece el permiso que tenga el contenedor del archivo. Asi pues si un arhivo con solo lectura para un usuario podrá eliminarlo si la carpeta contenedora tiene para el grupo de ese usuario el permiso de escritura.

Importante también es la precedencia de los permisos, la mejor forma de entenderlo es la siguiente:

Leyendo los permisos del archivo de izquierda a derecha, nos vamos preguntando lo siguiente:

  1. Soy el propietario del archivo ¿?. Si lo soy se me aplican los permisos del propietario. Si no:
  2. Soy miembro del grupo de archivo¿?. Si lo soy se me aplican los permisos del grupo. Si no:
  3. Los permisos de otros seran los que se me apliquen.

Permisos y derechos en Linux Permisos básicos en Linux Permisos en Linux | Cómo son y cómo se cambian Cambiar permisos con comandos Asignación de permisos Propietarios y permisos Gestión de usuarios, grupos y permisos en Linux Gestión de usuarios y grupos en Linux Permisos del sistema de archivos GNU/Linux

Permisos especiales – Sticky Bit

El bit sticky se representa mediante una t en la máscara de permisos, apareciendo en la posición del permiso de búsqueda de los otros. Se aplica a directorios de uso público, es decir, aquellos que tienen todos los permisos activados y por tanto, todo el mundo puede crear y borrar ficheros

Para activarlo basta con poner los siguiente:

chmod +t pruebas

¿Qué es el Sticky Bit y cómo configurarlo? El bit Sticky | Tutorial de GNU/Linux

Control de atributos de ficheros en Linux – Chattr y Lsattr.

CHATATTR y LSATTR, nos valdrá para indicar permisos especiales y avanzadas a un archivo. Con lsattr prueba listaremos el archivo prueba y veremos los atributos que tiene. Con chattr podremos cambiar a los atributos. Un atributo intersante para poner seria la i (inmutabilidad) una vez puesto ni el usuario root podria cambiarlo. Eso si, este podria quitrarlo y ya esta.

Para utilizarlo es bastante facil, para listar unicamente tendremos que ejecutar

lsattr -a

Para asignar atributos lo haremos de la siguiente forma, en este caso haremos que el archivo sea inmutable, para que no se pueda borrar.

chattr +i prueba.txt

Control de atributos de ficheros Linux Comandos Chattr y Lsattr en Linux

Permisos especiales – SUID y SGID

Cuando se activa el bit SUID sobre un fichero significa que el que lo ejecute va a tener los mismos permisos que el que creó el archivo. Esto es útil en algunas ocasiones, aunque hay que utilizarlo con cuidado, ya que puede acarrear problemas de seguridad. Con respecto al SGID es lo mismo pero para los grupos

chmod 4775 hello.sh o chmod u+s hello.sh

Para buscar ficheros binarios en el sistema SUID seria

find / -type f -perm -4000 2>/dev/null 

Lo mismo seria para el SGID

chmod 2775 hello.sh o chmod g+s hello.sh

Permisos SGID, SUID y Sticky Bit Permisos especiales en Linux Los bits SUID, SGID y Sticky

Privilegios especiales – Capabilities

Nos permiten gestionar ciertos permisos para un usuario normal que no sea root en ciertos binarios del sistema. Por ejemplo podemos poner al binario de phyton3 una capabiliti para que pueda cambiar el grupo del sistema sin ser root.

En este caso como root puede poner esta capabiliti con el siguiente comando

setcap cap_setuid+ep /usr/bin/python3.9

Para quitar las capabilities

setcap -r /usr/bin/python3.9

Para listar las capabilitis que hay en el sistema:

getcap -r / 2>/dev/null

Que son son las Capabilities en Linux ¿? Recursos con listado de capabilities por binario

Estructura del sistema

Los más importantes que debemos aprender son:

Estructura de directorios en Linux

Uso de bashrc y zshrc

Pues eso ficheros de configuración que se encuntran en la Home del usuario, donde podemos guardar configuraciones, alias, funciones y un sin fin de cosas. A tener en cuenta que cuando se haga algún cambio en ellos tendremos que reinicar la terminal para que los cambios se puedan aplicar.

¿Qué es Bashrc en Linux? ¿Por qué deberías usar ZSH?

Actualización y Upgreado

Uncicamente tener en cuenta que con el sistema parrot, nunca realizar apt upgrade (se nos puede ir todo al carajo), tendremos que actualizarlo con parrot-upgrade. Primero claro tendrimamos que hacer un apt update.

Búsquedas a nivel de sistema

Para buscar archivos en el sistema tenemos el comando find, que nos permitirá buscar archivos por nombre, tamaño, fecha de modificación, etc. Algunos ejemplos de uso serian:

find / -name passwd 2>/dev/null
find / -name passwd 2>/dev/null | xargs ls -la
find / -name passwd -ls 2>/dev/null

Buscar por privilegios SUID

find / -perm -4000 2>/dev/null

Buscar por fichero

find / -type f -name loquesea 2>/dev/null

Buscar por directorio

find / -type d -name loquesea 2>/dev/null

Buscar por usuario propietario root y que tengan capacidad de escritura

find / -user root -perm -u+w 2>/dev/null
find / -user root -writable 2>/dev/null

Buscar por usuario propietario root y que sean ejecutables

find / -user root -perm -u+x 2>/dev/null
find / -user root -executable -type f 2>/dev/null

Buscar por partes del nombre

find / -name \*loquesea\* 2>/dev/null

Buscar todos los archivos .zip y los que encuentre eliminarlos.

find . -iname "*zip" -exec rm {} \;

Comandos Find y Locate en Linux

Creación de scripts con Bash

Bueno un poco de repaso de lo que es un script en bash, que no es más que un fichero de texto plano que contiene una serie de comandos que se ejecutan en secuencia.

Para ejecutarlo tendremos que darle permisos de ejecución con chmod +x script.sh y ejecutarlo con ./script.sh (para ejecutarlo como si de un binario se tratase) o bien sin tener permisos de ejecucion con bash script.sh o con sh script.sh. Estas dos formas valdrían con o sin permisos.

El inicio del fichero tendrá que tener la siguiente cabecera, seguido de los comando que queramos ejecutar, se llama shebang.

#!/bin/bash

Un ejemplo de script sería el siguiente:

#!/bin/bash
echo "[x] La dirección IP privada es --> $(ifconfig | grep broadcast | awk NR==1'{print $2}')"

Otro ejemplo de script con declaracion de variables sería el siguiente:

#!/bin/bash
# Declaración de variables
nombre="Javier"
apellido="García"
edad=41
echo "Hola, mi nombre es $nombre $apellido y tengo $edad años ."

Guía de scripts en bash

Metodo de filtrados de datos

Sobre todo conocer los comandos grep, awk y sed. Como siempre a través de la ayuda de los comandos podemos ver las opciones que tenemos para filtrar los datos.

Grep

Grep es un comando que nos permite buscar texto en un archivo o en la salida de otro comando. Algunos ejemplos de uso serian:

grep root /etc/passwd
grep -i root /etc/passwd
grep -v root /etc/passwd
grep -r root /etc/

Podemos también usar grep con tuberias para filtrar la salida de otros comandos. Por ejemplo:

ls -la /etc/ | grep root

Awk

Awk es un lenguaje de programación que nos permite procesar y filtrar texto. Algunos ejemplos de uso serian:

awk '{print $1}' /etc/passwd
awk -F: '{print $1}' /etc/passwd
awk -F: '{print $1, $3}' /etc/passwd
awk -F: '$3 > 1000 {print $1}' /etc/passwd

Sed

Sed es un editor de texto en línea de comandos. Algunos ejemplos de uso serian:

sed 's/root/pepe/' /etc/passwd
sed 's/root/pepe/g' /etc/passwd
sed 's/root/pepe/g' /etc/passwd > /tmp/passwd
sed -i 's/sivus/calamar/' stop_containers.sh

Sort

Sort es un comando que nos permite ordenar la salida de otro comando. Algunos ejemplos de uso serian:

sort /etc/passwd
sort -r /etc/passwd
sort -k 3 /etc/passwd

Uniq

Uniq es un comando que nos permite eliminar líneas duplicadas. Algunos ejemplos de uso serian:

uniq /etc/passwd
uniq -c /etc/passwd

AWK Cheat Sheet AWK Cheat Sheet 2 Cheat Sheet: Cutting Text with cut Como utilizar el comando sed Tutorial del uso de SORT Tutorial del uso de UNIQ

Uso del editor VIM

Los principales modos de vim son:

Vim Cheat Sheet

Deteción del tipo y formato de archivos

Para detectar el tipo de archivo tenemos el comando file, que nos dirá el tipo de archivo que es. Por ejemplo:

file /etc/passwd

Para ver el contenido de un archivo binario podemos utilizar el comando strings, que nos mostrará el contenido del archivo en texto plano. Por ejemplo:

strings /bin/ls

Para ver el contenido de un archivo binario en hexadecimal podemos utilizar el comando xxd, que nos mostrará el contenido del archivo en hexadecimal. Por ejemplo:

xxd /bin/ls

Muchos formatos de archivo no están pensados para leerse como texto. Si dicho archivo se ve accidentalmente como un archivo de texto, su contenido será ininteligible. Sin embargo, a veces la firma del archivo se puede reconocer cuando se interpreta como texto.

Por aquí te dejo una lista de firmas de archivos. La columna correspondiente a ‘Firma Hexadecimal‘ está directamente relacionada a los primeros bytes que en comparación a los primeros bytes del archivo con el que estamos tratando nos permitirán saber el tipo de formato al que nos estamos enfrentando:

Lista de firmas de archivos