Tema 2 - INSTALACIÓN Y CONFIGURACIÓN DE LINUX
1. Dispositivos
En los sistemas Linux todo se trata como un archivo, hasta los dispositivos. Estos se almacenan en el directorio /dev que significa devices, este contiene unos archivos especiales que representan los dispositivos de hardware conectados al sistema. Hay diferentes tipos de dispositivos:
Dispositivos de caracteres: Manejan los datos como un flujo de caracteres sin buffer, útil para dispositivos que envían datos carácter por carácter como un teclado o una terminal.
Dispositivos de bloques: Transfieren datos en bloques de tamaño fijo, se usan en dispositivos de almacenamiento
Dispositivos de red: No tiene una representación en un archivo, ya que se gestionan a través de una pila de red separada. Su configuración e interfaces se pueden ver con comandos como
ip a

2. Particiones
El particionado es el proceso de dividir un disco duro en secciones lógicas o particiones, cada una de ellas se ve por el sistema operativo como un disco independiente. Existen dos estándares principales para la gestión de particiones:
MBR - Master Boot Record Es el metodo tradicional y mas antiguo. Utiliza una tabla de particiones que se encuentra en el primer sector del disco. Con MBR, solo se pueden crear hasta cuatro particiones primarias. Para superar esta limitación, se introdujeron las particiones extendidas, que actúan como contenedores para otras particiones, llamadas unidades lógicas. Solo puede haber una partición extendida por disco
GPT - GUID Partition Table Es un estándar más moderno y robusto que ha reemplazado a MBR. Ofrece una mayor flexibilidad, permitiendo hasta 128 particiones en la mayoría de los sistemas, y todas ellas son primarias. GPT también mejora la seguridad y la fiabilidad del particionado.
2.1. Nomenclatura de las particiones
Los discos en Linux se representan como un archivo en el directorio /dev, su nomenclatura es crucial para identificar cada dispositivo:
Discos SCSI/SATA/USB: Se identifican con el prefijo
dev/sdseguido de una letra, por ejemplo el primer disco seria/dev/sday luego las particiones del disco como/dev/sda1 , /dev/sda2, etcDiscos IDE: Utilizan el prefijo
/dev/hdDiscos NVME: Utilizan el prefijo
nvmeXn1donde la X es el número de disco, y sus particiones se definen como nvmeXn1pX donde la última X es el número de partición, EJ:nvme0n1su primera partición seríanvme0n1p1

2.2 Herramientas de particionado
Existen varias herramientas para crear particiones en Linux tanto de línea de comandos como gráficas.
fdisk y gdisk Son herramientas de líneas de comandos para gestionar particiones.
gparted Es una herramienta con interfaz gráfica de las más populares.
2.2.1 Uso de fdisk
Abrimos el disco: Esto se hace usando el comando
sudo fdisk /dev/sdb
Crear una particion (n) Dentro de fdisk, el comando n se utiliza para crear una nueva partición. Después de escribir n, la herramienta te hará varias preguntas:
Tipo de partición: Te preguntará si quieres crear una partición primaria (p) o extendida (e). En el caso de GPT, solo verás la opción de partición primaria.
Número de partición: Te pedirá un número para la nueva partición. Por ejemplo, 1, 2, 3, etc.
Primer y último sector: Te preguntará por el sector de inicio y el sector final de la partición. Puedes especificar el tamaño en gigabytes (+10G), megabytes (+512M) o simplemente presionar Enter para usar los valores predeterminados, que suelen ser el primer sector disponible y el último sector del disco.
Borrar una particion (d): Para borrar una particion usamos el comando
d
Escribir los cambios (w): Es el paso más importante, hasta que no escribamos los cambios no se aplicarán los cambios hechos.
3. Sistemas de ficheros
Un sistema de archivos es la forma en la que los datos se organizan dentro de un disco o una partición. Es como el índice de una biblioteca, dice dónde está cada libro (archivo) y cómo está ordenado. Esto incluye elementos como el superbloque, la tabla de nodos (inodes) y los bloques de datos reales.
En Linux se pueden usar varios sistemas de archivos, cada uno con sus ventajas e inconvenientes:
ext2: Fue el sistema de archivos estándar de Linux durante mucho tiempo. Es muy simple, pero carece de una función de seguridad crucial: el journaling.
ext3: Es una evolución de ext2 que agrega journaling. El journaling es una característica que mantiene un registro de los cambios que se van a hacer en el sistema de archivos. Esto protege contra la corrupción de datos en caso de un fallo inesperado del sistema
ext4: Es el sistema de archivos predeterminado en la mayoría de las distribuciones modernas de Linux. Es una mejora de ext3 que ofrece un mejor rendimiento, mayor capacidad de almacenamiento, y características adicionales como el soporte para extents, que ayuda a reducir la fragmentación.
Swap: No es un sistema de archivos tradicional, sino un espacio de intercambio. Se utiliza como memoria virtual para que el sistema operativo pueda mover datos de la memoria RAM al disco duro cuando la RAM se llena, mejorando el rendimiento general.
Btrfs: Un sistema más moderno que ofrece funciones avanzadas como las instantáneas (snapshots), que permiten crear copias de seguridad eficientes, y Copy-on-Write (CoW) para mayor integridad de los datos
3.1. mkfs y mount
El comando mkfs (make file system) se usa para formatear una partición usando el sistema de archivos decidido, su sintaxis es:
sudo mkfs -t [sistema_de_ficheros] [particion]
El comando mount, nos permite montar particiones de manera temporal, en el sistema, el montaje no es permanente
4. Directorios en Linux
/ (Raíz): Es el directorio principal del sistema, es el punto de partida de la estructura de archivos, todos los demás directorios y archivos cuelgan de él.
/boot: Contiene los archivos esenciales para el arranque del sistema como el kernel de Linux y el gestor de arranque
/etc: Almacena los archivos de configuración del sistema y de los programas instalados.
/dev: Contiene archivos que representan los dispositivos
/home: Aquí se almacenan los datos de los usuarios, cada usuario tiene su carpeta propia donde almacenar los documentos, descargas, vídeos, etc.
/usr: Aquí se almacenan la mayoría de aplicaciones y utilidades del sistema a las que pueden acceder los usuarios.
/var: Contiene archivos que son variables y cambian constantemente mientras el sistema está en funcionamiento, aquí también se guardan los archivos de registro logs.
/tmp: Contiene archivos temporales que se borran al reiniciar el sistema
/media: En los sistemas modernos, este directorio es el punto de montaje predeterminado para dispositivos extraíbles como unidades USB
/lost+found: Cada sistema de archivos (partición) tiene su propio directorio lost+found. Es un lugar especial donde el programa de reparación de sistemas de archivos (fsck) coloca los fragmentos de archivos que se han perdido debido a una falla del sistema o un apagado inesperado.

5. Entorno de escritorio
Un entorno de escritorio es un conjunto de programas que permiten interactuar con el sistema operativo de manera visual, ofreciendonos la opcion de gestionar un sistema Linux de una forma mas facil y amigable
Dentro de los entornos de escritorio tenemos diferentes tipos segun su administrador de ventanas, por ejemplo tenemos administradores de ventanas flotantes usados en entornos de escritorio de ahora en adelante DE (para abreviar) como Gnome, KDE, Xfce, etc Y luego tenenmos administradores de ventanas en mosaico (Tilling Window), como pueden ser I3, Sway, Awesome
La primera imagen muestra un Tiling Window y la segunda muestra Gnome.

6. Consolas
Linux dispone de 6 consolas virtuales, que pueden ser usadas para varias tareas desde la resolucion de problemas, la seguridad y la administracion o realizar multitarea sin usar una interfaz grafica
Para acceder a estas terminales, hacemos uso de la combinación de teclas Ctrl + Alt + FX donde la X es el número de la consola que se quiere usar, por ejemplo para acceder a la consola 2 (tty2) usaríamos F2.
Para volver al entorno grafico usamos Alt + F7
7. Shell
Una shell es un intérprete de comandos que permite interactuar con el sistema operativo mediante una interfaz de texto. Cuando se abre una terminal y se escribe un comando, es la shell la que recibe la orden y le dice al sistema operativo qué hacer. Hay diferentes tipos de shell:
Bourne shell (sh): Es de las primeras que se empezo a usar ya no se usa casi aunque se puede encontrar en sistemas embebidos como routers que usan (imagenes de linux para ejecutar sus programas)
Bourne-Again Shell (bash): Es la más usada en la actualidad en sistemas Linux y macOS. Es la evolución de sh pero añadiendo mejoras como autocompletado.
Z shell (zsh): Está basada en bash pero añadiendo muchas mejoras, como soporte para plugins y personalización avanzada.
Friendly interactive shell (fish): Se creó con el objetivo de ser amigable y fácil de usar nada más instalarla, incluye autocompletación, resaltado de sintaxis y sugerencias. La siguiente imagen muestra fish con la personalización que tengo aplicada en mi sistema.

8. Dispositivos especiales
En linux existen una serie de dispositivos que se usan para la comunicacion entre programas estos son los flujos de informacion, y encontramos tres:
Entrada estandar (stdin): Se representa con el numero 0 es el canal por el cual un programa recibe datos. Por lo general la entrada proviene del teclado del usuario pero tambien puede provenir de otro programa
Salida estándar (stdout): Se representa con el número 1 es el canal por el cual un programa envía sus resultados normales. La salida estándar de un comando generalmente se muestra en pantalla.
Error estándar (stderr): Se representa con el número 2 es el canal por el cual un programa envía un mensaje de error o diagnóstico. Por lo general también se muestran por pantalla estos mensajes.
Estos flujos son importantes para el uso de la línea de comandos, sobre todo al trabajar con ShellScript, ya que permiten redirigir la entrada y la salida de los programas.
9. Tuberiasy redirecciones
Permiten anidar comandos o pasar informacion de unos a otros.
La tuberia ( | ): Permite conectar la salida de un comandos a le entrada de otro, creando una cadena sucesiva de comandos, por ejemplos al hacer un cat a un fichero de texto podemos usar una tuberia para pasar la salida a un grep y filtrar
cat mi_archivo.txt | grep manzana
Redirecciones: Permiten controlar la salida de un archivo
>: Redirecciona la salida estandart de un comando a un archivo
>>: Añade la salida a un archivo sin borrar su contenido
<: Redirecciona la entrada de un comando para que la reciba un archivo
2>: Redirecciona un error de un comando a un archivo
2>>: Añade el error a un archivo existente
<&2: Redirecciona la salida estandart para que se mezcle con un error estandart
10. Comodines
Los comodines son caracteres especiales que usa la shell para emparejar patrones en nombres de archivos, también permiten seleccionar varios archivos a la vez.
Asterisco (*): Coincide con cero o mas caracteres. Por ejemplo
rm *.txtborrara todos los archivos que terminen en .txtInterrogacion (?): Coincide con exactamente un solo caracter. Por ejemplos
ls archivo?.loglistara archivos como archivo1.log , archivo2.logCorchetes ([]): Coincide con cualquiera de los caracteres listados dentro de los corchetes. Por ejemplo
mv foto[1-3].jpg fotosmovera los archivos foto1.jpg , foto2.jpg , foto3.jpg a la carpeta fotos
11. Comandos de manejo de ficheros
Estos son los comandos mas comunes en cuanto al manejo de ficheros en Linux
11.2 Creacion y eliminacion:
mkdir: Crea nuevos directorios
touch: Crea un nuevo fichero vacio
rm: Elimina ficheros y directorios
ln: Crea enlaces entre ficheros
11.3 Copia y movimiento:
cp: Copia ficheros y directorios
mv: Mueve ficheros y directorios
11.4 Visualizacion y manipulacion:
cat: Muestra el contenido de un fichero por pantalla
more y less: Muestra el contenido de un fichero por paginas
head: Muestra las primeras lineas de un fichero (10)
tail: Muestra las ultimas lineas de un fichero (10)
11.5 Permisos y propiedad:
Los permisos en Linux se distribuyen en tres grupos U user, G group, O other; Y estos tres bloques pueden tener tres nomenclaturas diferentes que definen los permisos, estos son:
r: Read
w: Write
x: Execute

chmod: Cambia los permisos de un fichero; Se puede hacer uso de la notacion numerica o simbolica.
En notacion simbolica: la sintaxis es la siguiente
chmod [permisos] [fichero]Los permisos se establecen asi: (si quiero dar permisos totales al usuario, quitar todos al grupo y dar solo lectura a otros, se haria asi)
chmod u+rwx, g-rwx, -wx-o+r [fichero]
En notacion numerica o octal
Los permisos se establecen asi: (Necesario saber los permisos ya existentes de un fichero)
chmod 777 [fichero]Con este comando damos todos los permisos a todo

chown: Cambia el propietario de un fichero o directorio
chgrp: Cambia el grupo de un fichero o directorio
11.6 Busqueda de ficheros y texto:
find: Busca ficheros y directorios en una jerarquia de archivos
grep: Busca patrones de texto dentro de ficheros
11.7 Compresion y verificacion:
zip y bzip2: Comprimen y descomprimen ficheros
md5sum: Calcula y verifica la suma de verificacion MD5
11.8 Filtros:
sort: Ordena las linas de un archivo de texto o la salida de otro comando, por defecto por orden alfabetico
cut: Recorta secciones de cada linea de archivos
uniq: Filtra lineas repetidas en un archivo
wc: Cuenta el numero de lineas, palabras y caracteres de un archivo o salida de un comando
tee: Lee la entrada estándar y la escribe tanto en la salida estándar (pantalla) como en uno o más archivos. Es como una «T» en una tubería, dividiendo el flujo
12. Gestión de paquetes
La forma más fácil y común de instalar software en Linux, a diferencia de Windows, es por medio de un gestor de paquetes. Según la familia de la distribución que usemos, encontramos varios gestores de paquetes.
Distribuciones derivadas de debian (.deb): Usan el gestor de paquetes apt (aptitude) y como gestor de bajo nivel se usa dpkg
Distribuciones derivadas de RedHat (.rpm): Usan el gestor de paquetes dnf actualmente en su versión 5 (yum ya está en desuso y usarlo solo lleva a un enlace simbólico a dnf), el gestor de bajo nivel es rpm.
Distribuciones derivadas de ArchLinux (tar.gz): Usan el gestor de paquetes pacman y pacman para el repositorio de la comunidad (AUR), como tal no tiene paquetes si no que coge el código fuente y lo compila en ese momento.
12.1 Gestores de paquetes universales
Los anteriores eran gestores de paquetes especificos de cada distribucion, pero luego encontramos unos gestores de paquetes que funcionan en todas las distribuciones independientemente la familia de la que vengan (normalmente estos paquetes se ejecutan en modo sandbox).
Snap: Desarollado por canonical, permite empaquetar los programas y que sean usados en cualquier distribucion, su uso es
snap install [paquete]Flatpak: Al igual que snap pero mas extendido y con un catalogo de programas mayor, esta financiado por redhat, su uso es
flatpak install [paquete]Appimage: Este mas que un gestor de paquetes es una extension universal que se ejecuta en todas las distribuciones linux, permite crear apps portables
13. WGET
wget es una herramienta que permite descargar archivos de internet por medio de la terminal y en segundo plano, se usa ampliamente para descargar scripts o instaladores, también permite descargas recursivas.
14. Gestión de paquetes
14.1 Instalacion de paquetes:
Instalacion de paquetes:
Familia debian:
sudo apt install [paquete]Familia RHEL:
sudo dnf install [paquete]Familia ArchLinux:
sudo pacman -S [paquete]
Actualizar base de datos de paquetes:
Familia debian:
sudo apt updateFamilia RHEL:
sudo dnf updateFamilia ArchLinux:
sudo pacman -Sy
Instalar actualizacion despues de actualizar base de datos:
Familia debian:
sudo apt upgradeFamilia RHEL: ` Podemos hacer un dnf upgrade, pero el comando update ya incluye esta opción.
Familia ArchLinux:
sudo pacman -Syu
Eliminar paquetes:
Familia debian:
sudo apt remove [paquete]Familia RHEL:
sudo dnf remove [paquete]Familia ArchLinux:
sudo pacman -R [paquete]
Buscar paquetes:
Familia debian:
sudo apt search [paquete]Familia RHEL:
sudo dnf search [paquete]Familia ArchLinux:
sudo pacman -Ss [paquete]
15. Comandos dpkg y rpm
Instalar paquetes:
dpkg:
sudo dpkg -i [paquete]rpm:
sudo rpm -i [paquete]
Desinstalar un paquete:
dpkg:
sudo dpkg -r [paquete]rpm:
sudo rpm -e [paquete]
Obtener los paquetes instalados:
dpkg:
sudo dpkg -lrpm:
sudo rpm -qa