├── .vscode
└── settings.json
├── img
├── LPIC-1-Small.png
└── systemd-vs-sysVinit-chuleta.jpg
├── docs
├── 101-500
│ ├── img
│ │ ├── lvm.png
│ │ ├── vim.png
│ │ ├── signals.png
│ │ ├── tableofcontent.png
│ │ └── FileSystemHierarchy.png
│ ├── test.md
│ ├── Tema_101_dudas.md
│ ├── cambios_v4-v5.md
│ ├── 104:Dispositivos-sistemas-de-archivos-Linux-y-el-estandar-de-jerarquia-de-archivos.md
│ ├── 102:Instalacion-de-Linux-y-gestion-de-paquetes.md
│ ├── 101:Arquitectura-del-Sistema.md
│ └── 103:Comandos-GNU-y-Unix.md
├── 102-500
│ ├── img
│ │ ├── port.png
│ │ ├── log_facilities.png
│ │ └── loggin_priority.png
│ ├── scripts
│ │ ├── out.log
│ │ ├── web-backup.sh
│ │ ├── web-backup.timer
│ │ ├── web-backup.service
│ │ └── if.sh
│ ├── 106:Interfaces-de-usuario.y-escritorios.md
│ ├── 105:Shells-y-scripts.md
│ ├── 109:Fundamentos-de-redes.md
│ ├── 107:Tareas-administrativas.md
│ ├── 108:Servicios-esenciales-del-sistema.md
│ └── 110:Seguridad.md
└── trucos.md
├── .gitignore
├── objetivos_102.md
├── websites.md
├── README.md
└── objetivos_101.md
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "cSpell.language": ",es"
3 | }
--------------------------------------------------------------------------------
/img/LPIC-1-Small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SorianoTech/LPIC-1/HEAD/img/LPIC-1-Small.png
--------------------------------------------------------------------------------
/docs/101-500/img/lvm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SorianoTech/LPIC-1/HEAD/docs/101-500/img/lvm.png
--------------------------------------------------------------------------------
/docs/101-500/img/vim.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SorianoTech/LPIC-1/HEAD/docs/101-500/img/vim.png
--------------------------------------------------------------------------------
/docs/102-500/img/port.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SorianoTech/LPIC-1/HEAD/docs/102-500/img/port.png
--------------------------------------------------------------------------------
/docs/101-500/img/signals.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SorianoTech/LPIC-1/HEAD/docs/101-500/img/signals.png
--------------------------------------------------------------------------------
/docs/102-500/scripts/out.log:
--------------------------------------------------------------------------------
1 | if.sh
2 | learnyoubash
3 | out.log
4 | /home/sergio/GITHUB/LPIC-1/docs/102-500/scripts
5 |
--------------------------------------------------------------------------------
/docs/101-500/img/tableofcontent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SorianoTech/LPIC-1/HEAD/docs/101-500/img/tableofcontent.png
--------------------------------------------------------------------------------
/docs/102-500/img/log_facilities.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SorianoTech/LPIC-1/HEAD/docs/102-500/img/log_facilities.png
--------------------------------------------------------------------------------
/docs/102-500/img/loggin_priority.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SorianoTech/LPIC-1/HEAD/docs/102-500/img/loggin_priority.png
--------------------------------------------------------------------------------
/img/systemd-vs-sysVinit-chuleta.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SorianoTech/LPIC-1/HEAD/img/systemd-vs-sysVinit-chuleta.jpg
--------------------------------------------------------------------------------
/docs/trucos.md:
--------------------------------------------------------------------------------
1 | ### Buscar en las páginas de manuales de linux
2 |
3 | Presionar la tecla `/` e introducir el texto a buscar.
4 |
--------------------------------------------------------------------------------
/docs/101-500/img/FileSystemHierarchy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SorianoTech/LPIC-1/HEAD/docs/101-500/img/FileSystemHierarchy.png
--------------------------------------------------------------------------------
/docs/102-500/scripts/web-backup.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | DATE=$(date "+%d")
4 |
5 | /bin/tar -czf /root/site-backup-$DATE.tar.gz /var/www/html
6 |
--------------------------------------------------------------------------------
/docs/101-500/test.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | 1. [ Description. ](#desc)
4 | 2. [ Usage tips. ](#usage)
5 |
6 |
7 | ## 1. Description
8 |
9 | sometext
10 |
11 |
12 | ## 2. Usage tips
13 |
--------------------------------------------------------------------------------
/docs/102-500/scripts/web-backup.timer:
--------------------------------------------------------------------------------
1 | [Unit]
2 | Description=Fire off the backup
3 |
4 | [Timer]
5 | OnCalendar=*-*-* 23:00:00
6 | Persistent=true
7 | Unit=web-backup.service
8 |
9 | [Install]
10 | WantedBy=multi-user.target
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Files to ignore
2 | docs/101-500/test.md
3 |
4 |
5 | # OS generated files #
6 | ######################
7 | .DS_Store
8 | .DS_Store?
9 | ._*
10 | .Spotlight-V100
11 | .Trashes
12 | ehthumbs.db
13 | Thumbs.db
14 | settings.json
15 | .vscode
--------------------------------------------------------------------------------
/docs/102-500/scripts/web-backup.service:
--------------------------------------------------------------------------------
1 | [Unit]
2 | Description=Backup the web site, every day, or the boss will be mad
3 |
4 | [Service]
5 | Type=simple
6 | ExecStart=/usr/local/sbin/web-backup.sh
7 |
8 | [Install]
9 | WantedBy=multi-user.target
10 |
--------------------------------------------------------------------------------
/objetivos_102.md:
--------------------------------------------------------------------------------
1 | # Tabla de contenido :+1:
2 |
3 | ## Objetivos del examen 102
4 |
5 | - [ ] [Tema 105: Shells y scripts](docs/102-500/Tema_105.md)
6 | - [ ] [Tema 106: Interfaces de usuario y escritorios](docs/102-500/Tema_106.md)
7 | - [ ] [Tema 107: Tareas administrativas](docs/102-500/Tema_106.md)
8 | - [ ] [Tema 108: Servicios esenciales del sistema](docs/102-500/Tema_107.md)
9 | - [ ] [Tema 109: Fundamentos de redes](docs/102-500/Tema_108.md)
10 | - [ ] [Tema 110: Seguridad](docs/102-500/Tema_109.md)
11 |
--------------------------------------------------------------------------------
/websites.md:
--------------------------------------------------------------------------------
1 | # Webs principales para seguir la guia de estudio
2 |
3 | https://wiki.lpi.org/wiki/LPIC-1_Objectives_V5.0
4 | https://wiki.lpi.org/wiki/LPIC-1_Objectives_V5.0(ES)
5 |
6 | https://developer.ibm.com/tutorials/l-lpic1-101-1/
7 |
8 | https://github.com/appijumbo/Linux-LPIC-1/wiki/101:-System-Architecture
9 |
10 | webminar
11 | https://www.youtube.com/watch?v=e3Y7CSbArbo
12 |
13 | The linux man, filesystem en linux
14 | https://www.youtube.com/watch?v=g7OkSvioFlU
15 |
16 | https://www.youtube.com/watch?v=HIXzJ3Rz9po
17 |
18 | https://quizlet.com/306700585/linux-academy-practice-test-lpic-1-flash-cards/
19 |
--------------------------------------------------------------------------------
/docs/102-500/scripts/if.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Si existe la carpeta opt or el fichero host, entonces dara verdadero.
3 | if [[-d /opt || -f ~/etc/host]]; then
4 | echo "Esta condicion es verdadera."
5 | else
6 | echo "Esta condicion es falsa."
7 | fi
8 |
9 |
10 | #condicion preguntado el valor de una Variable
11 | VALUE="things"
12 |
13 | if [[ "$VALUE" = "things"]]; then
14 | echo "This is 'things'"
15 | else
16 | echo "This is not the right word."
17 | fi
18 |
19 | if [[ "$VALUE" != "things"]]; then
20 | echo "This is 'things'"
21 | else
22 | echo "This is not the right word."
23 | fi
24 |
25 |
26 | if [[$1 = "y"]]; then
27 | echo "Has dicho 'si'"
28 | elif [[$1 = "n"]]; then
29 | echo "Has dicho 'no'"
30 | else
31 | echo "Has introducido una opcion incorrecta"
32 | fi
33 |
--------------------------------------------------------------------------------
/docs/101-500/Tema_101_dudas.md:
--------------------------------------------------------------------------------
1 | # Aprendiendo con preguntas sobre el tema 101
2 |
3 | ¿Qué diferencia existe entre BIOS y UEFI?
4 |
5 | ¿Qué diferencia existe entre un sistema de ficheros(fylesystem) y un directorio?
6 |
7 | Ejercicio 1.
8 | Eliminar un dispositivo integrado del sistema
9 |
10 |
11 | Diferencias entre UEFI y BIOS, EFI MRB
12 |
13 | UEFI predecesor de BIOS
14 | EFI y luego aparecion UEFI
15 | BIOS tiene MBR
16 |
17 |
18 | ## Dudas examen Linux Academy
19 |
20 | systemctl o systemd
21 |
22 | - [x] ¿Cuáles son los parámetros necesarios para el comando `dd`?
23 |
24 | ¿Qué significa el primer dígito al modificar los permisos con el commando chmod, por ejemplo 1775?
25 | sticky bitsticky bit
26 |
27 | ¿Que ocurre si tengo activo todos los bits?
28 |
29 | ¿Para que sirve el digito stykibit?
30 |
31 | ¿Cuáles son las capas de particionado en los sistemas LVM?
32 |
33 | ¿Para que sirve el comando set -o noclobber?
34 |
35 | ¿Cómo podemos ejecutar un comando y que se muestre en pantalla cada 10 segundos?
36 |
37 |
38 | ¿Para que sirve el comando tmux?
39 |
40 |
41 | ¿Dónde podemos encontrar todos lo programas instalados?
42 |
43 | ¿Dónde podemos ver todos los programas que arrancan al inicio del sistema?
44 |
45 |
46 | ¿Para que sirve systemctl?
47 |
48 | ¿Cómo podemos añadir un programa al arranque de inicio?
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/docs/102-500/106:Interfaces-de-usuario.y-escritorios.md:
--------------------------------------------------------------------------------
1 | ## 106: Interfaces de usuario y escritorios
2 |
3 | ### 106.1 Instalar y configurar X11
4 |
5 | #### 106.1.1 The Basics of X11
6 |
7 | X11 lo llevan los antiguos sistemas (CentOS 5)
8 | Wayland - remplaza al sistema de ventas X.
9 |
10 | #### 106.1.2 Instalando X11
11 |
12 | `yum grouplist` - para ver los grupos de instalaciones.
13 |
14 | `yum -y groupinstall "X Windows System"`
15 |
16 | x.org se encarga de llevar el proyecto.
17 |
18 | Podemos encontrar el fichero de configuración en `/etc/init` y veremos que apunta a `/etc/X11/prefdm`
19 |
20 | #### 106.1.3 Configuraciones de X11
21 |
22 | `xorg.conf` - fichero de configuración de entorno visual de ventanas X
23 |
24 | man `xorg,conf` - para ver toda la documentación sobre la configuración del entorno de ventanas.
25 |
26 | `xdpyinfo` - muestra información sobre la sesión de ventanas.
27 |
28 | #### 106.1.4 Conexiones gráficas remotas
29 |
30 | `xhost` - no usar para entornos de producción. (Se usaba antes) con este comando podemos habilitar o deshabilitar el acceso remoto.
31 |
32 | ```console
33 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~ xhost
34 | access control enabled, only authorized clients can connect
35 | SI:localuser:sergio
36 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~ xhost -
37 | access control enabled, only authorized clients can connect
38 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~ xhost +
39 | access control disabled, clients can connect from any host
40 | ```
41 |
42 | `xauth` - sirve para editar y ver información de seguridad que permita a los usuarios controlar los clientes de ventanas X11.
43 |
44 | `VNC` - Virtual Network computing.
45 |
46 | Instalar el servidor de VNV:
47 |
48 | `yum install tigervnc-server`
49 |
50 | **Demo** de como configurar un servidor VNC y crear una redirección de puertos por ssh para conectarnos de forma segura.
51 |
52 | `ssh -C -L 5901:localhost:5901 192.168.122.241`
53 |
54 | 5901:localhost - puerto y dirección local
55 |
56 | 5901 192.168.122.241 - puerto y dirección remota
57 |
58 | Ahora podemos utilizar la ip local para conectarnos por VNC al escritorio remoto
59 |
60 | `SPICE` - Protocolo de conexión seguro encriptado con TLS, permite conexiones con sistemas Windows, linux y android.
61 |
62 | ---
63 |
64 | ### 106.2 Escritorios Gráficos
65 |
66 | GTK+ : desarrolladas en C
67 |
68 | - GNOME
69 | - XFCE
70 |
71 | QT : desarrolladas en C++
72 |
73 | - KDE
74 |
75 | ### 106.3 Accesibilidad
76 |
77 | Configuración especifica de accesibildad, como zoom, punteros, lectura de ventanas por voz, etc.
78 | Orca permite la configuración de accesibilidad, centrándonos en la configuración de screen reader.
79 |
--------------------------------------------------------------------------------
/docs/101-500/cambios_v4-v5.md:
--------------------------------------------------------------------------------
1 | # Tabla de contenido a revisar de la version 4 a la 5 del **Examen 101**
2 |
3 | - [101: System Architecture](#101-system-architecture)
4 | -
5 |
6 | The following changes constitute the update of exam 101 from version 4.0 to version 5.0:
7 |
8 | # 101: System Architecture
9 |
10 | ## 101.1 Determine and configure hardware settings
11 | Removed 'Configure systems with or without external peripherals such as keyboards.'
12 | Removed 'Know the differences between coldplug and hotplug devices.'
13 |
14 | ## 101.2 Boot the system
15 | Added coverage of UEFI (equal to BIOS coverage) and journalctl (with respect to boot events)
16 |
17 | ## 101.3 Change runlevels / boot targets and shutdown or reboot system
18 | Added awareness of acpid
19 |
20 | # 102: Linux Installation and Package Management
21 |
22 | ## 102.1 Design hard disk layout
23 | Added EFI System Partition (ESP)
24 |
25 | ## 102.2 Install a boot manager
26 | (no changes)
27 |
28 | ## 102.3 Manage shared libraries
29 | (no changes)
30 |
31 | ## 102.4 Use Debian package management
32 | Removed aptitude
33 | Added awareness of apt.
34 |
35 | ## 102.5 Use RPM and YUM package management
36 | Removed yumdownloader
37 | Added Zypper (equal to YUM)
38 | Added awareness of dnf
39 | 102.6 Linux as a virtualization guest
40 | New objective (weight: 1)
41 | Added specialties of running Linux in a virtual machines and containers on premise and in the cloud
42 |
43 | # 103: GNU and Unix Commands
44 |
45 | 103.1 Work on the command line
46 | Added quoting
47 | Added type and which
48 |
49 | 103.2 Process text streams using filters
50 | Decreased weight from 3 to 2
51 | Removed expand, fmt, join, pr and unexpand
52 | Added bzcat, md5sum, sha256sum, sha512sum, xzcat and zcat
53 |
54 | 103.3 Perform basic file management
55 | Added bunzip2 and unxz
56 |
57 | 103.4 Use streams, pipes and redirects
58 | (no changes)
59 |
60 | 103.5 Create, monitor and kill processes
61 | Added watch and tmux
62 |
63 | 103.6 Modify process execution priorities
64 | (no changes)
65 |
66 | 103.7 Search text files using regular expressions
67 | Increased weight from 2 to 3
68 | Added understanding of the differences between basic and extended regular expressions
69 | Added understanding of the concepts of special characters, character classes, quantifiers and anchors
70 | Added use of regular expressions to delete, change and substitute text
71 |
72 | 103.8 Basic file editing
73 | Renamed from 'Perform basic file editing operations using vi' to ' Basic file editing'
74 | Clarified wording of 'Understand and use vi modes.'
75 | Removed vi commands c and :e!
76 | Added awareness of other common editors (Emacs, nano and vim) and setting the default editor (EDITOR environment variable)
77 |
78 | 104: Devices, Linux Filesystems, Filesystem Hierarchy Standard
79 | 104.1 Create partitions and filesystems
80 | Removed awareness of ReiserFS
81 | Added GPT partition tables
82 | Added exFAT
83 | Changed awareness of Btrfs to 'Basic feature knowledge of Btrfs, including multi-device filesystems, compression and subvolumes.'
84 |
85 | 104.2 Maintain the integrity of filesystems
86 | Removed debugfs and dumpe2fs
87 | Changed 'XFS tools (such as xfs_metadump and xfs_info)' to coverage of xfs_repair, xfs_fsr and xfs_db
88 |
89 | 104.3 Control mounting and unmounting of filesystems
90 | Added use of labels and UUIDs for identifying and mounting file systems
91 | Added awareness of systemd mount units
92 | Added blkid and lsblk
93 |
94 | 104.4 Manage disk quotas
95 | Removed objective (former weight: 1)
96 |
97 | 104.5 Manage file permissions and ownership
98 | (no changes)
99 |
100 | 104.6 Create and change hard and symbolic links
101 | (no changes)
102 |
103 | 104.7 Find system files and place files in the correct location
104 | (no changes)
--------------------------------------------------------------------------------
/docs/102-500/105:Shells-y-scripts.md:
--------------------------------------------------------------------------------
1 | # Tema 105: Shells y scripts
2 |
3 | [BASH (Bourne-again shell](https://es.wikipedia.org/wiki/Bash)) - es un programa escrito en C que interpreta las ordenes escritas por consola para interactuar con el sistema. [Manual](https://www.gnu.org/software/bash/manual/)
4 |
5 | ## 105.1 Personalizar y usar el entorno de shell
6 |
7 | ### Setting Up the Shell Environment
8 |
9 | Tenemos que tener en cuenta que hay varios tipos de consolas:
10 |
11 | - **Consolas interactivas de acceso**. (Interactives Login Shell).
12 |
13 | - Es la consola que se crea cuando te logas en una ventana de terminal sin escritorio.
14 | - Consola que se crea cuando nos logamos por SSH.
15 |
16 | - **Consola interactiva sin acceso**. (Non-login terminal)
17 | - Es una consola creada por otra aplicación, por ejemplo la terminal que abrimos desde un entorno de escritorio en GNOME.
18 |
19 | > Si hacemos un echo \$0 sobre la terminal podemos saber que tipo de consola es
20 |
21 | Login Shell: `bash`
22 | Non-Login Shell: `-bash`
23 |
24 | > La diferencia esta en el carácter "-"
25 |
26 | **Archivos**
27 |
28 | `/etc/profile` - es el primero fichero que se lee cuando se accede a una nueva sesión. Configura las variables de entorno que serán usadas por esta consola, como valore de umask, historial de bash, etc.
29 |
30 | `/etc/profile.d/` - directorio que contiene scripts de configuración extra para bash.
31 |
32 | `/etc/bashrc` - fichero de configuración de funciones y alias.
33 |
34 | `/etc/skel` - es el directorio que contiene la plantillas que se aplican cuando se crea un usuario nuevo.
35 |
36 | Para modificar los alias y las funciones de un usuario tendremos que modificar el fichero `~/.bashrc`.
37 |
38 | ### Customizing the Shell Environment
39 |
40 | `env` - nos muestra todas las variables de entorno configuradas para la shell actual.
41 |
42 | `export` - comando para exportar una variable de entorno para la bash actual y las bash que se creen por debajo de ella.
43 |
44 | `set` - nos muestra la configuración de todas las consolas bash, variables y funciones. Puede ser utilizado para habilitar y deshabilitar configuraciones de la bash.
45 |
46 | Por ejemplo si queremos deshabilitar el file globing `set -f` . Para volver habilitar usamos `set +f`.
47 |
48 | `unset` - se utiliza para borrar una variable de entorno.
49 |
50 | `Alias` - los alias son acceso directos a comandos y se añaden en el fichero bashrc.
51 |
52 | `function` - las funciones son una serie de ordenes que se ejecutan cuando la función es llamada. Es útil para tareas repetitivas.
53 |
54 | En caso de que cambiemos o añadamos algún **alias** el fichero de **bashrc**, tenemos que pararle la opcion `source` para que se actualice.
55 |
56 | ```s
57 | source ~/.bashrc
58 | ```
59 |
60 | `PATH` - es la variable de entorno que contiene los directorios que la bash utilizara para poder ejectuar un programa sin tener que especificar la ruta completa. Es una variable muy importate.
61 |
62 | ## 105.2 Personalización y escritura de scripts sencillos
63 |
64 | Los scripts son una colección de comandos que hacen alguna acción concreta.
65 |
66 | Los scripts se identifican por el tipo de consola en la que se ejecutan.
67 |
68 | Indicamos que el script lo va a ejecutar la shell de **bash**.
69 |
70 | ```s
71 | #!/bin/bash
72 | ```
73 |
74 | Se pueden pasar parametos a la ejecución de scripts definiendolos así -> `$1` parametro 1, por ejemplo `./myscript.sh text.txt` lanzará el script tomando como valor `$1` `text.txt`.
75 |
76 | ### Basic Shell Scripts
77 |
78 | ```s
79 | #!/bin/bash
80 | # Crea un fichero vacio y añade contenido a el
81 | touch $1
82 | echo "Esto es un fichero de prueba" > $1
83 | #Lanzo un clear para limpiar la pantalla y muestro el fichero
84 | clear
85 | cat $1
86 | ```
87 |
88 | **¿Dónde están ubicados los script del sistema?**
89 |
90 | - `/usr/bin` - script del sistema
91 | - `/usr/local/bin/` - scripts instalados o creados por los usuarios para ser utilizados en el sistema local.
92 | - `/home/user/bin` - scripts creados por el usuario y solo disponibles para el usuarios.
93 |
94 | ### Bash Loops and Sequences
95 |
96 | - `for`
97 | - `while`
98 | - `until`
99 |
100 | Ejemplos [aquí](https://es.wikibooks.org/wiki/El_Manual_de_BASH_Scripting_B%C3%A1sico_para_Principiantes)
101 |
102 | ---
103 |
104 | `read` Leemos lo que introducimos por teclado y lo guardamos en la variable GRETTING. `read GREETING`.
105 |
106 | `exit` - para especificar el retorno de salida, normalmente seria 0, pero se puede cambiar a otro numero, por ejemplo para salir en un bucle.
107 |
108 | `exec` - se puede utilizar para re-direccionar la salida de una shell a un fichero. `exec > out .log`
109 |
110 | ---
111 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # LPIC-1
2 |
3 | Guía de estudio de preparación para la certificación LPIC-1.
4 |
5 | LPIC son las siglas de **Linux Professional Institute Certification**.
6 |
7 | 
8 |
9 | A fecha de 03/04/2019 esta certificación se encuentra en la versión 5.0 y los códigos de examen son 101-500 y 102-500. El examen no esta disponible en idioma español, aunque la version 4.0 esta disponible hasta Julio de 2019.
10 |
11 | Se divide en dos exámenes: :+1:
12 |
13 | - Examen 101
14 | - Examen 102
15 |
16 | ## Objetivos del examen 101
17 |
18 | - [ ] [Tema 101: Arquitectura del Sistema](docs/101-500/101:Arquitectura-del-Sistema.md)
19 | - [ ] [Tema 102: Instalación de Linux y gestión de paquetes](docs/101-500/102:Instalacion-de-Linux-y-gestion-de-paquetes.md)
20 | - [ ] [Tema 103: Comandos GNU y Unix](docs/101-500/103:Comandos-GNU-y-Unix.md)
21 | - [ ] [Tema 104: Dispositivos, sistemas de archivos Linux y el estándar de jerarquía de archivos](docs/101-500/104:Dispositivos-sistemas-de-archivos-Linux-y-el-estandar-de-jerarquia-de-archivos.md)
22 |
23 | ## Objetivos del examen 102
24 |
25 | - [ ] [Tema 105: Shells y scripts](docs/102-500/105:Shells-y-scripts.md)
26 | - [ ] [Tema 106: Interfaces de usuario y escritorios](docs/102-500/106:Interfaces-de-usuario.y-escritorios.md)
27 | - [ ] [Tema 107: Tareas administrativas](docs/102-500/107:Tareas-administrativas.md)
28 | - [ ] [Tema 108: Servicios esenciales del sistema](docs/102-500/108:Servicios-esenciales-del-sistema.md)
29 | - [ ] [Tema 109: Fundamentos de redes](docs/102-500/109:Fundamentos-de-redes.md)
30 | - [ ] [Tema 110: Seguridad](docs/102-500/110:Seguridad.md)
31 |
32 | Al obtener esta certificación se obtiene los conocimientos necesarios para:
33 |
34 | - Comprender la arquitectura de un sistema Linux.
35 | - Instalar y mantener una estación de trabajo Linux, incluyendo X11 y su configuración como un cliente de red.
36 | - Trabajar en la línea de comandos de Linux, incluidos los comandos comunes de GNU y Unix.
37 | - Manejar archivos y permisos de acceso, así como la seguridad del sistema.
38 | - Realizar tareas de mantenimiento: ayudar a los usuarios, agregar usuarios a un sistema más grande, realizar copias de seguridad y restaurar, apagar y reiniciar.
39 |
40 | Al obtener esta certificación se garantiza que has adquirido unos conocimientos suficientes para resolver los problemas más comunes con los que te puedes encontrar cuando trabajas con sistemas UNIX.
41 |
42 | ## FAQ
43 |
44 | ### Preguntas para resolver sobre la certificación
45 |
46 | **¿El examen se puede realizar en español?**
47 | Si, tanto en español como en inglés.
48 |
49 | **¿Cómo son los exámenes?**
50 | Cada examen tiene 60 preguntas tipo test de selección múltiple o preguntas de rellenar.
51 |
52 | **¿Cuanto dura el examen?**
53 | Se dispone de 90 minutos
54 |
55 | **¿Qué nota tengo que sacar para superar cada examen?**
56 | Cada examen tiene un peso de 800 puntos. Deberás obtener al menos 500 en cada examen.
57 |
58 | **¿Qué significa eso del peso de las preguntas**
59 | El peso de las preguntas en cada una de las partes del examen, significa que si un apartado tiene un peso de 4, en el examen habrá 4 preguntas de ese tema.
60 |
61 | **¿Cuánto cuesta el examen?**
62 | 170€ aprox. cada examen. Tienes que hacer los dos para obtener la certificación.
63 |
64 | **¿Durante qué tiempo es válida la certificación?**
65 | Tu certificación LPIC-1 será válida durante 5 años.
66 |
67 | **¿Dónde se realizan los exámenes?¿Presencial o online?**
68 | Los exámenes se realizan de forma presencial en centros asociados o centros PearsonVue. Puedes consultar tu centro más cercano [aquí](https://wsr.pearsonvue.com/testtaker/registration/SelectTestCenterProximity/LINUXPROFESSION?conversationId=1290514)
69 |
70 | El centro mas cercano en madrid esta en:
71 |
72 | ```
73 | AZPE Centro de Estudios
74 | c/ Gran Via 40, 1ª (Metro Callao)
75 | 28013 Madrid
76 | Spain
77 | Phone:
78 | 0034915323659
79 | ```
80 |
81 | **¿Qué debo hacer si quiero presentarme al examen?**
82 |
83 | 1. Debes estar registrado en la Linux Professional Institute para obtener un _LPI ID_. Pues registrarte [aquí](https://cs.lpi.org/caf/Xamman/register). Tardan 24 h en generarte el ID.
84 | 2. Registrarte en PearsonVue utilizando el _LPI ID_ [aquí](https://home.pearsonvue.com/lpi).
85 | 3. Buscar un centro mas cercano de PearsonVue.
86 |
87 | ## Enlaces
88 |
89 | [Wiki con los objetivos de la version 5.0]()
90 |
91 | [Wiki del contenido en github](https://github.com/appijumbo/Linux-LPIC-1/wiki)
92 |
93 | [Materiales de estudio en español](http://www.lpifit.com/course/)
94 |
95 | [Consola de linux Online](https://www.tutorialspoint.com/unix_terminal_online.php)
96 |
97 | [Cursos oficiales PUE](https://www.pue.es/cursos/lpi)
98 |
99 | [FAQ LPIC](mbRadvvMT51IjsN8gsTz)
100 |
101 | ### Documentación oficial Linux
102 |
103 | [The Linux Document Project](http://www.tldp.org/)
104 |
105 | [GNU Project](http://www.gnu.org/doc/)
106 |
107 | [Man pages](https://linux.die.net/man/)
108 |
109 | [Free Software Directory](https://directory.fsf.org/wiki/Main_Page)
110 |
111 | ### Blog's
112 |
113 | [Blog de contenido Linux](http://www.linuxlinks.com)
114 |
115 | [Systemadmin.es](http://systemadmin.es/)
116 |
117 | ### Videos
118 |
119 | [Lista de reproducción de youtube LPIC-1](https://www.youtube.com/watch?v=Fov9nM-AbSw&list=PLD_mb6U5Xp95cX_CDO3Cg-p8370lPwRR2)
120 |
121 | [The Linux man](https://www.youtube.com/channel/UCVQ7kPpJJ2FA_iYl8Wtx0SA)
122 |
123 | ### Canales de ayuda
124 |
125 | [Freenode](https://webchat.freenode.net)
126 |
127 | [Buscador de canales IRC](http://irc.netsplit.de/channels/)
128 |
129 | [Canal Freenode para principiantes](http://irc2go.com/webchat/?net=freenode&room=%23linux-beginners)
130 |
131 | ### Cursos de pago por suscripción online
132 |
133 | [Openwebminars LPIC-1 ](https://openwebinars.net/carreras/certificacion-lpic-1/)
134 |
135 | [Linux Academy](https://linuxacademy.com/cp/modules/view/id/214)
136 |
137 | ### Mas información
138 |
139 | [Free Software Fundation](https://www.fsf.org/)
140 |
141 | Distribuciones
142 |
143 | [ArchLinux](https://wiki.archlinux.org/index.php/Main_page_(Espa%C3%B1ol)
144 |
145 | [LinuxFreedom](http://linuxfreedom.com/Distros/)
146 |
--------------------------------------------------------------------------------
/docs/102-500/109:Fundamentos-de-redes.md:
--------------------------------------------------------------------------------
1 | # 109: Fundamentos de redes
2 |
3 | ## 109.1 Fundamentos de los protocolos de Internet
4 |
5 | ### Fundamentos de red
6 |
7 | - **TCP** Transmission Control Protocol
8 | - **UDP** User Datagram Protocol
9 | - **ICMP** Internet Control Message Protocol, se utiliza para enviar mensajes entre dispositivos(switches, firewall, etc).
10 |
11 | Los rangos de IP se describen en el [RFC1918](https://tools.ietf.org/html/rfc1918).
12 |
13 | - Clase A: Ragngo 1 -126
14 | - Clase B: Rango 128 - 191
15 | - Clase C Rango 192 -223
16 |
17 | Mascaras de red:
18 |
19 | - Clase A: 255.0.0.0/8
20 | - Clase B: 255.255.0/16
21 | - Clase C: 255.255.255.0/24
22 |
23 | **Gateway**
24 | **Broadcast Address**
25 |
26 | ---
27 |
28 | ### Common Networking Services
29 |
30 | Es necesario memoriazar el puerto, el protocolo y el servicio.
31 |
32 | 
33 |
34 | ## 109.2 Configuración de red persistente
35 |
36 | ### Network manager
37 |
38 | `nmcli` - comando para ver los interfaces de red.
39 | `nmcli dev show` - muestra toda la informacion de los interfaces de red.
40 |
41 | Nombres de los dispositivos de red
42 |
43 | Nomenclatura principal:
44 |
45 | - **en** = ethernet
46 | - **wl** = wireless
47 |
48 | - eo1 = onboar devices, indexado por la bios o el firmware.
49 | - ens1 = dispositvos en PCI Express hotplug slot, indexado por la BIOS o firmware.
50 | - enp2s0 - dispositivios físicos. (p=bus, s=slot)
51 | - eht0 - antiguo.
52 |
53 | `nmcli con show` - para ver las conexiones que tenemos establecidas.
54 |
55 | Tirar abajo un dispositivo de red:
56 |
57 | ```
58 | nmcli con down "NAME"
59 | ```
60 |
61 | `nmcli device status` - para ver el estado de los interfaces.
62 |
63 | Añadir una nueva conexión y añadir el dns.
64 |
65 | ```
66 | nmcli con add con-name "backup" type ethernet ip4 192.168.0.202/24 gtw 192.168.0.1 iframe ens11 autoconnect
67 |
68 | nmcli con mod bakcup ipv4.dns "192.168.122.1"
69 | ```
70 |
71 | `iframe` - es el dispositivo que queremos que utilice.
72 |
73 | `nmcli con edit` - comando para edir una conexión.
74 |
75 | `ip` - comando para modificar la dirección ip, rutas y informacion de los interfaces. Es un proyecto de [iproute2](https://es.wikipedia.org/wiki/Iproute2).
76 |
77 | `hostnamectl` - comando para hacer persistente el cambio de hostname
78 |
79 | ```
80 | hostnamectl -set-hostname "centos07"
81 | ```
82 |
83 | ---
84 |
85 | ### Herramietas de red antiguas(legact)
86 |
87 | net-tools
88 |
89 | `ifconfig` - antigua utilidad para las configuraciones de red.
90 |
91 | `ifup` - levantar un interface.
92 |
93 | `ifdown` - tirar un interface.
94 |
95 | `route` - cambiar la routa de acceso de los interfaces.
96 |
97 | ## 109.3 Resolución de problemas básicos de red
98 |
99 | ### Pruebas de conexion
100 |
101 | `ping` - envia paquetes ICMP pra comprobar la conexión cono otra máquina.
102 |
103 | `ping6` - la misma funcionalidad que ping pero para redes IPv6.
104 |
105 | `traceroute` - muestra ala lista de saltos que el paquete tiene que atravesar para llegar a su destino. Envia paquetes ICMP, algunos firewall bloquean este tipo de paquetes.
106 |
107 | Enviamos paquetes TCP
108 |
109 | ```
110 | traceroute -T 8.8.8.8
111 | ```
112 |
113 | `netstat` - antigua herramienta para ver las conexiones que tenemos establecidas
114 |
115 | Mostrar conexiones activas y escuchando por el protocolo TCP
116 |
117 | ```
118 | netstat -tl
119 | ```
120 |
121 | Mostrar las conexiones activas y escuchando por el protocolo UDP
122 |
123 | ```
124 | netstat -ul
125 | ```
126 |
127 | Ver los procesos a sociados a las conexiones que estan escuchando.
128 |
129 | ```
130 | netstat -tulp
131 | ```
132 |
133 | `tracepath` - la misma funcionalidad de que traceroute pero para redes IPv6.
134 |
135 | `ss` - es el equivalente moderno a netstat, podemos utilizar los mismos parámetros para ver la informacion.
136 |
137 | ## 109.4 Configuración DNS en el lado del cliente
138 |
139 | ### The Basics of DNS Resolution from Linux
140 |
141 | `/etc/host` - ficher que contiene la direccion de loopbak de IPv4 y IPv6, se puede utilizar para asignar cual ip a un DNS sin que pase por un DNS externo.
142 |
143 | `/etc/hostname/` - contiene el nombre de la maquina. Con el comando **hostnamectl** pordemos cambiar el nombre y que sea permanente.
144 |
145 | `/etc/resolv.conf` - contiene los servidores de nombres (DNS) que la máquina utiliza para consultar las direcciones de nombres asiganadas a las IP.
146 |
147 | `/etc/nsswitch.conf` - este fichero es usado para determinar el orden de como se resuelven los nombres.
148 |
149 | `hosts` - resuleve la ip dandole un nombre, tambien podemos ver los servidores de correo. Los numeros equivialen a la prioridad de entrega.
150 |
151 | ```s
152 | host sergiosoriano.es
153 | sergiosoriano.es has address 104.24.101.12
154 | sergiosoriano.es has address 104.24.100.12
155 | sergiosoriano.es has IPv6 address 2606:4700:30::6818:650c
156 | sergiosoriano.es has IPv6 address 2606:4700:30::6818:640c
157 | sergiosoriano.es mail is handled by 1 aspmx.l.google.com.
158 | sergiosoriano.es mail is handled by 10 alt4.aspmx.l.google.com.
159 | sergiosoriano.es mail is handled by 5 alt1.aspmx.l.google.com.
160 | sergiosoriano.es mail is handled by 10 alt3.aspmx.l.google.com.
161 | sergiosoriano.es mail is handled by 5 alt2.aspmx.l.google.com.
162 | ```
163 |
164 | `dig` - se utiliza para realizar una query a los servidores de DNS.
165 |
166 | Realizamos una consulta al DNS para saber que direccion equivale mi página web.
167 |
168 | ```s
169 | dig sergiosoriano.es
170 |
171 | ; <<>> DiG 9.11.3-1ubuntu1.7-Ubuntu <<>> sergiosoriano.es
172 | ;; global options: +cmd
173 | ;; Got answer:
174 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14907
175 | ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
176 |
177 | ;; OPT PSEUDOSECTION:
178 | ; EDNS: version: 0, flags:; udp: 4096
179 | ;; QUESTION SECTION:
180 | ;sergiosoriano.es. IN A
181 |
182 | ;; ANSWER SECTION:
183 | sergiosoriano.es. 158 IN A 104.24.100.12
184 | sergiosoriano.es. 158 IN A 104.24.101.12
185 |
186 | ;; Query time: 2 msec
187 | ;; SERVER: 192.168.0.1#53(192.168.0.1)
188 | ;; WHEN: Thu Jun 20 07:14:40 CEST 2019
189 | ;; MSG SIZE rcvd: 77
190 | ```
191 |
192 | Con **-t** seguido del tipo de registro (MX) consultamos los registros concretos del dominio en cuestión.
193 |
194 | ```s
195 | dig -t MX sergiosoriano.es
196 |
197 | ; <<>> DiG 9.11.3-1ubuntu1.7-Ubuntu <<>> -t MX sergiosoriano.es
198 | ;; global options: +cmd
199 | ;; Got answer:
200 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57448
201 | ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 7
202 |
203 | ;; OPT PSEUDOSECTION:
204 | ; EDNS: version: 0, flags:; udp: 512
205 | ;; QUESTION SECTION:
206 | ;sergiosoriano.es. IN MX
207 |
208 | ;; ANSWER SECTION:
209 | sergiosoriano.es. 41 IN MX 1 aspmx.l.google.com.
210 | sergiosoriano.es. 41 IN MX 10 alt4.aspmx.l.google.com.
211 | sergiosoriano.es. 41 IN MX 5 alt1.aspmx.l.google.com.
212 | sergiosoriano.es. 41 IN MX 10 alt3.aspmx.l.google.com.
213 | sergiosoriano.es. 41 IN MX 5 alt2.aspmx.l.google.com.
214 |
215 | ;; ADDITIONAL SECTION:
216 | alt2.aspmx.l.google.com. 229 IN A 74.125.200.26
217 | alt2.aspmx.l.google.com. 229 IN AAAA 2404:6800:4003:c00::1b
218 | aspmx.l.google.com. 229 IN A 64.233.167.26
219 | aspmx.l.google.com. 229 IN AAAA 2a00:1450:400c:c07::1b
220 | alt1.aspmx.l.google.com. 229 IN A 108.177.14.26
221 | alt1.aspmx.l.google.com. 229 IN AAAA 2a00:1450:4010:c0f::1b
222 |
223 | ;; Query time: 6 msec
224 | ;; SERVER: 192.168.0.1#53(192.168.0.1)
225 | ;; WHEN: Thu Jun 20 07:16:37 CEST 2019
226 | ;; MSG SIZE rcvd: 295
227 | ```
228 |
229 | Podemos consultar los registros, utilizando otro DNS con la arroba
230 |
231 | ```s
232 | dig @8.8.8.8 -t A google.es
233 |
234 | ; <<>> DiG 9.11.3-1ubuntu1.7-Ubuntu <<>> @8.8.8.8 -t A google.es
235 | ; (1 server found)
236 | ;; global options: +cmd
237 | ;; Got answer:
238 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21093
239 | ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
240 |
241 | ;; OPT PSEUDOSECTION:
242 | ; EDNS: version: 0, flags:; udp: 512
243 | ;; QUESTION SECTION:
244 | ;google.es. IN A
245 |
246 | ;; ANSWER SECTION:
247 | google.es. 299 IN A 172.217.17.3
248 |
249 | ;; Query time: 29 msec
250 | ;; SERVER: 8.8.8.8#53(8.8.8.8)
251 | ;; WHEN: Thu Jun 20 07:22:03 CEST 2019
252 | ;; MSG SIZE rcvd: 54
253 | ```
254 |
255 | Puedes encontrar mas ejemplos [aquí](https://elbauldelprogramador.com/dig-chuleta-basica-de-comandos/)
256 |
257 | `getent` - realiza una query al fichero `/etc/nsswitch.conf` y responde la información de la base de datos a la que corresponda. Mas info [aquí](http://man7.org/linux/man-pages/man1/getent.1.html). Se puede utilizar para consultar los grupos, protocolos, etc.
258 |
--------------------------------------------------------------------------------
/docs/101-500/104:Dispositivos-sistemas-de-archivos-Linux-y-el-estandar-de-jerarquia-de-archivos.md:
--------------------------------------------------------------------------------
1 | - [Tema 104: Dispositivos, sistemas de archivos Linux y el estándar de jerarquía de archivos](#tema-104-dispositivos-sistemas-de-archivos-linux-y-el-est%C3%A1ndar-de-jerarqu%C3%ADa-de-archivos)
2 | - [104.1 Creación de particiones y sistemas de archivos](#1041-creaci%C3%B3n-de-particiones-y-sistemas-de-archivos)
3 | - [104.2 Mantener la integridad de los sistemas de archivos](#1042-mantener-la-integridad-de-los-sistemas-de-archivos)
4 | - [104.3 Controlar el montaje y desmontaje de los sistemas de archivos](#1043-controlar-el-montaje-y-desmontaje-de-los-sistemas-de-archivos)
5 | - [104.4 Eliminado](#1044-eliminado)
6 | - [104.5 Administración de los permisos y los propietarios de los archivos](#1045-administraci%C3%B3n-de-los-permisos-y-los-propietarios-de-los-archivos)
7 | - [Permisos especiales](#permisos-especiales)
8 | - [104.6 Crear y cambiar enlaces duros y simbólicos (Hard link and symbolic link)](#1046-crear-y-cambiar-enlaces-duros-y-simb%C3%B3licos-hard-link-and-symbolic-link)
9 | - [104.7 Encontrar archivos de sistema y ubicar archivos en el lugar correspondiente](#1047-encontrar-archivos-de-sistema-y-ubicar-archivos-en-el-lugar-correspondiente)
10 |
11 | # Tema 104: Dispositivos, sistemas de archivos Linux y el estándar de jerarquía de archivos
12 |
13 |
14 | ## 104.1 Creación de particiones y sistemas de archivos
15 |
16 | swap file: es el fichero que se utiliza cuando esta la memoria ram llena.
17 |
18 | `fdisk` - se utiliza para modificar particiones basadas en MBR
19 |
20 | `gparted` - se utiliza para modificar particiones basadas tables de particiones GPT
21 |
22 | `parted` -
23 |
24 | `mkswap` - comando para usado para formatear una partcion swap
25 |
26 | `swapoff` - deshabilita una partición de swap
27 |
28 | Para añadir una partición al arranque tenemos que modificar el fichero `/etc/fstab/`
29 |
30 |
31 | Añadir una nueva partición de SWAP, añadimos al fichero `fstab` la siguiente información:
32 |
33 | ```
34 | LABEL=SWAP swap swap defaults 0 0
35 | ```
36 |
37 | ## 104.2 Mantener la integridad de los sistemas de archivos
38 |
39 | `df` - (diskfree) nos muestra el espacio dispoible de un sistema de ficheros
40 |
41 | `du` - (diskusage) nos muestra la cantidad del disco utilizada.
42 |
43 | `inode` - indice de nodos, guarda información de los ficheros y carpetas, como permisos, propietarios, tipo de ficheros, casi todos los sistemas de ficheros tienen un limite de inodos.
44 |
45 |
46 | ## 104.3 Controlar el montaje y desmontaje de los sistemas de archivos
47 |
48 | mount /dev/sdb1 /opt
49 |
50 | Para hacer que un punto de montaje sea permanente tenemos que modificar el fichero `/etc/fstab`
51 |
52 | ```console
53 | LABEL=opt /opt ext4 defaults 1 2
54 | ```
55 |
56 | mount
57 | `man mount` - para buscar el la ayuda utilizamos el caracter `/` o introducimos el número de la linea a la que queremos ir. Linea 412 para las opciones de montado.
58 | umount
59 |
60 |
61 | Mostrar unicamente un sistema de ficheros concreto, por ejemplo ext4.
62 |
63 | ```console
64 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~ mount -t ext4
65 | /dev/nvme0n1p2 on / type ext4 (rw,relatime,errors=remount-ro)
66 | ```
67 |
68 | El contenido del comando mount es el mismo que el fichero:
69 | `cat /etc/mtab` que no es mas que un enlace simbólico a `/proc/self/mounts`
70 |
71 | Montar un sistema de ficheros especificando opciones concretas
72 |
73 | `-L` - para indicar la etiqueta
74 | `-t` para indicar el sistema de ficheros a utilizar
75 | `-o` para indicar las opciones de montado
76 | `rw` - lectura y escritura
77 | `noexec` - no permite la ejecución de archivos binarios en la unidad montada.
78 |
79 |
80 | ```console
81 | mount -L OPT -t xfs -o rw,noexec /opt
82 | ```
83 |
84 | Para que sea permanente:
85 |
86 | Editamos el fichero `/etc/fstab`
87 |
88 | ```console
89 | LABEL=OPT /opt xfs rw,exec,suid,auto 1 2
90 | ```
91 |
92 | Más información sobre fstab [aquí](https://wiki.archlinux.org/index.php/Fstab_(Espa%C3%B1ol))
93 |
94 |
95 | Una vez añadido en el fichero /etc/fstab podemos utilizar el comando `mount -a` para actualizar la lista que hayamos añadido.
96 |
97 | **Ejercicio**: Montar una imagen iso
98 |
99 | ```console
100 | mount /root/install.iso -o ro,loop /media
101 | ```
102 |
103 | `ro` - para especificar que es de solo lectura.
104 | `loop` - para emular que es un cdroom
105 |
106 |
107 | ## 104.4 Eliminado
108 |
109 |
110 |
111 | ## 104.5 Administración de los permisos y los propietarios de los archivos
112 |
113 | `chow`: cambia el usuario propietario de un fichero o directorio.
114 |
115 | `chgrp`: cambiar el grupo propietario de un fichero o directorio.
116 |
117 | `chmod`: cambia el modo de acceso a los ficheros o directorios con la simbología 777 o 775.
118 |
119 | - *Primer dígito*: permisos para propietario
120 | - *Segundo dígito*: permisos para grupo.
121 | - *Tercer dígito*: Permisos para otros.
122 |
123 |
124 | Lectura: 4
125 | Escritura: 2
126 | Ejecución: 1
127 |
128 | 0: Sin permisos
129 | 1: Ejecución
130 | 2: Escritura
131 | 3: Lectura y escritura
132 | 4: Lectura
133 | 5: Lectura y ejecución
134 | 6: Lectura y escritura
135 | 7: Lectura, escritura y ejecución
136 |
137 | Si queremos establecer un permiso de escritura usaremos el 6 (4 + 2 = Lectura + Escritura)
138 |
139 | Si queremos que un usuario pueda ejecutar usaremos el 7 (4 + 2 + 1= Lectura + Escritura + Ejecución)
140 |
141 | Los tipos de permisos más comunes, o su combinación, son los siguiente:
142 |
143 | 666 ( RW / RW / RW) |
144 | ---------|
145 | Esta opción permite que todos los usuarios puedan leer y escribir en un archivo. |
146 |
147 | 777 ( RWX / RWX /RWX) |
148 | ---------------|
149 | Esta opción permite que todos los usuarios puedan leer y escribir en un archivo. |
150 |
151 | 777 ( RWX / RWX /RWX)|
152 | ---------------|
153 | Esta opción permite que todos los usuarios puedan leer, escribir y ejecutar en el archivo o carpeta. |
154 |
155 |
156 | 755 (RWX / RW / RW)|
157 | ---------------|
158 | Con este permiso el propietario del archivo puede leer, escribir y ejecutar en el archivo mientras que los demás leer y escribir en el archivo mas no ejecutar.|
159 |
160 |
161 | 644 (RW / R / R) |
162 | ---------------|
163 | Con este permiso el propietario puede leer y escribir en el archivo mientras los demás solo pueden leer.|
164 |
165 | 700 (RWX /---)|
166 | ---------------|
167 | Con este permiso el propietario tiene el control total del archivo mientras que los demás usuarios no tendrán acceso de ningún tipo al archivo.|
168 |
169 |
170 | ------
171 |
172 | Ejercicio: Dar permisos de lectura y escritura recursivamente a una carpeta
173 |
174 |
175 | ```console
176 | sudo chmod 666 -R /opt/myapp/*
177 | ```
178 |
179 | ### Permisos especiales
180 |
181 | Unix nos ofrece a parte una serie de permisos especiales, se trata de los bits de permanencia (1000), SGID (2000) y SUID (4000).
182 |
183 | **Sticky bit**
184 | El bit sticky bit se activa sobre un fichero o directorio añadiendo 1000
185 |
186 | Se utiliza para permitir que cualquiera pueda escribir y modificar archivo o directorio, pero que solo su propietario pueda eliminarlo, por ejemplo /tmp puede ser utilizado por todos pero solo el propietario puede eliminarlo.
187 |
188 | Al directorio con el Sticky Bit aplicado se le agrega la `t` al final del descriptor de permisos.
189 |
190 | ```console
191 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~/test_command chmod 1755 sticky.md
192 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~/test_command la
193 | total 132K
194 | -rwxr-xr-t 1 sergio sergio 0 may 22 10:54 sticky.md
195 | ```
196 | También se puede añadir este permiso de la siguiente forma;
197 |
198 | ```console
199 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~/test_command chmod +t sticky.md
200 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~/test_command la
201 | total 132K
202 | -rwxr-xr-t 1 sergio sergio 0 may 22 10:54 sticky.md
203 | ```
204 |
205 | **SUID** - Special User ID
206 | El bit de SUID o setuid se activa sobre un fichero añadiéndole 4000
207 |
208 | El bit SUID activado sobre un fichero indica que todo aquél que ejecute el archivo va a tener durante la ejecución los mismos privilegios que quién lo creó.
209 |
210 |
211 | **SGID** - Special Group ID
212 | Cuando un directorio tenga activado el bit de SGID(2) todos los permisos que se creen en el perteneceran al grupo del propietario sin importar cual sea el grupo del usuario que cree el directorio.
213 |
214 |
215 | El uso que mas se utiliza es para que un fichero o dictorio pueda ser utilizado por todos pero solo el administrador pueda eliminarlo. En este caso se indica al sistema operativo que, aunque los permisos `normales' digan que cualquier usuario pueda crear y eliminar ficheros (por ejemplo, un 777 octal), sólo el propietario de cierto archivo y el administrador pueden borrar un archivo guardado en un directorio con estas características. Se utiliza principalmente en directorios del sistema de ficheros en los que interesa que todos puedan escribir pero que no todos puedan borrar los datos escritos, como /tmp/ o /var/tmp/
216 |
217 |
218 |
219 | ## 104.6 Crear y cambiar enlaces duros y simbólicos (Hard link and symbolic link)
220 |
221 | La diferencia entre un enlace simbólico (soft) y uno hard, es que el hard no crea un nuevo inodo y el soft si. El hard es el mismo dato en el disco duro.
222 |
223 | Los hard links son especialmente importantes para ficheros 'permanentes' que por ejemplo un fichero que tiene que ser solamente accesible por el administrador lincado a un fichero que nunca debe ser modificado.
224 |
225 |
226 | Los enlaces simbólicos `ln -s` permiten cruzar sistemas de ficheros, sin embargo los hard links no. Esto ocurre porque un enlace simbólico consiste en crear un nuevo fichero que apunta a otro, sin embar un enlace duro lo que hace es crear un puntero, y el espacio ocupado en el disco es el mismo.
227 |
228 | Para localizar los hard symbolik links:
229 |
230 | 1. Buscamos el numero del inodo del fichero
231 | 2. Buscamos los ficheros que existen con ese numero de inodo
232 |
233 |
234 | ```console
235 | [cloud_user@ip-10-0-0-142 ~]$ ls -i docs/services
236 | 25165940 docs/services
237 | [cloud_user@ip-10-0-0-142 ~]$ find . -inum 25165940
238 | ./docs/services
239 | ./services
240 | [cloud_user@ip-10-0-0-142 ~]$ ls -i services
241 | 25165940 services
242 | ```
243 |
244 | ## 104.7 Encontrar archivos de sistema y ubicar archivos en el lugar correspondiente
245 |
246 | 
247 |
248 | [Pathname](http://www.pathname.com/fhs/)
249 |
250 | `locate`: busca en la base de datos local ficheros y carpetas que concuerden con el criterio de búsqueda.
251 |
252 | `updatedb`: actualiza la base de datos del comando locate.
253 |
254 | ```console
255 | [sergio@hostingsoriano ~]$ locate updatedb
256 | /etc/updatedb.conf
257 | /usr/bin/updatedb
258 | /usr/share/man/man5/updatedb.conf.5.gz
259 | /usr/share/man/man8/updatedb.8.gz
260 | ```
261 |
262 | `whereis`: este comando localiza los archivos binarios, código fuente y paginas del manual de un comando.
263 |
264 | ```console
265 | [sergio@hostingsoriano ~]$ whereis top
266 | top: /usr/bin/top /usr/share/man/man1/top.1.gz
267 | [sergio@hostingsoriano ~]$ whereis nginx
268 | nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz /usr/share/man/man3/nginx.3pm.gz
269 | [sergio@hostingsoriano ~]$
270 | ```
271 |
272 |
273 |
--------------------------------------------------------------------------------
/docs/102-500/107:Tareas-administrativas.md:
--------------------------------------------------------------------------------
1 | # 107: Tareas Administrativas
2 |
3 | ## 107.1 Administrar cuentas de usuario y de grupo y los archivos de sistema relacionados con ellas
4 |
5 | ### Añadir y eliminar usuarios
6 |
7 | `useradd`
8 |
9 | ```console
10 | sudo useradd -m name
11 | ```
12 |
13 | Usamos `-m` para crear el home del usuario.
14 | En algunas distribuciones no es necesario utilizar -m, ya que crean automáticamente la carpeta.
15 |
16 | Creamos un usuario que utilice una shell diferente.
17 |
18 | ```console
19 | sudo useradd -m -c "Juanjo Garcia" -s /bin/tcsh \ juanjo
20 | ```
21 |
22 | Podemos comprobar la shell con `echo $SHELL` que nos devolverá el valor de la shell que el usuario esta utilizando.
23 |
24 | `passwd` - comando para asignar un password al usuario.
25 |
26 | Asignamos un password temporal con `-e` al usuario juanto
27 |
28 | ```
29 | sudo passwd -e juanjo
30 | ```
31 |
32 | `userdel` - comando para eliminar un usuario.
33 |
34 | Elimina el usuario y borra las carpetas de home.
35 |
36 | ```
37 | userdel -r juanjo
38 | ```
39 |
40 | ---
41 |
42 | ### Añadir y eliminar grupos
43 |
44 | `groups` - comando para conocer los grupos primarios y secundarios de los que forma parte el usuario.
45 |
46 | `groupadd` - añade un nuevo grupo.
47 |
48 | Creamos un grupo legal y creamos un usuario y lo añadimos a ese grupo.
49 |
50 | ```s
51 | sudo groupadd legal
52 | sudo useradd -G legal -m -c "Mario Gonzalez" \ mgonzalez
53 | ```
54 |
55 | `groupdel` - comando para borrar un grupo.
56 |
57 | ### Usuarios y configuración de ficheros de grupo
58 |
59 | `/etc/passwd` - fichero que contiene las cuentas de usuario del sistema.
60 |
61 | Las columnas se separan por el carácter `:` y cada una de las columnas significa:
62 |
63 | 1. Nombre de usuario
64 | 2. X password encriptado
65 | 3. User id (las cuentas por encima de un id 1000 son cuentas de usuario "normales")
66 | 4. Primary Group id
67 | 5 .User id info
68 | 5. Directorio del home de usuario
69 | 6. bash que utiliza el usuario (si no ha iniciado sesion aparecera nologin)
70 |
71 | `/etc/shadow` - fichero que contiene las password encriptadas de los usuarios. Justo después del nombre de usuario aparece el tipo de cifrado que utiliza la contraseña.
72 |
73 | ```
74 | $1$ = MD5
75 | $2a$,$2y$ = Blowfish
76 | $5$ = SHA-256
77 | $6$ = SHA-512
78 | ```
79 |
80 | Las columnas que podemos encontrar en el fichero `/etc/shadow` son las siguientes:
81 |
82 | 1. Nombre usuario
83 | 2. Algoritmo de cifrado, y hash.
84 | 3. Tiempo desde 1 enero de 1970.
85 | 4. Los días que han pasado desde que el usuario a cambiado el password.
86 | 5. El tiempo de días que es valido el password.
87 | 6. Los días que sera avisado antes de que expire el password.
88 | 7. empty
89 | 8. empty.
90 |
91 | Si una cuenta tiene en la segunda columna los caracteres de `!!` significa que esta bloqueada.
92 |
93 | `/etc/group` - fichero que contiene información sobre los grupos de usuarios.
94 |
95 | 1. Nombre del grupo
96 | 2. Password del grupo.
97 | 3. ID del grupo.
98 | 4. los usuarios que forman parte del grupo.
99 |
100 | ---
101 |
102 | ### Modificaciones de usuarios y grupos
103 |
104 | `usermod` - este comando se utiliza para modificar configuraciones de usuarios ya existentes.
105 |
106 | `change` - este comando puede listar y modificar los parámetros de expiración de password y expiración de la cuenta de usuario.
107 |
108 | `groupmod` - modifica los atributos de un grupos, como el nombre o ID.
109 |
110 | `getent passwd sergio` - muestra información de las bases de datos del sistema. [Enlace](https://www.unixtutorial.org/commands/getent)
111 |
112 | ---
113 |
114 | #### Ejercicios
115 |
116 | Añadir un usuario a un grupo ya creado.
117 |
118 | `usermod -a -G nombregrupo nombreusuario`
119 |
120 | Bloquear una cuenta
121 |
122 | `usermod -L nombresusuario`
123 |
124 | Creamos una cuenta y la bloqueamos, podemos ver como al pricipio de la ultima linea, aparece un simbolo de exclamación al consultar el fichero shadow indicandonos que la cuenta ha sido bloqueada.
125 |
126 | ```console
127 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~ sudo getent shadow test
128 | test:$6$HPi6/BE7$a22bOjrx8EbVgiEdl8IMHZwSeabQX568ydN88oD3pc301BkfFgqIDClkWPS2ihjVOdL8rm./pH5M4XkYXSLik.:18055:0:99999:7:::
129 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~ usermod -L test
130 | usermod: Permission denied.
131 | usermod: cannot lock /etc/passwd; try again later.
132 | ✘ sergio@Lenovo-ideapad-710S-Plus-13IKB ~ sudo usermod -L test
133 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~ sudo getent shadow test
134 | test:!$6$HPi6/BE7$a22bOjrx8EbVgiEdl8IMHZwSeabQX568ydN88oD3pc301BkfFgqIDClkWPS2ihjVOdL8rm./pH5M4XkYXSLik.:18055:0:99999:7:::
135 | ```
136 |
137 | Para desbloquearla utilizamos.
138 |
139 | `usermod -U test`
140 |
141 | Creamos una cuenta del sistema y modificamos su shell y su carpeta de home.
142 |
143 | ```
144 | useradd -r projectx
145 | usermod -s /sbin/nologin
146 | userdmod -d /opt/projectx projectx
147 | ```
148 |
149 | En la ultima linea indicamos la nueva ruta del home y el usuario que queremos modificar.
150 |
151 | Por último, asignamos como propietario a la carpeta:
152 |
153 | ```console
154 | sudo chmod projext:projectx /opt/projectx
155 | ```
156 |
157 | ## 107.2 Automatizar tareas administrativas del sistema mediante la programación de trabajos
158 |
159 | ### CRON
160 |
161 | Lo utilizamos para programar tareas que van a ser ejecutadas en periodos de tiempo que nosotros decidamos.
162 |
163 | `contrab -e` - para modificar el fichero de cron.
164 |
165 | `/etc/crontab` - fichero con los trabajos programados del sistemas
166 |
167 | `/etc/cron.d/` - directorio que contiene los trabajos progrmados del sistema. se crea un fichero por cada tarea añadida.
168 |
169 | 1. Minutos
170 | 2. Horas
171 | 3. Dia del mes (podemos usar \* para indicar que no importa el dia que sea)
172 | 4. Mes (\* si no nos importa el mes).
173 | 5. Dia de la semana(sat, para que se ejecute los sábados).
174 | 6. Username(el usuario que ejecuta la tarea).
175 | 7. La tarea que queremos que ejecute.
176 |
177 | [Ejemplos](http://researchhubs.com/post/computing/linux-cmd/awesome-crontab-job-examples.html)
178 |
179 | Los ficheros de las configuracion de cada uno de los usuarios son creados en:
180 |
181 | `sudo cat /var/spool/cron/crontabs/sergio`
182 |
183 | Podemos utilizar `crontab -l` para ver las tareas programadas del usuario.
184 |
185 | Para borrar el contenido el fichero de cron usamos el comando `crontab -r`.
186 |
187 | Si queremos borrar el de un usuario:
188 |
189 | `crontab -r -u sergio`
190 |
191 | Podemos bloquear a un usuario para que no pueda crear cron añadiendolo al fichero `/etc/cron.denny`
192 |
193 | ### At
194 |
195 | Se utiliza para ejecutar una tarea en un determinado momento, al contrario de cron que sirve para programar de una forma repetitiva.
196 |
197 | > Por defecto no suele venir instalada en las distribuciones Linux
198 |
199 | Programamos una tarea para que se ejecute dentro de 5 minutos para que cre un fichero llamado notes.txt con el contenido pasado con echo:
200 |
201 | `atq` - sirve para ver las tareas programadas.
202 |
203 | ```
204 | at now + 5 minutes
205 | warning: commands will be executed using /bin/sh
206 | at> echo "Notas para luego:" > /home/sergio/notes.txt
207 | at>
208 | job 1 at Sat Jun 8 16:16:00 2019
209 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~ atq
210 | 1 Sat Jun 8 16:16:00 2019 a sergio
211 | ```
212 |
213 | `atrm` - sirve para eliminar una tarea programada, indicando el numero.
214 |
215 | Programar una tarea que ejecute un script en un determinado momento.
216 |
217 | ```
218 | at -f /root/program.sh 10:15 PM Jul 8
219 | ```
220 |
221 | Es posible configurar que usuarios pueden utilizar la herramienta `at`, añadiendolos al fichero `at.allow` o denegandolos en `at.deny`.
222 |
223 | ### Systemd Timer Unit Files
224 |
225 | Es un timer controlado por systemd, utilizado en los nuevos sistemas para controlar las tareas repetitivas.
226 |
227 | Cada fichero **.timer** tiene que tiener un fichero **.service**, por ejemplo si tienes un fichero foo.timer tienes que tener un fichero foo.service.
228 |
229 | Hay dos tipos de timer:
230 |
231 | - Monotonic - OnBootSex=, OnActiveSec=
232 | - Realtime - OnCalendar
233 |
234 | Se utiliza mas por que la sintaxis es mas sencilla.
235 |
236 | Timer unit file:
237 |
238 | - [Unit]
239 | - [Timer]
240 | - [Install]
241 |
242 | Manuales:
243 |
244 | - man 5 systemd.timer
245 | - man 7 systemd.timer
246 |
247 | Para ver los timers que tenemos configurado en el sistema y los servicios que tiene asociales:
248 |
249 | `systemctl list-timers --all`
250 |
251 | ```console
252 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~ systemctl list-timers --all
253 | NEXT LEFT LAST PASSED UNIT ACTIVATES
254 | Sat 2019-06-08 17:01:21 CEST 13min left Sat 2019-06-08 16:02:27 CEST 45min ago anacron.timer anacron.service
255 | Sat 2019-06-08 17:09:00 CEST 21min left Sat 2019-06-08 16:39:09 CEST 8min ago phpsessionclean.timer phpsessionclean.service
256 | Sat 2019-06-08 20:29:41 CEST 3h 42min left Sat 2019-06-08 09:32:35 CEST 7h ago apt-daily.timer apt-daily.service
257 | Sun 2019-06-09 01:30:57 CEST 8h left Fri 2019-06-07 19:42:44 CEST 21h ago motd-news.timer motd-news.service
258 | Sun 2019-06-09 06:50:37 CEST 14h left Sat 2019-06-08 09:32:35 CEST 7h ago apt-daily-upgrade.timer apt-daily-upgrade.service
259 | Sun 2019-06-09 12:29:09 CEST 19h left Fri 2019-06-07 19:27:44 CEST 21h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
260 | Mon 2019-06-10 00:00:00 CEST 1 day 7h left Mon 2019-06-03 00:27:52 CEST 5 days ago fstrim.timer fstrim.service
261 | n/a n/a n/a n/a snapd.snap-repair.timer snapd.snap-repair.service
262 | n/a n/a Fri 2019-06-07 19:13:37 CEST 21h ago ureadahead-stop.timer ureadahead-stop.service
263 | ```
264 |
265 | `systemctl cat anacron.timer`
266 |
267 | Podemos ver la descripción, el momento de ejecución y el apartado install.
268 |
269 | ```console
270 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~ systemctl cat anacron.timer
271 | # /lib/systemd/system/anacron.timer
272 | [Unit]
273 | Description=Trigger anacron every hour
274 |
275 | [Timer]
276 | OnCalendar=hourly
277 | RandomizedDelaySec=5m
278 | Persistent=true
279 |
280 | [Install]
281 | WantedBy=timers.target
282 | ```
283 |
284 | `system-ctl cat anacron.service`
285 |
286 | También podemos crear un timer que no requere un fichero `.service` ejecutado:
287 |
288 | `systemd-run --on-active=1m /bin/touch /home/sergio/hello`
289 |
290 | ## 107.3 Localización e internacionalización
291 |
292 | ### Trabajando con la localizacion del sistema
293 |
294 | `locale` - comando para mostrar la información de configuracion del lenguaje del sistema.
295 |
296 | `localectl` - comando para configurar el idioma por defecto y el lenguaje del sistema.
297 |
298 | Podemos mostrar la lista de idiomas con:
299 |
300 | `localectl list-locales`
301 |
302 | `iconv` - utilidad usada para convertir ficheros de un tipo de codificación a otro.
303 |
304 | > UTF-8 es el sistema de caracetes codificados más utilizado.
305 |
306 | Para cambiar el idioma, podemos cambiar la variable entorno `LANG`
307 |
308 | `LANG=pl_PL.utf8`
309 |
310 | `LANG=C`
311 |
312 | ### Hora y fecha en los sitemas Linux
313 |
314 | `date` - muestra información sobre la fecha actual. Podemos utilizar valores para formatear la salida por pantalla en diferentes formatos. Es intereante conocer formatear la salida de la fecha a la hora de utilizar scripts.
315 |
316 | ```console
317 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~ date +%m/%d/%Y
318 | 06/08/2019
319 | ```
320 |
321 | `timedatectl` - muestra la hora actual del sistema y la del hardware (RTC clock).
322 |
323 | Mostramos la lista de horarios disponibles y cabiamos a "Antartica/davis".
324 |
325 | ```
326 | timedatectl list-timezones
327 | timedatectl set-timezone "Antartica/Davis"
328 | ```
329 |
330 | `tzselect` - comando para seleccionar por menu la zona horaria que queremos.
331 |
332 | `/etc/localtime` - fichero para distribuciones REDHAT.
333 | `/etc/timezone` - fichero para distribuciones DEBIAN.
334 | `/usr/share/zoneinfo` - directorio que contiene todas las zonas dispoibles que el equipo puede configurar.
335 |
--------------------------------------------------------------------------------
/docs/101-500/102:Instalacion-de-Linux-y-gestion-de-paquetes.md:
--------------------------------------------------------------------------------
1 |
2 | - [Tema 102: Instalación de Linux y gestión de paquetes](#tema-102-instalaci%C3%B3n-de-linux-y-gesti%C3%B3n-de-paquetes)
3 | - [102.1 Diseño del esquema de particionado del disco](#1021-dise%C3%B1o-del-esquema-de-particionado-del-disco)
4 | - [LVM - Logical volumen manager](#lvm---logical-volumen-manager)
5 | - [102.2 Instalar un gestor de arranque](#1022-instalar-un-gestor-de-arranque)
6 | - [Como instalar grub](#como-instalar-grub)
7 | - [GRUB2](#grub2)
8 | - [Master Boot Record](#master-boot-record)
9 | - [Guid Partition Table](#guid-partition-table)
10 | - [102.3 Gestión de librerías compartidas](#1023-gesti%C3%B3n-de-librer%C3%ADas-compartidas)
11 | - [102.4 Gestión de paquetes Debian](#1024-gesti%C3%B3n-de-paquetes-debian)
12 | - [Usando debian package tool(dpkg)](#usando-debian-package-tooldpkg)
13 | - [102.5 Gestión de paquetes RPM y YUM](#1025-gesti%C3%B3n-de-paquetes-rpm-y-yum)
14 | - [YUM](#yum)
15 | - [RPM](#rpm)
16 | - [102.6 Linux como sistema virtualizado](#1026-linux-como-sistema-virtualizado)
17 | # Tema 102: Instalación de Linux y gestión de paquetes
18 |
19 | - [ ] 102.1 Diseño del esquema de particionado del disco duro duro
20 | - [ ] 102.2 Instalar un gestor de arranque
21 | - [ ] 102.3 Gestión de librerías compartidas
22 | - [ ] 102.4 Gestión de paquetes Debian
23 | - [ ] 102.5 Gestión de paquetes RPM y YUM
24 | - [ ] 102.6 Linux como sistema virtualizado
25 |
26 | ## 102.1 Diseño del esquema de particionado del disco
27 |
28 | ### LVM - Logical volumen manager
29 |
30 | Nos permite crear grupos de discos o particiones que pueden ser montadas en un o varios sistemas de ficheros(fylesystems).
31 |
32 | - Se puede utilizar para montar cualquier punto EXCEPTO /boot.
33 | - Nos ofrece la flexibilidad de redimensionar los volúmenes ya creados.
34 | - Podemos crear Snapshoots de los volúmenes lógicos.
35 |
36 | Ejemplo de las capas de un grupo LVM.
37 |
38 | 
39 |
40 | `psv`: Lista los volumenes fisicos que existen en un gru po LVM.
41 |
42 | `vgs`: list los grupos de volumenes que hay un en grupo LVM.
43 |
44 | `lvs`: Lista los volumenes *logicos* que hay en un grupo LVM.
45 |
46 |
47 | ## 102.2 Instalar un gestor de arranque
48 |
49 | Legacy Grub
50 |
51 | GRUB es el antiguo gestor de arranque y significa **Grand Unified Boot Loader**, esta instalado sobre el MBR.
52 |
53 | En este tipo de gestor de arranque el funcionamiento es el siguiente:
54 |
55 | - Paso 1: La bios arranca y lee información de la `boot.img` (los primeros 512 bytes del MBR)
56 | - Paso 1.5: Se lee la información del fichero `core.img`.
57 | - Paso 2: El sistema lee el menu de GRUB del fichero `/boot/grub/grub.conf - menu.lst o device.map
58 |
59 | Ejemplo del fichero grub.conf
60 |
61 | ```
62 | default=0 # indica que
63 | timeout=10 #los segundos que aparecera el menu de grub
64 | splashimage=(hd0,0)/grub/splash.xpm.gz #
65 |
66 | # section to load Linux
67 | title Red Hat Enterprise Linux (2.4.21-1.ent) #El kernel que va arrancar por defecto (default=0)
68 | root (hd0,0) #el disco que va ha utlizar como boot [title 0]
69 | kernel /vmlinuz-2.4.21-1 ro root=/dev/sda2
70 | initrd /initrd-2.4.21-1.img #la imagen del disco de RAM
71 |
72 | # section to load Windows
73 | title Windows #default = 1 en caso de querer arrancar por defecto este disco
74 | rootnoverify (hd0,0)
75 | chainloader +1
76 | ```
77 |
78 |
79 | ### Como instalar grub
80 |
81 | Si queremos buscar en que dispositivo esta el fichero de arraque utilizamos `findmnt /boot`
82 |
83 | Para instalar grub en un disposito, por ejemplo un disco duro utiliamos el comando `grub-install [device]`
84 |
85 | Si estuviera en /dev/vda1 usamos `grub-install /dev/vda`
86 |
87 | >Normalmente este comando se ejecuta con un pendrive, nunca con el sistema arrancado.
88 |
89 | ---
90 |
91 | ## GRUB2
92 |
93 | Es la segunda generación para el arranque del sistema.
94 |
95 | Es importante entender la diferencia entre MBR y GPT.
96 |
97 | #### Master Boot Record
98 |
99 | - Soporta un máximo de 26 particiones (4 particiones, con una particion extendida hasta 23 particiones lógicas)
100 | - Las particiones solo soportan 2TB.
101 |
102 | #### Guid Partition Table
103 |
104 | - Soporta 128 particiones
105 | - Las particiones soporta hasta un ZB.
106 | - Necesita una BIOS con UEFI.
107 | - Previene que arranquen sistemas operativos no autorizados.
108 | - Requiere sistemas de 64bits.
109 | - Remplaza la tradicional BIOS aunque puede actuar en modo Legacy BIOS.
110 |
111 | **¿Cómo arranca un sistema con GRUP2 con GPT utilizando UEFI BIOS?**
112 | - Paso 1: Busca el MBT en los primeros 521 bytes usando la imagen `bios.img`
113 | - GTP header - Particion Entry Array.
114 | - Paso 1.5: Normalmente sectores vacios `boot.img`
115 | - `/boot/efi` con el sistema de ficheros **vfat** o **FAT32**
116 | - Paso 2: Lee el contenido de `/boot/grub2` grubenv y themes
117 |
118 | Ficheros que podemos encontrar en la caprta de arranque en un sistema ubuntu
119 |
120 | ```
121 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~ sudo ls /boot/efi/EFI/ubuntu
122 | BOOTX64.CSV fw fwupx64.efi grub.cfg grubx64.efi mmx64.efi shimx64.efi
123 | ```
124 |
125 | >Distribuciones Red Hat = grub2-\
126 |
127 | >Distribuciones debian = grub-\
128 |
129 |
130 | `grub2-editenv list` - Muestra la entrada por defecnto del fichero de configuración.
131 |
132 | `grub2-mkconfig` - crea o actualiza el fichero de configuracion basado en la entrada de `/etc/default/grub`.
133 |
134 | `update-grub` - comando que puede ser utilizado para actualizar la configuracion de GRUB2 despues de hacer cambios en `/etc/default/grub`
135 | .(En sistemas Debian)
136 |
137 | Cambiamos el fichero de grub
138 |
139 | >nano /etc/default/grub
140 |
141 | Actualzamos el fichero de grub
142 |
143 | >sudo update-grub
144 |
145 | ---
146 |
147 |
148 | Interacting with the Boot Loader
149 |
150 |
151 |
152 | ## 102.3 Gestión de librerías compartidas
153 |
154 |
155 |
156 | ## 102.4 Gestión de paquetes Debian
157 |
158 | `apt` - instala aplicaciones y dependencias, desisntala y actualiza aplicaciones.
159 |
160 | Lee los repositorios del fichero `/etc/apt/source.list`.
161 |
162 | `sudo apt-get update` - Actualiza el cache de los paquetes que pueden ser actualizados(pero no los instala).
163 |
164 | `sudo apt-get upgrade` - Instala las actualizaciones de los paquetes disponibles que ha encontrado con el comando anterior.
165 |
166 | `sudo apt-get install` - Instala el paquete indicando el nombre.
167 |
168 |
169 | `sudo apt-get remove chromium-browser` - desinstala el paquete del sistema, pero no elimina los ficheros de configuración que pueda haber dejado.
170 |
171 | `sudo apt autoremove` - sirve para eliminar todas los paquetes que dependen del paquete que hemos desinstalado.
172 |
173 | `sudo apt-get purge chromium-browser` - elimina todos los paquetes del sistema y los ficheros asociados a su configuración.
174 |
175 | `sudo apt-get dist-upgrade` - actualiza **todos** los paquetes del sistema a la siguiente release de la distribución. Incluido la instalacion de nuevos paquetes.(a diferencia de apt-get upgrade que solo instala las actualizaciones).
176 |
177 | `apt-get download` - descarga el paquete pero no lo instala.
178 |
179 | `sudo apt-cache search apache` - busca en el cache local si existe el paquete nombrado.
180 |
181 | `sudo apt-cache show libapache2-mod-bw` - muestra toda la información del paquete nombrado.
182 |
183 | `sudo apt-cache showpkg libapache2-mod-bw` - muestra mas información sobre de donde viene el paquete.
184 |
185 | ----
186 |
187 | ### Usando debian package tool(dpkg)
188 |
189 | Paquetes .deb que contienen:
190 | - La aplicación o utilidad.
191 | - Archivos de configuración por defecto
192 | - Cómo y donde instalar los ficheros que vienen en el paquete.
193 | - Lista de las dependecias que el paquete requiere. (las dependencias necesitan estar instaladas, dpkg no las instala.)
194 |
195 | `dpkg --info` - nos muestra información sobre el paquete nombrado.
196 |
197 | `dpkg --status nano` - muestra información pero menos detallada.(**de un paquete ya instalado**). lo podemos usar para comprobar un paquete instalado
198 |
199 | ```
200 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~/Downloads dpkg --info nginx_1.14.0-0ubuntu1.2_all.deb
201 | new Debian package, version 2.0.
202 | size 3596 bytes: control archive=764 bytes.
203 | 990 bytes, 17 lines control
204 | 64 bytes, 1 lines md5sums
205 | Package: nginx
206 | Version: 1.14.0-0ubuntu1.2
207 | Architecture: all
208 | Maintainer: Ubuntu Developers
209 | Installed-Size: 42
210 | Depends: nginx-core (<< 1.14.0-0ubuntu1.2.1~) | nginx-full (<< 1.14.0-0ubuntu1.2.1~) | nginx-light (<< 1.14.0-0ubuntu1.2.1~) | nginx-extras (<< 1.14.0-0ubuntu1.2.1~), nginx-core (>= 1.14.0-0ubuntu1.2) | nginx-full (>= 1.14.0-0ubuntu1.2) | nginx-light (>= 1.14.0-0ubuntu1.2) | nginx-extras (>= 1.14.0-0ubuntu1.2)
211 | Section: httpd
212 | Priority: optional
213 | Homepage: http://nginx.net
214 | Description: small, powerful, scalable web/proxy server
215 | Nginx ("engine X") is a high-performance web and reverse proxy server
216 | created by Igor Sysoev. It can be used both as a standalone web server
217 | and as a proxy to reduce the load on back-end HTTP or mail servers.
218 | .
219 | This is a dependency package to install either nginx-full (by default),
220 | nginx-light or nginx-extras.
221 | Original-Maintainer: Debian Nginx Maintainers
222 | ```
223 |
224 | `dpkg -l vagrant` - muestra la información disponible del paquete instalado.
225 |
226 | ```
227 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~/Downloads dpkg -l vagrant
228 | Desired=Unknown/Install/Remove/Purge/Hold
229 | | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
230 | |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
231 | ||/ Name Version Architecture Description
232 | +++-==============-============-============-=================================
233 | ii vagrant 1:2.2.4 amd64 no description given
234 | ```
235 |
236 | `sudo dpkg -i nginx_1.14.0-0ubuntu1.2_all.deb` - instala un paquete deb.
237 |
238 | `dpkg --contents nginx_1.14.0-0ubuntu1.2_all.deb` - Muestra el contenido de un paquete `deb`
239 |
240 | ```
241 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~/Downloads dpkg --contents nginx_1.14.0-0ubuntu1.2_all.deb
242 | drwxr-xr-x root/root 0 2018-11-06 19:54 ./
243 | drwxr-xr-x root/root 0 2018-11-06 19:54 ./usr/
244 | drwxr-xr-x root/root 0 2018-11-06 19:54 ./usr/share/
245 | drwxr-xr-x root/root 0 2018-11-06 19:54 ./usr/share/doc/
246 | drwxr-xr-x root/root 0 2018-11-06 19:54 ./usr/share/doc/nginx/
247 | -rw-r--r-- root/root 8748 2018-04-06 07:31 ./usr/share/doc/nginx/copyright
248 | lrwxrwxrwx root/root 0 2018-11-06 19:54 ./usr/share/doc/nginx/changelog.Debian.gz -> ../nginx-core/changelog.Debian.gz
249 | ```
250 |
251 | `dpkg -L vagrant` - nos muestra todos los ficheros que fueron instalados con el paquete.
252 |
253 | `sudo dpkg -r htop` - desinstala el paquete htop. (no elimina los ficheros de configuración).
254 |
255 | `sudo dpkg -P htop` - elimina el paquete y todos los ficheros de configuración.
256 |
257 | `dpkg -S nano` - busca en la base de datos de los paquetes y muestra cualquier mencion que incluya el nombre del paquete introducido.
258 |
259 | `sudo dpkg reconfigure` - sirve para re lanzar el proceso de configuración de una aplicación ya instalada, por ejemplo un servidor web o una base de datos.
260 |
261 | ```
262 | sudo dpkg-reconfigure console-setup
263 | ```
264 |
265 | ----
266 |
267 | ## 102.5 Gestión de paquetes RPM y YUM
268 |
269 | ### YUM
270 | Por ejemplo, imaginemos que al instalar un paquete RPM, nos encontramos con el problema de que requiere de dependencias que no tenemos instaladas.
271 |
272 | Para saber la dependencia de un paquete. Por ejemplo:
273 |
274 |
275 | ```
276 | console
277 | [cloud_user@ip-10-0-1-94 Downloads]$ yum provides libmozjs185*
278 | Loaded plugins: fastestmirror
279 | Loading mirror speeds from cached hostfile
280 | * base: mirrors.advancedhosters.com
281 | * extras: mirrors.advancedhosters.com
282 | * updates: mirrors.advancedhosters.com
283 | 1:js-1.8.5-20.el7.i686 : JavaScript interpreter and libraries
284 | Repo : base
285 | Matched from:
286 | Provides : libmozjs185.so.1.0
287 |
288 |
289 |
290 | 1:js-1.8.5-20.el7.x86_64 : JavaScript interpreter and libraries
291 | Repo : base
292 | Matched from:
293 | Provides : libmozjs185.so.1.0()(64bit)
294 |
295 |
296 |
297 | 1:js-1.8.5-20.el7.x86_64 : JavaScript interpreter and libraries
298 | Repo : @base
299 | Matched from:
300 | Provides : libmozjs185.so.1.0()(64bit)
301 | ```
302 |
303 | identificamos que el paquete principal es Javascript.
304 |
305 | >1:js-1.8.5-20.el7.x86_64 : JavaScript interpreter and libraries
306 |
307 | ### RPM
308 |
309 |
310 | ## 102.6 Linux como sistema virtualizado
311 |
--------------------------------------------------------------------------------
/docs/102-500/108:Servicios-esenciales-del-sistema.md:
--------------------------------------------------------------------------------
1 | # Tema 108: Servicios esenciales del sistema
2 |
3 | ## 108.1 Mantener la hora del sistema
4 |
5 | Tenemos que saber como configurar nuestro equipo para recibir la hora de un servidor de NTP.
6 |
7 | ### Trabajando con servidores remotos de tiempo(NTP)
8 |
9 | **NTP** - Network Time Protocol
10 |
11 | :Capas del protocolo
12 | Stratum 0
13 | Stratum 1
14 | Stratum 2
15 |
16 | `ntpd` - es el demonio(servicio) que comprueba contra el servidor de ntp para comprobar si la hora es correcta.
17 |
18 | `ntpdate` - comando para recibir la hora de un servidor de ntp especifico, es necesario que el servicio no este corriendo.
19 |
20 | `/etc/ntp.conf/` - fichero de configuracion para el demonio de ntpd.
21 |
22 | `ntpq` - comando para realizar una query al demonio **ntpd**.
23 |
24 | `timedatectl` - comando para comprobar la configuración del servidor ntp
25 |
26 | `chronyd` - es el demonio moderno que los equipos que utilizan **systemd**.
27 |
28 | `/etc/chrony/chrony.conf` - fichero de configuración al igual que el antiguo fichero `ntp.conf`.
29 |
30 | `chronyc` - comando para consultar la información del demonio **chronyd**.
31 |
32 | ## 108.2 Registros del sistema
33 |
34 | ## Sistemas de Logs antiguaos
35 |
36 | `/var/log/dmesg` - logs relacionadios con el hardware, consultar en caso de tener problemas con los dispositivos conectados. Se crea cada vez que el sistema arranca.(Linux kernel boot messages).
37 |
38 | `/var/log/messages` - log que recoje los problemas con los servicios.
39 |
40 | `/var/log/secure` - contiene información de los accesos de los usuarios.
41 |
42 | `/var/log/maillog` - contiene información del servidor de correo.
43 |
44 | Todos estos logs son gestionados por el antiguo demonio **rsyslog**. (En los sistemas que no utilizan **systemd**).
45 |
46 | **Niveles de prioridad de Logs**
47 |
48 | 
49 |
50 | **Niveles de logs Facilities**
51 |
52 | 
53 |
54 | Podemos ver esta información con el comando:
55 |
56 | `dmesg -x`
57 |
58 | `logger` - comando que puede ser utilizado para enviar informacion al fichero **/etc/log/messages**.
59 |
60 | ### Rsyslog
61 |
62 | Utilizado en distribuciones anteriores a Centos 7.
63 |
64 | `rsyslog` - la configuracion del demonio la podemos encontrar en **/etc/rsyslog.conf**.
65 |
66 | Los ficheros de ayuda esta escritos en html y necesitamos lynx:
67 |
68 | > yum -y install lynx
69 |
70 | Es posibble configurar rsyslog para enviar los log a un servidor remoto.
71 |
72 | `/etc/logrotate.conf` - es el fichero de configuración del demonio lograte, encargado de manejar el tamaño y la rotación de los ficheros de log.
73 |
74 | `/etc/logrotate.d/` - Configuración avanzanda para que otros demonios puedan
75 |
76 | `logrotate` - comando para rotar los ficheros de configuración.
77 |
78 | ### Introduccion al diario de systemd
79 |
80 | Recoge los log de :
81 |
82 | - Logs del Kernel
83 | - Logs del sistema
84 | - Servicios del sistem que envian salidas de (standar ouput y standard error)
85 |
86 | La ruta por defecto esta en `/run/log/journal` esta informacion se pierde despues de cada reinicio.
87 |
88 | Para hacerla permanente teemos que hacer:
89 |
90 | ```console
91 | mkdir -p /var/log/journal
92 | systemd-tmpfiles --create --prefix /var/log/journal
93 | ```
94 |
95 | Podemos encontrar mas informacion sobre la condiguración en:
96 |
97 | > man 5 journald.conf
98 |
99 | El fichero de configuracion se encuentra en `/etc/systemd/journald.conf`
100 |
101 | ### journalctl
102 |
103 | Los sistemas que usan systemd utilizan el comando journalctl(Journal control) para obtener informacion del demonio de logs systemd journal(systemd-journald.service).
104 |
105 | `journalctl -n 20` - muestra las entradas mas recientes y limita la salida a 20.
106 |
107 | `journalctl -f -u httpd.service` - nos muestra los log de un servicio en particular.
108 |
109 | `journalctl -o verbose` - para mostrar todos los log de una forma ordenada.
110 |
111 | `journalctl -o json-pretty` - para ver los log en formato json, la salida puede ser tratada para mostrarla en una web por ejemplo. Muy util para analizar los datos.
112 |
113 | `systemd-cat` - para enviar una salida de texto al diario de logs.
114 |
115 | #### **Demo:**
116 |
117 | Tenemos un problema con el servidor web de apache.
118 |
119 | Nos logamos como root
120 |
121 | `sudo su -`
122 |
123 | Comprobamos el estado del servicio:
124 |
125 | `systemctl status httpd.service`
126 |
127 | Intentamos arrancar el servidor web
128 |
129 | `systemctl start httpd.service`
130 |
131 | Tras comprobar que no arranca, buscamos en el log.
132 |
133 | `journalctl -u httpd.service`
134 |
135 | Vemos que nos indica que no puede encontrar el fichero de configuración.
136 |
137 | ```console
138 | journalctl -u httpd.service
139 | -- Logs begin at Sun 2019-06-09 04:33:02 EDT, end at Sun 2019-06-09 04:46:20 EDT. --
140 | Jun 09 04:45:18 ip-10-0-1-160.ec2.internal systemd[1]: Starting The Apache HTTP Server...
141 | Jun 09 04:45:18 ip-10-0-1-160.ec2.internal httpd[13571]: httpd: Could not open configuration file /etc/httpd/conf/httpd.conf: No such file
142 | Jun 09 04:45:18 ip-10-0-1-160.ec2.internal systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
143 | Jun 09 04:45:18 ip-10-0-1-160.ec2.internal kill[13572]: kill: cannot find process ""
144 | Jun 09 04:45:18 ip-10-0-1-160.ec2.internal systemd[1]: httpd.service: control process exited, code=exited status=1
145 | Jun 09 04:45:18 ip-10-0-1-160.ec2.internal systemd[1]: Failed to start The Apache HTTP Server.
146 | Jun 09 04:45:18 ip-10-0-1-160.ec2.internal systemd[1]: Unit httpd.service entered failed state.
147 | Jun 09 04:45:18 ip-10-0-1-160.ec2.internal systemd[1]: httpd.service failed.
148 | ```
149 |
150 | Comprobamos si el directorio de configuracion contiene el fichero.
151 |
152 | `ls /etc/httpd/conf`
153 |
154 | Restauramos el fichero de configuracion
155 |
156 | `mv /etc/httpd/conf/httpd.conf.bkup /etc/httpd/conf/httpd.conf`
157 |
158 | Reiniciamos el servicio
159 |
160 | `systemctl restart httpd.service`
161 |
162 | Comprobamos que el servicio esta corriendo correctamente
163 |
164 | `systemctl status httpd.service`
165 |
166 | utilizamos elinks para comprar que el sitio funciona correctamte
167 |
168 | `elinks http://localhost`
169 |
170 | #### Demo 2
171 |
172 | Queremos programar un backup de una pagina web. Tenemos escrito el scrip que realiza la tarea llamadao `web-backup.sh` y queremos que se ejecute diariamente.
173 |
174 | 1. Creamos es el scrip
175 | 2. Creamos el fichero web-backup.service (especifica que va hacer)
176 | 3. Creamos el fichero web-backup.timer (indica cuando se va a ejecutar y por quien)
177 |
178 | 4. Copiamos el contenido del script a `usr/local/sbin/`
179 |
180 | `cp web-backup.sh /usr/local/sbin/`
181 |
182 | Y damos permisos de ejecucion sobre el script
183 |
184 | `chmod +x /usr/local/sbin/web-backup.sh`
185 |
186 | 5. Copiamos los ficheros de servicio y timer a `/etc/systemd/system`
187 |
188 | `cp web-backup.{service,timer} /etc/systemd/system/
189 |
190 | 6. Reiniciamos el demonio de systemd
191 |
192 | `systemctl daemon-reload`
193 |
194 | 7. Habilitamos el servicio para que se ejecute al arrancar el sistema.
195 |
196 | `systemctl enable web-backup.timer web-backup.service`
197 |
198 | > Esto creara los enlaces simbolicos necesarios.
199 |
200 | 8. Arrancamos los servicios.
201 |
202 | `systemctl start web-backup.timer web-backup.service`
203 |
204 | 9. Comprobamos los servicios
205 |
206 | ```
207 | systemctl status web-backup.timer
208 | systemctl status web-backup.service
209 | ```
210 |
211 | ## 108.3 Mail Transfer Agent (MTA) Fundamentos
212 |
213 | MTA -> MDA (Port 25 TCP) -> MUA
214 |
215 | - **MTA**: Mail Transfer Agent
216 | - **MDA**: Mail delivery Agent
217 | - **MUA**: Mail user agent
218 |
219 | Conocer el sistema de MTA es el importante para el examen.
220 |
221 | Sistemas de MTA más comunes:
222 |
223 | `Sendmail` - es el sistema de mta mas antiguo, es difil de configurar y suele venir instalado por defecto en la mayoria de distribuciones de linux.
224 | `Postfix` - es el MTA moderno encontrado en muchas de las distribuciones de linux, es fácil de configurar y tiene una buena segurida.
225 | `Exim` - es el sistema de MTA por defecto en las distribuciones Deabian, tiene una buena seguridad y es mas sencillo de configurar que Sendmail.
226 |
227 | `Send Emulation Layer` - los administradores pueden utilizar los comandos de 'sendmail' en otras MTA (Postfix, Exim,etc) como si estuvieran utilizando la instalacion de Sendmail.
228 |
229 | ### Renvio de Email y Alias
230 |
231 | Los alias se utilizan para que utilizando otro nombre se envie a la cuenta que queramos, por ejemplo si tenemos un buzon que se llama sergio@localhost podemos crear un alias para que los correos que se envien a **yo@localhost`** se reciban en el buzón de sergio@localhost
232 |
233 | `/etc/aliases` - es el fichero de configuracion que se utiliza para realizar el renvio de correos entre usuarios.
234 |
235 | `newaliases` - comando que es necesario lanzar despues de modificar el fichero anterior para que se enere el fichero `/etc/aliases.db` fichero que el MTA usa para entregar los correos.
236 |
237 | Para enviar un correo desde la terminal con postfix
238 |
239 | `mail -s "Este es un mensaje" sergio@localhost`
240 |
241 | Comprobamos la mandeja de entrada:
242 |
243 | `mail` - comando para enviar los correos o para ver los correos de un usuario.
244 |
245 | `mailq` - comando para ver los correos que estan encolados, esperando a ser enviados a su destino. En sendmail se usaba `sendmail -bp`.
246 |
247 | `~/.forward` - un fichero de configuracion que puede ser colocado en el home del usuario para reenviar correos que sean enviados a el y quieran ser enviados a otro usuario o email externo. (solo tenemos que especificar el usuario o el correo en este fichero). [Ejemplo](https://www.ccsf.edu/Pub/UNIXhelp/mail/file_forward.html)
248 |
249 | Log del email
250 |
251 | `/var/log/maillog/`
252 |
253 | #### DEMO:
254 |
255 | Configurar el servidor de correo para que reenvie todos los correos que llevan a root al usuario cloud_user.
256 |
257 | 1. Nos logamos con el usuario root
258 |
259 | `sudo su -`
260 |
261 | 2. Añadimos el alias en el fichero `/etc/aliases`.
262 |
263 | `echo "root: cloud_user" >> /etc/aliases`
264 |
265 | 3. Regeneramos la base de datos de los alias
266 |
267 | `newaliases`
268 |
269 | 4. Enviamos un mensaje de prueba
270 |
271 | `mail -s "Probando" -a "/etc/services" root@localhost < /dev/null`
272 |
273 | 5. Salimos de la sesion de root
274 |
275 | `exit`
276 |
277 | 6. Comprobaoms la badejande entrada
278 |
279 | `mail`
280 |
281 | ```console
282 | [cloud_user@ip-10-0-1-208 ~]$ mail
283 | Heirloom Mail version 12.5 7/5/10. Type ? for help.
284 | "/var/spool/mail/cloud_user": 6 messages 6 new
285 | >N 1 root Fri Jun 14 03:06 11204/671277 "Probando"
286 | N 2 Mail Delivery System Fri Jun 14 03:14 73/2622 "Undelivered Mail Returned to Sender"
287 | N 3 root Fri Jun 14 03:20 11204/671259 "Probando"
288 | N 4 root Fri Jun 14 03:22 11204/671259 "Probando"
289 | N 5 root Fri Jun 14 03:24 11204/671259 "Probando"
290 | N 6 root Fri Jun 14 03:25 11204/671259 "Probando"
291 | & 1
292 | Message 1:
293 | ```
294 |
295 | ```
296 | Jun 14 03:25:51 ip-10-0-1-208 postfix/local[4784]: 32C0D43D376: to=, orig_to=, relay=local, delay=0.05, delays=0.03/0/0/0.02, dsn=2.0.0, status=sent (delivered to mailbox)
297 | Jun 14 03:25:51 ip-10-0-1-208 postfix/qmgr[4144]: 32C0D43D376: removed
298 | ```
299 |
300 | ## 108.4 Gestión de la impresión y de las impresoras
301 |
302 | ### The Common Unix Printing System (CUPS)
303 |
304 | Instalamos el CUPS driver y el servidor de impresion en ubuntu. Esto nos facilita el manejo mediante un frontal web para administrar las impresoras.
305 |
306 | `sudo apt-get install cups printer-driver-cups-pdf`
307 |
308 | 1. Eliminamos la impresora que viene por defecto(Imprime en PDF), haciendo click en Administración -> Manage Printer -> PDF , seleccionamos en el desplegable de Administration -> Delete.
309 |
310 | 2. Al terminar de configurarla tenemos que seleccionar que sea la impresora por defecto.
311 |
312 | `/etc/cups` - directorio que contiene los ficheros de configuracion del servidor de CUPS.
313 |
314 | `/etc/cups/printers.conf` - fichero de configuración de las impresoras, no se debe cambiar cuando el servidor CUPS esta arrancado.
315 |
316 | Cargamos la web de administracion de impresión:
317 |
318 | `http://localhost:631`
319 |
320 | ### The Line Print Daemon
321 |
322 | Es el domonio de impresión antiguo(legacy)
323 |
324 | > El puerto socket para las impresoras es el **9100**
325 |
326 | `lpd` - Line Print Daemon
327 |
328 | `lpstat` Muestra el estado del servidor de CUPS, las impresoras configuradas y las colas de impresión.
329 |
330 | `lpadmin` - herramienta para añadir, modificar y eliminar impresoras.
331 |
332 | `lpinfo` - este comando muestra las impresoras disponibles y los drivers que pueden usar.
333 |
334 | `lpc` - antiguo comando para mostrar informacion sobre las impresoras.
335 |
336 | `lpr` - este comando envia a imprimir el fichero que se indique a la impresora por defecto.
337 |
338 | Imprime el fichero de usuarios:
339 |
340 | ```
341 | lpr /etc/passwd/
342 | ```
343 |
344 | `lpq` - este comando muestr las colas de impresion del servidor CUPS. Con la opción -a vemos todas las colas de impresion.
345 |
346 | `lprm` - sirve para eliminar un trabajo que exista en la cola de impresión indicando el PID:
347 |
--------------------------------------------------------------------------------
/docs/102-500/110:Seguridad.md:
--------------------------------------------------------------------------------
1 | # 110: Seguridad
2 |
3 | ## 110.1 Tareas de administración de seguridad
4 |
5 | ### Determinar el estado actual de seguridad del sistema
6 |
7 | `who` - lista los usuarios que estan actualente logados en el sistema.
8 |
9 | `w` - igual que el anterior, pero además muestra el proceso que estan ejecutando.
10 |
11 | ```s
12 | 03:26:36 up 1 day, 9:21, 1 user, load average: 1,29, 1,31, 1,15
13 | USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
14 | sergio :0 :0 dom18 ?xdm? 5:32 0.00s /usr/lib/gdm3/g
15 | ```
16 |
17 | `last` - este comando muestra el historico de los usuarios logados en el sistema.
18 |
19 | Mostrar los usuarios que se han logado en el sistema pero que no estan actualmente logados, para conocer que usuarios ha realizado intentos fallos de acceso.
20 |
21 | ```s
22 | last -f /var/log/btmp
23 | ```
24 |
25 | `lsof` - este comando se puede utilizar para encontrar que ficheros hay abiertos. Como los puertos de red también son considerados ficheros en Linux, podemos encontrar los puertos que estan abiertos.
26 |
27 | Nos muestra las siguientes columnas:
28 |
29 | - COMMAND
30 | - PID
31 | - TIP
32 | - USER
33 | - FD
34 | - TYPE
35 | - DEVICE
36 | - SIZE
37 |
38 | Buscar los ficheros que tienen activado el permiso especial SUID
39 |
40 | ```s
41 | find / -perm -u+s
42 | ```
43 |
44 | `ulimit` - este comando sirve para poner límites a la cantidad de recursos del sistema que usuario puede utilizar. Si cabiamos la configuración se pierde después de reinciar el sistema.
45 |
46 | ```s
47 | ulimit -a
48 | -t: cpu time (seconds) unlimited
49 | -f: file size (blocks) unlimited
50 | -d: data seg size (kbytes) unlimited
51 | -s: stack size (kbytes) 8192
52 | -c: core file size (blocks) 0
53 | -m: resident set size (kbytes) unlimited
54 | -u: processes 30385
55 | -n: file descriptors 1024
56 | -l: locked-in-memory size (kbytes) 16384
57 | -v: address space (kbytes) unlimited
58 | -x: file locks unlimited
59 | -i: pending signals 30385
60 | -q: bytes in POSIX msg queues 819200
61 | -e: max nice 0
62 | -r: max rt priority 0
63 | -N 15: unlimited
64 | ```
65 |
66 | Para que sea permanente tenemos que modificar el fichero **/etc/security/limits.conf**. El fichero esta documentado con ejemplos,
67 |
68 | Ejemplos [aquí](https://blog.carreralinux.com.ar/2016/07/uso-de-recursos-del-sistema-en-linux/)
69 |
70 | Limitar que un usuario solo pueda utilizar 2GB de RAM.
71 |
72 | ```
73 | sergio hard memlock 2048
74 | ```
75 |
76 | Limitar que un usuario no pueda consumir más CPU.
77 |
78 | ```
79 | sergio soft cpu 150
80 | sergio hard cpu 200
81 | ```
82 |
83 | `/etc/sudoers` - fichero de configuración donde se guardan los usuarios que tienen acceso de sudo. Se puede modificar con el comando `visudo`.
84 |
85 | El comando **sudo** se utiliza para prevenir que los usuario pueda cometer errores accidentales al ejecutar una orden. Permite a los usuarios ejecutar un comando con permisos de root.
86 |
87 | La barra (-) se utiliza
88 |
89 | `su` - substitute user, para logarnos con un usuario en concreto, por defecto si no especificamos usuario, utilizara root.
90 |
91 | ```s
92 | su - sergio
93 | ```
94 |
95 | ### Comprobar la segurida de la red local
96 |
97 | `lsof -i` - utilizando el parámetro **-i** podemos ver los puertos que estan abierto, ya que estos ficheros estan siendo utilizados por el sistema.
98 |
99 | En el siguiente código podemos ver como dropbox tiene conexiones establecidad y en escucha.
100 |
101 | ```s
102 | COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
103 | dropbox 1048 sergio 76u IPv6 40146 0t0 TCP *:db-lsp (LISTEN)
104 | dropbox 1048 sergio 78u IPv4 40147 0t0 TCP *:db-lsp (LISTEN)
105 | dropbox 1048 sergio 79u IPv4 36159 0t0 UDP *:17500
106 | dropbox 1048 sergio 80u IPv4 37565 0t0 TCP lenovo-ideapad-710s-plus-13ikb.home:55316->162.125.68.3:https (CLOSE_WAIT)
107 | dropbox 1048 sergio 103u IPv4 38259 0t0 TCP localhost:17600 (LISTEN)
108 | dropbox 1048 sergio 107u IPv4 38262 0t0 TCP localhost:17603 (LISTEN)
109 | dropbox 1048 sergio 113u IPv4 492743 0t0 TCP lenovo-ideapad-710s-plus-13ikb.home:41000->162.125.18.133:https (ESTABLISHED)
110 | dropbox 1048 sergio 115u IPv4 497842 0t0 TCP lenovo-ideapad-710s-plus-13ikb.home:41222->162.125.18.133:https (ESTABLISHED)
111 | dropbox 1048 sergio 120u IPv4 40148 0t0 UDP *:17500
112 | dropbox 1048 sergio 121u IPv4 423558 0t0 TCP 192.168.1.78:48700->162.125.68.7:https (CLOSE_WAIT)
113 | dropbox 1048 sergio 145u IPv4 422843 0t0 TCP 192.168.1.78:52438->ec2-52-20-90-39.compute-1.amazonaws.com:https (CLOSE_WAIT)
114 | dropbox 1048 sergio 149u IPv4 509467 0t0 TCP lenovo-ideapad-710s-plus-13ikb.home:33326->162.125.68.3:https (CLOSE_WAIT)
115 | dropbox 1048 sergio 150u IPv4 508921 0t0 TCP lenovo-ideapad-710s-plus-13ikb.home:57450->162.125.33.7:https (CLOSE_WAIT)
116 | code 1318 sergio 43u IPv4 509251 0t0 TCP localhost:43350 (LISTEN)
117 | chrome 10736 sergio 88u IPv4 480503 0t0 UDP 224.0.0.251:mdns
118 | ```
119 |
120 | Los estados de las conexiones puede ser:
121 |
122 | - Establish
123 | - Close_wait
124 | - Listen
125 |
126 | `fuser 22/tcp` - para conecer que PID estan utilizando un proceso concreto.
127 |
128 | `ss` - como vimos anteriormente para visualizar las conexines activa(TUNA):
129 | -t: conexiones tcp
130 | -u: conexiones udp
131 | -n: muestra la ip envez del hostname
132 | -a: muestra los puertos en estucha y los sockets que no estan en escucha.
133 |
134 | `nmap` - nos muestra los puertos que esta abierto de una direccion dada. Tiene muchas mas funcionalidades utilizadas en el mundo del hacking pero a nivel del LPCI solo es necesario conocer esta.
135 |
136 | ```s
137 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~/GITHUB/LPIC-1 master ● nmap localhost
138 |
139 | Starting Nmap 7.60 ( https://nmap.org ) at 2019-06-26 14:45 CEST
140 | Nmap scan report for localhost (127.0.0.1)
141 | Host is up (0.00013s latency).
142 | Not shown: 994 closed ports
143 | PORT STATE SERVICE
144 | 80/tcp open http
145 | 111/tcp open rpcbind
146 | 631/tcp open ipp
147 | 3306/tcp open mysql
148 | 8001/tcp open vcom-tunnel
149 | 8080/tcp open http-proxy
150 |
151 | ```
152 |
153 | **Ejercicio**
154 |
155 | Crear dos usuarios y añadir a uno de ellos al grupo wheel, despues permitir a ese grupo ejecutar como sudo. EL otro usuario debe de tener permisos para reiniciar el servicio web.
156 |
157 | ```s
158 | sudo useradd -m ssoriano
159 | sudo useradd -G wheel -m jlopez
160 | sudo visudo
161 | ```
162 |
163 | Vemos en la última linea como al grupo wheel permititos todo (ALL)
164 |
165 | ```s
166 | ## Allow root to run any commands anywhere
167 | root ALL=(ALL) ALL
168 |
169 | ## Allows members of the 'sys' group to run networking, software,
170 | ## service management apps and more.
171 | # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
172 |
173 | ## Allows people in group wheel to run all commands
174 | %wheel ALL=(ALL) ALL
175 | ```
176 |
177 | Configurar los permisos del administrador de web.
178 |
179 | 1 Creamos un nuevo fichero de sudoers `/etc/sudoers.d`. Usamos `-f` para crear el fichero.
180 |
181 | ```s
182 | sudo visudo -f /etc/sudoers.d/web_admin
183 | ```
184 |
185 | 2. Añaidmos la siguiente linea para crear un alias(aliasc command group) que permite ejecutar las ordenes necesarias para reiniciar el servicio de https.
186 |
187 | ```s
188 | Cmnd_Alias WEB = /bin/systemctl restart httpd.service, /bin/systemctl reload httpd.service
189 | ```
190 |
191 | 3. Añadimos al fichero la linea `ssoriano ALL=WEB` para permitir que el usuario tenga permiso .
192 |
193 | ```s
194 | sudo vim /etc/sudoers.d/web_admin
195 | ```
196 |
197 | Ahora el usuario podra ejecutar reiniciar el servidor web sin embargo no tendra permiso a eso ficheros.
198 |
199 | ```s
200 | sudo systemctl restart httpd.service
201 | ```
202 |
203 | ## 110.2 Configuración de la seguridad del sistema
204 |
205 | ### Securizando intentos accesos locales
206 |
207 | Bloquear una cuenta de usuario
208 |
209 | ```
210 | usermod -L test
211 | ```
212 |
213 | Cambiamos la fecha de expiracion a 1
214 |
215 | ```
216 | usermod -e 1 test
217 | ```
218 |
219 | Comprobamos si esta bloqueada. Al aparecer la exclamación nos indica que la cuenta esta bloqueada.
220 |
221 | ```
222 | getent shadow test
223 | test:!$6$0cQCrrSa$PdNPFMJB/TtbRVjKErFUpEXBznJMmRXcG9gmON/u1DzmXiVEz5ti1tIn4NopDYbEjat0KcIAfRZoUSAgl6fgx0:18055:0:99999:7:::
224 | ```
225 |
226 | Comprobamos si tiene acceso a al bash
227 |
228 | ```
229 | getent passwd test
230 | test:x:1001:1001::/home/test:/bin/sh
231 | ```
232 |
233 | Modificamos el acceso
234 |
235 | ```
236 | usermod -s /sbin/nologin test
237 | ```
238 |
239 | Deshabilitamos la cuenta
240 |
241 | ```
242 | usermod -U -e "" test
243 | ```
244 |
245 | Modificamos el fichero de nologin para que cuando un usuario intente entrar se muestre un mensaje
246 |
247 | ```
248 | vim /etc/nologin
249 | ```
250 |
251 | ### Securizando servicios de red
252 |
253 | Vemos los servicios de red que tenemos en escucha
254 |
255 | ```
256 | losf -i
257 | ```
258 |
259 | ```s
260 | COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
261 | dropbox 1066 sergio 74u IPv4 48147 0t0 TCP *:db-lsp (LISTEN)
262 | dropbox 1066 sergio 75u IPv4 31910 0t0 UDP *:17500
263 | ```
264 |
265 | **COMMAND** - no indica el nombre del servicio
266 | **NAME** - aquí podemos ver desde donde va a permitir las conexiones el puerto que esa en modo escucha, en caso de tener un `*` nos indica que puede recibir conexiones desdes cualquier dirección.
267 |
268 | ```
269 | service dropbox stop
270 | ```
271 |
272 | Super-server:
273 | `xinetd` (eXtended InterNET Daemon) ahora conocido como `systemd.socket` , controlan el acceso a los servicios de red.
274 |
275 | `TCP Wrappers` - esta funcionalidad utiliza los ficheros **hosts.allow** y/o **hosts.deny** para configurar el acceso a los servicios de red.
276 |
277 | `systemd.socket` - es utilizado para activar servicios de red bajo demanda. En vez de utilizar el servicio(por ejemplo ssh.server) utilizara sshd.socket. De esta manera el servicio solo se arranca bajo demanda, en vez de estar a la escucha en todo momento. Las unidades de Socket solo permiten el acceso al servicios de red cuando una conexion entrante la solicita.
278 |
279 | ### Ejercicio
280 |
281 | Para que el servicio de ssh no este siempre a la escucha, deshabilita el servicio y activa el socket.
282 |
283 | Comprobamos el estado del servicio
284 |
285 | ```s
286 | systemctl status sshd.service
287 | ```
288 |
289 | Activamos en el arranque el socket y deshabilitamos el servicio.
290 |
291 | ```s
292 | sudo systemctl enable sshd.socket
293 | sudo systemctl disable sshd.service
294 | ```
295 |
296 | ## 110.3 Protección de datos mediante cifrado
297 |
298 | ### GPG
299 |
300 | GPG (GNU Privacity Guard) - Herramienta de cifrado y firmas digitales desarrollada por Werner Koch bajo la licencia GPL. Es el reemplazo de PGP(Pretty Good Privacity)
301 |
302 | GPG utiliza el estándar del IETF denominado [OpenPGP](https://www.openpgp.org/about/standard/)
303 |
304 | [Firma digital](https://www.gnupg.org/gph/es/manual/x154.html)
305 |
306 | `~/.gnupg` - directorio donde podemos encontrar las claves de anillo y la configuracion de las claves gpg de cada usuario.
307 |
308 | `gpg --gen-key` - para generar la calve
309 |
310 | Exportamos la clave pública:
311 |
312 | Nos tenemos que ubicar en el directorio donde están guardadas las claves.
313 |
314 | ```s
315 | cd ~/.gnupg
316 | gpg -o demopublic --export C7D4EF00D70FBCC7D25170BA7950F49D0650C39D
317 | ```
318 |
319 | Es importante generar la clave de revocación para cancelar el certificado en caso de que nuestra clave se vea comprometida.
320 |
321 | Para publicar publicar la clave publica en los servidores de pgp
322 |
323 | ```s
324 | gpg --keyserver pgp.mit.edu --send-keys C7D4EF00D70FBCC7D25170BA7950F49D0650C39D
325 | ```
326 |
327 |
328 | Cosas a tener en cuenta:
329 |
330 | - Si queremos enviar un mensaje encriptado a otra persona, necesitamos su clave pública, se _encriptan_ con la clave pública del destinatario para que solo el lo pueda _desencriptar_ con su clave privada.
331 | - Si queremos firmar un documento o archivo para demostrar que es nuestro, lo debemos firmamos con nuestra clave privada. Cualquier persona puede comprobar que ha sido firmado por mi utilizando mi clave pública y demostrar que no ha sido modificado.
332 |
333 | ## SSH
334 |
335 | Podemos ver los ficheros de configuración en `/etc/ssh`.
336 |
337 | `sshd_config` - fichero de configuración para las conexiones ssh.
338 |
339 | `sh-keygen` - comando para generar un par de claves asimetricas.
340 |
341 | Todos los usuarios tienen un fichero de configuración individual en ~/.ssh.
342 |
343 | Cuando nos conectamos por primera vez a un servidor se crea un fichero llamado `known_hosts` que contiene la claves públicas de los servidores conocidos.
344 |
345 | Podemos crear un par de claves asimetricas para conectarnos sin contraseña. De esta forma solo podra conectarse los propietarios de estas claves.
346 |
347 | 1. Creamos el par de claves
348 |
349 | ```s
350 | ssh-keygen
351 | ```
352 |
353 | Nos creará 2 claves 1 pública y una privada. Tenemos que copiar la clave publica en el equipo **remoto**. Con el comando `ssh-cooy-id` copiaremos la clave publica en el equipo remoto.Mas info [aquí](https://www.ssh.com/ssh/copy-id#sec-Copy-the-key-to-a-server).
354 |
355 | Este comando copiará la clave pública en el fichero `~/.ssh/authorized_keys` que contrendrá las claves publicas que puede aceptar para que un usuario remote se conecte al servidor.
356 |
357 | ```s
358 | ssh-copy-id -i miclave sergio@107.174.218.90
359 | ```
360 |
361 | `ssh-agent bash` - un agente que sirve para automatizar el acceso sin necesidad de introducir la passphrase.
362 |
363 | `ssh-add claveprivada` para añadir la passphrase de nuestra clave privada.
364 |
365 | `ssh -x` - Deshabilitar las conexiones por ssh para entornos X11
366 |
367 | `ssh -X` - Habilitar las conexiones por ssh para entornos X11
368 |
369 | Para conectarnos con la opción de mostrar las ventanas remotas en nuestro equipo.
370 |
371 | ```s
372 | ssh -Y sergio@192.168.0.202
373 | ```
374 |
--------------------------------------------------------------------------------
/docs/101-500/101:Arquitectura-del-Sistema.md:
--------------------------------------------------------------------------------
1 | # Tema 101: Arquitectura del Sistema
2 |
3 | - [Tema 101: Arquitectura del Sistema](#tema-101-arquitectura-del-sistema)
4 | - [101.1 Determinar y configurar los ajustes de hardware](#1011-determinar-y-configurar-los-ajustes-de-hardware)
5 | - [BIOS y UEFI](#bios-y-uefi)
6 | - [Sys y proc](#sys-y-proc)
7 | - [/dev y el comando **lsdev**](#dev-y-el-comando-lsdev)
8 | - [Módulos del Kernel](#m%c3%b3dulos-del-kernel)
9 | - [modprobe](#modprobe)
10 | - [lsmod](#lsmod)
11 | - [lspci y lsusb](#lspci-y-lsusb)
12 | - [101.2 Arranque del sistema](#1012-arranque-del-sistema)
13 | - [Secuencia de arranque](#secuencia-de-arranque)
14 | - [Cargadores de arranque (boot loader)](#cargadores-de-arranque-boot-loader)
15 | - [Tipos de arranque](#tipos-de-arranque)
16 | - [101.3 Cambiar los niveles de ejecución / objetivos de arranque y apagar o reiniciar el sistema](#1013-cambiar-los-niveles-de-ejecuci%c3%b3n--objetivos-de-arranque-y-apagar-o-reiniciar-el-sistema)
17 |
18 | ## 101.1 Determinar y configurar los ajustes de hardware
19 |
20 | Importancia: 2
21 | Descripción: Los candidatos deberán ser capaces de determinar y configurar el hardware fundamental del sistema.
22 |
23 | **Áreas de conocimiento clave**:
24 |
25 | - Activar y desactivar los periféricos integrados.
26 | - Diferenciar entre los distintos tipos de dispositivos de almacenamiento masivo.
27 | - Determinar los recursos de hardware para los dispositivos.
28 | - Herramientas y utilidades para listar información de hardware (por ejemplo, lsusb, lspci, etc.).
29 | - Herramientas y utilidades para manipular dispositivos USB.
30 | - Conocimientos conceptuales de sysfs, udev y dbus.
31 |
32 | Lista parcial de los archivos, términos y utilidades utilizados:
33 |
34 | ```bash
35 | /sys/
36 | /proc/
37 | /dev/
38 | modprobe
39 | lsmod
40 | lspci
41 | lsusb
42 | ```
43 |
44 | ------
45 |
46 | Página de guia -> [https://developer.ibm.com/tutorials/l-lpic1-101-1/]
47 |
48 | ### BIOS y UEFI
49 |
50 | (BIOS): basic input/output system.
51 | (UEFI): Unified Extensible Firmware Interface.
52 |
53 | El **Firmware** de un dispositivo es el *software* de solo lectura que sirve para comunicar los diferentes componentes de harware que componen los equipos informáticos entre si.
54 |
55 | ### Sys y proc
56 |
57 | **sysfs** y **procfs** son sistemas de ficheros virtuales que se montan sobre /sys y /proc y que son usados por el kernel del sistema Linux. Procfs es el antiguo y sysfs es el moderno, aunque se siguen estando presente ambos en el sistema. Sysfs fue añadido en el *Kernel 2.6*.
58 |
59 | **Sysfs** o /sys es un sistema de ficheros simple con ficheros que representan atributos de objetos, estos los objetos también son representados como directorios(carpetas) y son utilizados para obtener información sobre el sistema.
60 |
61 |
62 |
63 | Las carpetas que podemos encontrar dentro de /sys son:
64 |
65 | ```bash
66 | sergio@ubuntu:~$ ls /sys
67 | block bus class dev devices firmware fs hypervisor kernel module power
68 | ```
69 |
70 | - **block**: encontramos enlaces simbólicos a dispositivos bloqueados
71 | - **bus**: Contiene un diseño de directorio plano de los diferentes tipos de
72 | kernel(núcleo).
73 | - **dev**: contiene enlaces simbólicos para cada dispositivo descubierto en el sistema que apuntan al directorio del dispositivo bajo root /.
74 | - **devices**: contiene un directorio por cada driver.
75 |
76 | ```bash
77 | sergio@ubuntu:~$ ls -l /sys/block/
78 | total 0
79 | lrwxrwxrwx 1 root root 0 abr 3 14:19 loop0 -> ../devices/virtual/block/loop0
80 | lrwxrwxrwx 1 root root 0 abr 3 14:19 loop1 -> ../devices/virtual/block/loop1
81 | lrwxrwxrwx 1 root root 0 abr 3 14:19 loop2 -> ../devices/virtual/block/loop2
82 | lrwxrwxrwx 1 root root 0 abr 3 14:19 loop3 -> ../devices/virtual/block/loop3
83 | lrwxrwxrwx 1 root root 0 abr 3 14:19 loop4 -> ../devices/virtual/block/loop4
84 | lrwxrwxrwx 1 root root 0 abr 3 14:19 loop5 -> ../devices/virtual/block/loop5
85 | lrwxrwxrwx 1 root root 0 abr 3 14:19 loop6 -> ../devices/virtual/block/loop6
86 | lrwxrwxrwx 1 root root 0 abr 3 14:19 loop7 -> ../devices/virtual/block/loop7
87 | lrwxrwxrwx 1 root root 0 abr 3 14:19 sr0 -> ../devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0/1:0:0:0/block/sr0
88 | lrwxrwxrwx 1 root root 0 abr 3 13:59 vda -> ../devices/pci0000:00/0000:00:06.0/virtio2/block/vda
89 | ```
90 |
91 | **procfs** y /proc
92 | Contienen información sobre el sistema, como información de la memoria, cpu etc. Algunas configuracionenes es posible cambiarlas 'on the fly' de forma que cuenta con el cambio despues de un reinicio.
93 |
94 | También contiene información sobre las peticiones de interrupción los Accesos Directos a Memoria (DMA) y los puertos de entradas y salidas los interfaces usados por el sistema (I/O port interface)
95 |
96 | Podemos ver la información del sistema operativo con:
97 |
98 | ```bash
99 | cat /proc/version
100 | Linux version 4.4.0-143-generic (buildd@lgw01-amd64-037) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) ) #169-Ubuntu SMP Thu Feb 7 07:56:51 UTC 2019
101 | ```
102 |
103 | También se puede mostrar la información de las variables del con el comando `sysctl -a`.
104 |
105 | Por ejemplo podemos mostrar las entradas del proceso activo. `$$` es el PID del la consola que esta activa.
106 |
107 | ```bash
108 | sergio@ubuntu:~$ ls -l /proc/$$/ | head -n 15
109 | total 0
110 | dr-xr-xr-x 2 sergio sergio 0 abr 3 15:13 attr
111 | -rw-r--r-- 1 sergio sergio 0 abr 3 15:13 autogroup
112 | -r-------- 1 sergio sergio 0 abr 3 15:13 auxv
113 | -r--r--r-- 1 sergio sergio 0 abr 3 15:13 cgroup
114 | --w------- 1 sergio sergio 0 abr 3 15:13 clear_refs
115 | -r--r--r-- 1 sergio sergio 0 abr 3 15:13 cmdline
116 | -rw-r--r-- 1 sergio sergio 0 abr 3 15:13 comm
117 | -rw-r--r-- 1 sergio sergio 0 abr 3 15:13 coredump_filter
118 | -r--r--r-- 1 sergio sergio 0 abr 3 15:13 cpuset
119 | lrwxrwxrwx 1 sergio sergio 0 abr 3 15:13 cwd -> /home/sergio
120 | -r-------- 1 sergio sergio 0 abr 3 15:13 environ
121 | lrwxrwxrwx 1 sergio sergio 0 abr 3 15:13 exe -> /bin/bash
122 | dr-x------ 2 sergio sergio 0 abr 3 12:29 fd
123 | dr-x------ 2 sergio sergio 0 abr 3 15:13 fdinfo
124 | ```
125 |
126 | ### /dev y el comando **lsdev**
127 |
128 | El directorio [**/dev**][4] contiene los archivos especiales de dispositivos.
129 |
130 | `lsdev` nos muestra la información de `/proc` presentándolo de una forma ordenada. Las columnas que podemos ver son:
131 |
132 | - Device
133 | - DMA
134 | - IRQ
135 | - I/O Port
136 |
137 | >Es necesario tener instalado el paquete [procinfo][1]
138 |
139 | ### Módulos del Kernel
140 |
141 | En GNU/Linux, el hardware lo administran los drivers del kernel, algunos de los cuales se encuentran integrados (compilados) en el kernel, y otros, en su mayor parte, son módulos independientes. Estos módulos son ficheros que suelen almacenarse en el árbol de directorios `/lib/modules`, y se pueden cargar o descargar para proporcionar acceso al hardware. Normalmente, GNU/Linux carga los módulos que necesita cuando se inicia, pero puede que en ocasiones se necesite cargar módulos manualmente.
142 |
143 | ### modprobe
144 |
145 | El comando **modprobe** sirve para añadir o eliminar modulos del kernel de linux.
146 |
147 | Para eliminar manualmente un drive podemos utilizar `modprobe -r` y para mostrar la información podemos utilizar `modprobe -c`. Con la opcion -v podemos ver lo que se ejecutado y con -n las opciones completadas con exito.
148 |
149 | Añadir un modulo:
150 |
151 | ### lsmod
152 |
153 | Con el comando **lsmod** podemos ver los módulos que hay actualmente cargados en el Kernel.
154 |
155 | >Nos muestra la información formateada del archivo `/proc/modules`.
156 |
157 | Con el comando `modinfo` podemos ver la información de un modulo. Podemos localizar los ficheros de modulos en la ruta `cd /lib/modules/$(uname -r)`
158 |
159 | >`$(uname)- r` nos devuelve la version del kernel de nuestro sistema
160 |
161 | ```bash
162 | sergio@ubuntu:~$ modinfo xor
163 | filename: /lib/modules/4.4.0-143-generic/kernel/crypto/xor.ko
164 | license: GPL
165 | srcversion: C02DF7938B1596D55158340
166 | depends:
167 | retpoline: Y
168 | intree: Y
169 | vermagic: 4.4.0-143-generic SMP mod_unload modversions 686 retpoline
170 |
171 | ```
172 |
173 | ### lspci y lsusb
174 |
175 | Son herramientas para obtener información sobre los dispositivos pci y usb.
176 |
177 | El comando lspci busca información en el fichero `/usr/share/misc/pci.ids`, que contiene la lista de los IDs conocidos (vendors, devices, classes, and subclasses) [info][3]
178 |
179 | ```bash
180 | sergio@ubuntu:~$ lspci
181 | 00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
182 | 00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
183 | 00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
184 | 00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
185 | 00:02.0 VGA compatible controller: Device 1234:1111
186 | 00:03.0 Ethernet controller: Red Hat, Inc. Virtio network device
187 | 00:04.0 USB controller: NEC Corporation uPD720200 USB 3.0 Host Controller (rev 03)
188 | 00:05.0 Unclassified device [00ff]: Red Hat, Inc. Virtio memory balloon
189 | 00:06.0 SCSI storage controller: Red Hat, Inc. Virtio block device
190 | ```
191 |
192 | ```bash
193 | sergio@ubuntu:~$ lsusb
194 | Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
195 | Bus 001 Device 002: ID 0627:0001 Adomax Technology Co., Ltd
196 | Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
197 | ```
198 |
199 | ## 101.2 Arranque del sistema
200 |
201 | Importancia: 3
202 | Descripción: Los candidatos deberán ser capaces de guiar el sistema a lo largo del proceso de arranque.
203 |
204 | **Áreas de conocimiento clave:**
205 |
206 | - Proporcionar comandos comunes al gestor de arranque y opciones al kernel en el momento del arranque.
207 | - Demostrar conocimiento de la secuencia de arranque desde BIOS/UEFI hasta la finalización del arranque.
208 | - Comprensión de SysVinit y systemd.
209 | - Conocimiento de Upstart.
210 | - Comprobar los eventos de arranque en los archivos de registro.
211 | - Lista parcial de los archivos, términos y utilidades utilizados:
212 |
213 | ```bash
214 | dmesg
215 | journalctl
216 | BIOS
217 | UEFI
218 | bootloader
219 | kernel
220 | initramfs
221 | init
222 | SysVinit
223 | systemd
224 | ```
225 |
226 | -----
227 |
228 | ### Secuencia de arranque
229 |
230 | La secuencia de arranque (Boot loader) es la que se encarga de realizar los procesos iniciales cuando el sistema es arrancado o reiniciado.
231 |
232 | El programa de arranque reside en la partición del sistema y es invocado antes de iniciar el SO.
233 |
234 | #### Cargadores de arranque (boot loader)
235 |
236 | [GRUB2][6] (GRand Unified Bootloader, Cargador de arranque unificado
237 |
238 | Son particiones que contienen ficheros de configuración para indicar donde se arranca el sistema.
239 |
240 | Cuando GRUB2 lee el archivo de configuración, muestra un menu para seleccionar el sistema que se quiere arrancar.
241 |
242 | `DMESG`: Se utiliza para mostrar o controlar el buffer del anillo del kernel.(es el antiguo comando, ahora se utiliza journalctl)
243 |
244 | `journalctl`: utilidad para mostrar el buffer del anillo del kernel, podemos ver todos los elementos que han sido cargados en la memoria. Con `journalctl -k` mostramos toda la información
245 |
246 |
247 | ### Tipos de arranque
248 |
249 | `init`: es el sistema de inicialización.
250 |
251 | kernel -> /sbin/init -> /etc/inittab
252 |
253 | /etc/inittab
254 | :::
255 |
256 | `sysVinit`:
257 |
258 |
259 | El fichero `/etc/inittab` era el el antiguo fichero utilizado por el demonio System V init(8).
260 | El demonio Upstart init(8) no usa este fichero, sin embargo lee la configuracion de los ficheros alojados el el directorio /etc/init.
261 |
262 | `śystemd`: es el gestor de systema y de servicios, es el primer proceso en arrancar y tiene el PID (1)
263 |
264 |
265 | Ejemplo del proceso del sistema de arranque:
266 |
267 | 1. La partición de arranque es encontrada.
268 | 2. Kernel y RAM incial son cargadas.
269 | 3. El kernel carga los drivers iniciales y configura las herramientas desde la RAM.
270 | 4. El kernel toma el control del sistema a través de `/sbin/init`.
271 | 5. init realiza alguna tareas de mantenimiento desde `/etc/rc.d/rc.sysinit`
272 | 6. initi lee la linea por defecto de inidefault en /etc/inittab y entra en el runlevel 3
273 |
274 | Estos ficheros se encuentran en diferentes localizaciones dependiendo de la distribución
275 |
276 | - Distribuciones basdas en Red Hat: /etc/rc.d/
277 | - Distribuciones basadas en debian: /etc/init.d/
278 |
279 | **rc** = run commands, cada una de las carpetas equivale a los diferentes niveles de arranque.
280 |
281 | Mostramos los elmentos de arranque del nivel de arranque 3(todos son enlaces simbolicos a los ficheros) Se cargaran en el orden que aparecen.
282 |
283 | ```console
284 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~/test_command ls /etc/rc3.d
285 | S01acpid S01cups-browsed S01rsyslog
286 | S01anacron S01dbus S01saned
287 | S01apport S01docker S01speech-dispatcher
288 | S01avahi-daemon S01gdm3 S01spice-vdagent
289 | S01binfmt-support S01grub-common S01unattended-upgrades
290 | S01bluetooth S01irqbalance S01uuidd
291 | S01console-setup.sh S01kerneloops S01whoopsie
292 | S01cron S01plymouth
293 | S01cups S01rsync
294 | ```
295 |
296 | `upstart`: es el demononio de arranque de ubunto desarrollado en 2006 y mas adelante utilizado en distribuciones Red Hat, debian y fedora.
297 |
298 | Ha diferencia de init, **upstart** ofrece arranques de servicios asincronos, reduciendo el tiempo de arranque.
299 |
300 | init vs upstart
301 |
302 |
303 |
304 | ## 101.3 Cambiar los niveles de ejecución / objetivos de arranque y apagar o reiniciar el sistema
305 |
306 | **Runlevel**: son los diferentes estados que el sistema puede ejecutar
307 |
308 |
309 | | Runleve | Proposito |
310 | | ------- | ------------------------------------------ |
311 | | 0 | halt |
312 | | 1 | Single user mode |
313 | | 2 | multi-user mode (sin red) |
314 | | 3 | multi-user mode( con red) |
315 | | 4 | no utilizado(para entornos personalizados) |
316 | | 5 | multi-user, con red y entorno gráfico |
317 | | 6 | reboot |
318 |
319 |
320 | `systemd`:
321 |
322 | `systemctl`:
323 |
324 | `telinit`: comando para cambiar el modo de arranque
325 |
326 |
327 | cat /etc/inittab
328 |
329 | [1]: https://linux.die.net/man/8/procinfo
330 | [2]: https://www.maketecheasier.com/differences-between-uefi-and-bios/
331 | [3]: http://manpages.ubuntu.com/manpages/xenial/man8/lspci.8.html
332 | [4]: https://linux.die.net/sag/dev-fs.html
333 | [5]: https://www.kernel.org/doc/html/latest/filesystems/index.html?highlight=filesystem
334 | [6]:https://help.ubuntu.com/community/Grub2#File_Structure
--------------------------------------------------------------------------------
/objetivos_101.md:
--------------------------------------------------------------------------------
1 | # Tabla de contenido :+1:
2 |
3 | ## Objetivos del examen 101
4 |
5 | - [ ] [Tema 101: Arquitectura del Sistema](docs/101-500/Tema_101.md)
6 | - [ ] [Tema 102: Instalación de Linux y gestión de paquetes](docs/101-500/Tema_102.md)
7 | - [ ] [Tema 103: Comandos GNU y Unix](docs/101-500/Tema_103.md)
8 | - [ ] [Tema 104: Dispositivos, sistemas de archivos Linux y el estándar de jerarquía de archivos](docs/101-500/Tema_104.md)
9 |
10 |
11 |
12 |
13 |
14 | Tema 101: Arquitectura del Sistema
15 | 101.1 Determinar y configurar los ajustes de hardware
16 | Importancia
17 |
18 | 2
19 | Descripción
20 |
21 | Los candidatos deberán ser capaces de determinar y configurar el hardware fundamental del sistema.
22 |
23 | Áreas de conocimiento clave:
24 |
25 | Activar y desactivar los periféricos integrados.
26 | Diferenciar entre los distintos tipos de dispositivos de almacenamiento masivo.
27 | Determinar los recursos de hardware para los dispositivos.
28 | Herramientas y utilidades para listar información de hardware (por ejemplo, lsusb, lspci, etc.).
29 | Herramientas y utilidades para manipular dispositivos USB.
30 | Conocimientos conceptuales de sysfs, udev y dbus.
31 |
32 | Lista parcial de los archivos, términos y utilidades utilizados:
33 |
34 | /sys/
35 | /proc/
36 | /dev/
37 | modprobe
38 | lsmod
39 | lspci
40 | lsusb
41 |
42 | 101.2 Arranque del sistema
43 | Importancia
44 |
45 | 3
46 | Descripción
47 |
48 | Los candidatos deberán ser capaces de guiar el sistema a lo largo del proceso de arranque.
49 |
50 | Áreas de conocimiento clave:
51 |
52 | Proporcionar comandos comunes al gestor de arranque y opciones al kernel en el momento del arranque.
53 | Demostrar conocimiento de la secuencia de arranque desde BIOS/UEFI hasta la finalización del arranque.
54 | Comprensión de SysVinit y systemd.
55 | Conocimiento de Upstart.
56 | Comprobar los eventos de arranque en los archivos de registro.
57 | Lista parcial de los archivos, términos y utilidades utilizados:
58 |
59 | dmesg
60 | journalctl
61 | BIOS
62 | UEFI
63 | bootloader
64 | kernel
65 | initramfs
66 | init
67 | SysVinit
68 | systemd
69 |
70 |
71 | 101.3 Cambiar los niveles de ejecución / objetivos de arranque y apagar o reiniciar el sistema
72 | Importancia
73 |
74 | 3
75 | Descripción
76 |
77 | Los candidatos deberán ser capaces de gestionar el nivel de ejecución de SysVinit o el objetivo de arranque systemd del sistema. Este objetivo incluye cambiar al modo de usuario único, apagar o reiniciar el sistema. Los candidatos deberán ser capaces de alertar a los usuarios antes de cambiar de nivel de ejecución / objetivo de arranque y terminar adecuadamente los procesos. Este objetivo también incluye establecer el nivel de ejecución predeterminado de SysVinit o el objetivo de arranque systemd. También incluye el conocimiento de Upstart como una alternativa a SysVinit o systemd.
78 |
79 |
80 | Áreas de conocimiento clave:
81 |
82 | Establecer el nivel de ejecución o el objetivo de arranque predeterminado.
83 | Cambiar entre niveles de ejecución / objetivos de arranque, incluido el modo monousuario.
84 | Apagar y reiniciar desde la línea de comandos.
85 | Alertar a los usuarios antes de cambiar de nivel de ejecución/objetivo de arranque u otros eventos importantes del sistema.
86 | Terminar procesos de forma adecuada.
87 | Conocimiento de acpid.
88 |
89 | Lista parcial de los archivos, términos y utilidades utilizados:
90 |
91 | /etc/inittab
92 | shutdown
93 | init
94 | /etc/init.d/
95 | telinit
96 | systemd
97 | systemctl
98 | /etc/systemd/
99 | /usr/lib/systemd/
100 | wall
101 |
102 | Tema 102: Instalación de Linux y gestión de paquetes
103 | 102.1 Diseño del esquema de particionado del disco duro duro
104 | Importancia
105 |
106 | 2
107 | Descripción
108 |
109 | Los candidatos deberán ser capaces de diseñar un esquema de particionado de disco para un sistema Linux.
110 |
111 | Áreas de conocimiento clave:
112 |
113 | Asignar sistemas de archivos y espacio de intercambio a particiones o discos separados.
114 | Adaptar el diseño al uso previsto del sistema.
115 | Asegurar de que la partición /boot cumple los requisitos de la arquitectura de hardware para el arranque.
116 | Conocimiento de las características básicas de LVM.
117 | Lista parcial de archivos, términos y utilidades:
118 |
119 | Sistema de archivos / (raíz)
120 | Sistema de archivos /var
121 | Sistema de archivos /home
122 | Sistema de archivos /boot
123 | Partición del sistema EFI (ESP)
124 | Espacio de intercambio (swap)
125 | Puntos de montaje
126 | Particiones
127 |
128 | 102.2 Instalar un gestor de arranque
129 | Importancia
130 |
131 | 2
132 | Descripción
133 |
134 | El candidato debe ser capaz de seleccionar, instalar y configurar un gestor de arranque.
135 |
136 | Áreas de conocimiento clave:
137 |
138 | Proporcionar ubicaciones alternativas para el gestor de arranque así como opciones de arranque de respaldo.
139 | Instalar y configurar un gestor de arranque como GRUB Legacy.
140 | Realizar cambios básicos de configuración para GRUB 2.
141 | Interactuar con el gestor de arranque.
142 |
143 | Lista parcial de archivos, términos y utilidades:
144 |
145 | menu.lst, grub.cfg and grub.conf
146 | grub-install
147 | grub-mkconfig
148 | MBR
149 |
150 | 102.3 Gestión de librerías compartidas
151 | Importancia
152 |
153 | 1
154 | Descripción
155 |
156 | El candidato debe ser capaz de determinar de qué librerías compartidas dependen los programas ejecutables e instalarlas cuando sea necesario.
157 |
158 | Áreas de conocimiento clave:
159 |
160 | Identificar librerías compartidas.
161 | Identificar las ubicaciones típicas de las librerías del sistema.
162 | Cargar librerías compartidas.
163 | Lista parcial de archivos, términos y utilidades:
164 |
165 | ldd
166 | ldconfig
167 | /etc/ld.so.conf
168 | LD_LIBRARY_PATH
169 |
170 | 102.4 Gestión de paquetes Debian
171 | Importancia
172 |
173 | 3
174 | Descripción
175 |
176 | El candidato debe ser capaz de llevar a cabo la gestión de paquetes usando las herramientas de Debian.
177 |
178 | Áreas de conocimiento clave:
179 |
180 | Instalar, actualizar y desinstalar paquetes binarios de Debian.
181 | Encontrar paquetes que contengan archivos o librerías específicos (estén o no instalados).
182 | Obtener información del paquete como la versión, contenido, dependencias, integridad del paquete y estado de la instalación (tanto si el paquete está instalado como si no lo está).
183 | Conocimientos de apt.
184 | Lista parcial de archivos, términos y utilidades:
185 |
186 | /etc/apt/sources.list
187 | dpkg
188 | dpkg-reconfigure
189 | apt-get
190 | apt-cache
191 |
192 | 102.5 Gestión de paquetes RPM y YUM
193 | Importancia
194 |
195 | 3
196 | Descripción
197 |
198 | El candidato debe ser capaz de llevar a cabo la gestión de paquetes usando las herramientas RPM, YUM y Zypper.
199 |
200 | Áreas de conocimiento clave:
201 |
202 | Instalar, reinstalar, actualizar y desinstalar paquetes usando RPM, YUM y Zypper.
203 | Obtener información de paquetes RPM como la versión, estado, dependencias, integridad y firmas.
204 | Determinar qué archivos proporciona un paquete así como encontrar de qué paquete proviene un determinado archivo.
205 | Conocimientos de dnf.
206 | Lista parcial de archivos, términos y utilidades:
207 |
208 | rpm
209 | rpm2cpio
210 | /etc/yum.conf
211 | /etc/yum.repos.d/
212 | yum
213 | zypper
214 |
215 | 102.6 Linux como sistema virtualizado
216 | Importancia
217 |
218 | 1
219 | Descripción
220 |
221 | El candidato debe entender las implicaciones que conlleva la virtualización y la computación en la nube en un sistema Linux virtualizado.
222 |
223 | Áreas de conocimiento clave:
224 |
225 | Entender el concepto general de máquina virtual y contenedor
226 | Entender elementos comunes de una máquina virtual en un entorno de nube de tipo IaaS, tales como instancia de computación, almacenamiento de bloques y redes
227 | Entender las propiedades únicas de un sistema Linux que tienen que cambiar cuando el sistema se clona o se usa como plantilla
228 | Entender cómo se usan las imágenes de sistema para desplegar máquinas virtuales, instancias de nube y contenedores
229 | Entender las extensiones de Linux que permiten la integración con un producto de virtualización
230 | Conocimientos de cloud-init
231 | Lista parcial de archivos, términos y utilidades:
232 |
233 | Máquina virtual
234 | Contenedor Linux
235 | Contenedor de aplicaciones
236 | Controladores de la máquina huésped
237 | Llaves de host SSH
238 | ID de D-Bus
239 |
240 | Tema 103: Comandos GNU y Unix
241 | 103.1 Trabajar desde la línea de comandos
242 | Importancia
243 |
244 | 4
245 | Descripción
246 |
247 | El candidato debe saber cómo usar la línea de comandos para interactuar con la shell y sus comandos. Se asume el conocimiento de la shell Bash por parte del candidato.
248 |
249 | Áreas de conocimiento clave:
250 |
251 | Usar comandos de shell individuales y secuencias de comandos de una línea para realizar tareas básicas en la línea de comandos.
252 | Usar y modificar el entorno de shell, lo que incluye definir, referenciar y exportar variables de entorno.
253 | Usar y editar el historial de comandos.
254 | Invocar comandos dentro y fuera de la ruta definida.
255 | Lista parcial de archivos, términos y utilidades:
256 |
257 | bash
258 | echo
259 | env
260 | export
261 | pwd
262 | set
263 | unset
264 | type
265 | which
266 | man
267 | uname
268 | history
269 | .bash_history
270 | Uso de comillas
271 |
272 | 103.2 Procesar secuencias de texto usando filtros
273 | Importancia
274 |
275 | 2
276 | Descripción
277 |
278 | El candidato debe saber aplicar filtros a secuencias de texto.
279 |
280 | Áreas de conocimiento clave:
281 |
282 | Enviar archivos de texto y flujos de salida a través de filtros de utilidades de texto para modificar la salida usando comandos UNIX estándar incluidos en el paquete GNU textutils.
283 | Lista parcial de archivos, términos y utilidades:
284 |
285 | bzcat
286 | cat
287 | cut
288 | head
289 | less
290 | md5sum
291 | nl
292 | od
293 | paste
294 | sed
295 | sha256sum
296 | sha512sum
297 | sort
298 | split
299 | tail
300 | tr
301 | uniq
302 | wc
303 | xzcat
304 | zcat
305 |
306 | 103.3 Administración básica de archivos
307 | Importancia
308 |
309 | 4
310 | Descripción
311 |
312 | El candidato debe ser capaz de usar comandos básicos de Linux para la administración de archivos y directorios.
313 |
314 | Áreas de conocimiento clave:
315 |
316 | Copiar, mover y eliminar archivos y directorios de forma individual.
317 | Copiar múltiples archivos y directorios de forma recursiva.
318 | Eliminar archivos y directorios de forma recursiva.
319 | Utilizar especificaciones de comodines simples y avanzadas en los comandos.
320 | Usar find para localizar archivos y actuar sobre ellos en base a su tipo, tamaño o marcas de tiempo.
321 | Uso de tar, cpio y dd.
322 | Lista parcial de archivos, términos y utilidades:
323 |
324 | cp
325 | find
326 | mkdir
327 | mv
328 | ls
329 | rm
330 | rmdir
331 | touch
332 | tar
333 | cpio
334 | dd
335 | file
336 | gzip
337 | gunzip
338 | bzip2
339 | bunzip2
340 | xz
341 | unxz
342 | Uso de comodines (file globbing)
343 |
344 | 103.4 Uso de secuencias de texto, tuberías y redireccionamientos
345 | Importancia
346 |
347 | 4
348 | Descripción
349 |
350 | El candidato debe ser capaz de redireccionar secuencias de texto y conectarlas para procesar la información de forma eficiente. Estas tareas incluyen: la redirección de la entrada estándar, la salida estándar y el error estándar; el uso de tuberías para enviar la salida de un comando a la entrada de otro; el uso de la salida de un comando como argumento para otro comando, así como el envío de la salida de un comando simultáneamente a la salida estándar y a un archivo.
351 |
352 |
353 | Áreas de conocimiento clave:
354 |
355 | Redireccionar la entrada estándar (stdin), la salida estándar (stdout) y el error estándar (stderr).
356 | Utilizar tuberías para enviar la salida de un comando a la entrada de otro.
357 | Usar la salida de un comando como argumento de otro comando.
358 | Enviar la salida de un comando a stdouty a un archivo simultáneamente.
359 |
360 | Lista parcial de archivos, términos y utilidades:
361 |
362 | tee
363 | xargs
364 |
365 | 103.5 Crear, supervisar y matar procesos
366 | Importancia
367 |
368 | 4
369 | Descripción
370 |
371 | El candidato debe ser capaz de realizar una gestión básica de los procesos.
372 |
373 | Áreas de conocimiento clave:
374 |
375 | Ejecutar trabajos en primer y segundo plano.
376 | Enviar señales a los programas para que continúen ejecutándose después del cierre de sesión.
377 | Supervisar procesos activos.
378 | Seleccionar y ordenar procesos para su visualización.
379 | Enviar señales a los procesos.
380 | Lista parcial de archivos, términos y utilidades:
381 |
382 | &
383 | bg
384 | fg
385 | jobs
386 | kill
387 | nohup
388 | ps
389 | top
390 | free
391 | uptime
392 | pgrep
393 | pkill
394 | killall
395 | watch
396 | screen
397 | tmux
398 |
399 | 103.6 Modificar la prioridad de ejecución de los procesos
400 | Importancia
401 |
402 | 2
403 | Descripción
404 |
405 | El candidato debe ser capaz de gestionar las prioridades de ejecución de los procesos.
406 |
407 | Áreas de conocimiento clave:
408 |
409 | Conocer la prioridad predeterminada con la que se crea un proceso.
410 | Ejecutar un programa con una prioridad mayor o menor de la que tiene de forma predeterminada.
411 | Cambiar la prioridad de un proceso en ejecución.
412 | Lista parcial de archivos, términos y utilidades utilizadas:
413 |
414 | nice
415 | ps
416 | renice
417 | top
418 |
419 | 103.7 Realizar búsquedas en archivos de texto usando expresiones regulares
420 | Importancia
421 |
422 | 3
423 | Descripción
424 |
425 | El candidato debe ser capaz de manipular archivos y cadenas de texto usando expresiones regulares. El objetivo incluye la creación de expresiones re\ gulares sencillas que contengan varios elementos de notación así como el uso de herramientas para realizar búsquedas con expresiones regulares dentr\ o de un sistema de archivos o del contenido de un archivo.
426 |
427 | Áreas de conocimiento clave:
428 |
429 | Crear expresiones regulares sencillas que contengan varios elementos de notación.
430 | Saber diferenciar las expresiones regulares básicas de las extendidas.
431 | Entender los conceptos de caracteres especiales, clases de caracteres, cuantificadores y anclas.
432 | Usar herramientas para realizar búsquedas con expresiones regulares dentro de un sistema de archivos o del contenido de un archivo.
433 | Usar las expresiones regulares para borrar, modificar o reemplazar texto.
434 | Lista parcial de archivos, términos y utilidades:
435 |
436 | grep
437 | egrep
438 | fgrep
439 | sed
440 | regex(7)
441 |
442 | 103.8 Edición básica de archivos
443 | Importancia
444 |
445 | 3
446 | Descripción
447 |
448 | El candidato debe ser capaz de editar archivos de texto usando vi. El objetivo incluye la navegación en vi, los modos básicos de vi, así como insertar, editar, borrar, copiar y encontrar texto utilizando vi. También se incluye el conocimiento de otros editores de texto populares y saber establecer el editor predeterminado.
449 |
450 | Áreas de conocimiento clave:
451 |
452 | Navegar por un documento usando vi.
453 | Entender y usar los modos de vi.
454 | Insertar, editar, borrar, copiar y encontrar texto usando vi.
455 | Conocimientos de Emacs, nano y vim.
456 | Configurar el editor estándar.
457 | Lista parcial de archivos, términos y utilidades:
458 |
459 | vi
460 | /, ?
461 | h,j,k,l
462 | i, o, a
463 | d, p, y, dd, yy
464 | ZZ, :w!, :q!
465 | EDITOR
466 |
467 | Tema 104: Dispositivos, sistemas de archivos Linux y el estándar de jerarquía de archivos
468 | 104.1 Creación de particiones y sistemas de archivos
469 | Importancia
470 |
471 | 2
472 | Descripción
473 |
474 | El candidato debe ser capaz de configurar particiones de disco para después crear sistemas de archivos en medios tales como discos duros. Se incluye el manejo de las particiones swap.
475 |
476 | Áreas de conocimiento clave:
477 |
478 | Administrar tablas de particiones MBR y GPT
479 | Usar diversos comandos mkfs para crear distintos sistemas de archivos tales como:
480 | ext2/ext3/ext4
481 | XFS
482 | VFAT
483 | exFAT
484 | Conocimientos básicos del sistema de archivos Btrfs, incluyendo los sistemas de archivos multidispositivo, la compresión y los subvolúmenes.
485 | Lista parcial de archivos, términos y utilidades:
486 |
487 | fdisk
488 | gdisk
489 | parted
490 | mkfs
491 | mkswap
492 |
493 | 104.2 Mantener la integridad de los sistemas de archivos
494 | Importancia
495 |
496 | 2
497 | Descripción
498 |
499 | El candidato debe ser capaz de mantener un sistema de archivos estándar así como los datos adicionales asociados a un sistema de archivos con registro de diario (journaling).
500 |
501 | Áreas de conocimiento clave:
502 |
503 | Verificar la integridad de los sistemas de archivos.
504 | Supervisar el espacio libre y los inodos.
505 | Solucionar problemas simples relacionados con los sistemas de archivos.
506 | Lista parcial de archivos, términos y utilidades:
507 |
508 | du
509 | df
510 | fsck
511 | e2fsck
512 | mke2fs
513 | tune2fs
514 | xfs_repair
515 | xfs_fsr
516 | xfs_db
517 |
518 | 104.3 Controlar el montaje y desmontaje de los sistemas de archivos
519 | Importancia
520 |
521 | 3
522 | Descripción
523 |
524 | El candidato debe ser capaz de configurar el montaje de un sistema de archivos.
525 |
526 | Áreas de conocimiento clave:
527 |
528 | Montar y desmontar sistemas de archivos de forma manual.
529 | Configurar el montaje del sistema de archivos en el arranque.
530 | Configurar sistemas de archivos extraibles y montables por el usuario.
531 | Uso de etiquetas e identificadores únicos universales (UUIDs) para la identificación y el montaje de sistemas de archivos.
532 | Conocimientos de las unidades de montaje de systemd.
533 | Lista parcial de archivos, términos y utilidades:
534 |
535 | /etc/fstab
536 | /media/
537 | mount
538 | umount
539 | blkid
540 | lsblk
541 |
542 | 104.4 Eliminado
543 |
544 | 104.5 Administración de los permisos y los propietarios de los archivos
545 | Importancia
546 |
547 | 3
548 | Descripción
549 |
550 | El candidato debe ser capaz de controlar el acceso a los archivos mediante el uso apropiado de sus permisos y propietarios.
551 |
552 | Áreas de conocimiento clave:
553 |
554 | Administrar los permisos de acceso a archivos regulares y especiales así como a directorios.
555 | Usar modos de acceso tales como el suid, el sgid y el sticky bit para mantener la seguridad.
556 | Saber cambiar la máscara de creación de archivos.
557 | Usar el campo grupo para otorgar acceso a archivos a miembros de un grupo.
558 | Lista parcial de archivos, términos y utilidades:
559 |
560 | chmod
561 | umask
562 | chown
563 | chgrp
564 |
565 | 104.6 Crear y cambiar enlaces duros y simbólicos
566 | Importancia
567 |
568 | 2
569 | Descripción
570 |
571 | El candidato debe ser capaz de crear y administrar los enlaces duros y simbólicos de un archivo.
572 |
573 | Áreas de conocimiento clave:
574 |
575 | Crear enlaces.
576 | Identificar enlaces duros y/o simbólicos.
577 | Copiar versus enlazar archivos.
578 | Usar enlaces para facilitar las tareas de administración del sistema.
579 | Lista parcial de archivos, términos y utilidades:
580 |
581 | ln
582 | ls
583 |
584 | 104.7 Encontrar archivos de sistema y ubicar archivos en el lugar correspondiente
585 | Importancia
586 |
587 | 2
588 | Descripción
589 |
590 | El candidato debe estar completamente familiarizado con el Estándar de Jerarquía del Sistema de Archivos (Filesystem Hierarchy Standard, FHS), incluyendo las ubicaciones típicas de archivos y la clasificación de directorios.
591 |
592 | Áreas de conocimiento clave:
593 |
594 | Entender las ubicaciones correctas de los archivos bajo el criterio del FHS.
595 | Encontrar archivos y comandos en un sistema Linux.
596 | Conocer la ubicación y finalidad de archivos y directorios importantes tal como se definen por el FHS.
597 | Lista parcial de archivos, términos y utilidades:
598 |
599 | find
600 | locate
601 | updatedb
602 | whereis
603 | which
604 | type
605 | /etc/updatedb.conf
606 |
--------------------------------------------------------------------------------
/docs/101-500/103:Comandos-GNU-y-Unix.md:
--------------------------------------------------------------------------------
1 | - [Tema 103: Comandos GNU y Unix](#tema-103-comandos-gnu-y-unix)
2 | - [103.1 Trabajar desde la linea de comandos](#1031-trabajar-desde-la-linea-de-comandos)
3 | - [ls](#ls)
4 | - [cp](#cp)
5 | - [rm](#rm)
6 | - [file](#file)
7 | - [Trabajando con directorios](#trabajando-con-directorios)
8 | - [mkdir](#mkdir)
9 | - [\$PATH](#path)
10 | - [103.2 Procesar secuencias de texto usando filtros](#1032-procesar-secuencias-de-texto-usando-filtros)
11 | - [103.3 Administración básica de archivos](#1033-administraci%c3%b3n-b%c3%a1sica-de-archivos)
12 | - [find](#find)
13 | - [which](#which)
14 | - [File Globing](#file-globing)
15 | - [dd](#dd)
16 | - [103.4 Uso de secuencias de texto, tuberías y redireccionamientos](#1034-uso-de-secuencias-de-texto-tuber%c3%adas-y-redireccionamientos)
17 | - [103.5 Crear, supervisar y matar procesos](#1035-crear-supervisar-y-matar-procesos)
18 | - [Revisar el estado del sistema](#revisar-el-estado-del-sistema)
19 | - [Monitorizar procesos](#monitorizar-procesos)
20 | - [Mantener un proceso corriendo](#mantener-un-proceso-corriendo)
21 | - [103.6 Modificar la prioridad de ejecución de los procesos](#1036-modificar-la-prioridad-de-ejecuci%c3%b3n-de-los-procesos)
22 | - [103.7 Realizar búsquedas en archivos de texto usando expresiones regulares](#1037-realizar-b%c3%basquedas-en-archivos-de-texto-usando-expresiones-regulares)
23 | - [103.8 Edición básica de archivos](#1038-edici%c3%b3n-b%c3%a1sica-de-archivos)
24 |
25 | # Tema 103: Comandos GNU y Unix
26 |
27 | ## 103.1 Trabajar desde la linea de comandos
28 |
29 | Comandos básicos para trabajar con ficheros.
30 |
31 | - `ls` - se utiliza para listar los archivos y directorios.
32 | - `touch` - es utilizado para modificar el sello de tiempo de un fichero, pero es mas comunmente utilizado para crear nuevos archivos.
33 | - `cp` - comando para copiar ficheros
34 | - `rm` - comando para borrar ficheros o carpetas.
35 | - `mv` - comando usado para mover.
36 | - `file` - se utiliza para para probar y determinar el tipo de un fichero.
37 |
38 | ### ls
39 |
40 | `ls -la` - **l** para listar y **a** para mostrar todos los archivo incluidos los ocultos
41 | `ls -lR` /etc/ - Lista recursivamente todas las capetas que hay en **/etc/**
42 |
43 | ### cp
44 |
45 | Copiar un directorio
46 |
47 | ```console
48 | cp -vR /etc etc_bak
49 | ```
50 |
51 | Con el parametro -i nos pide confirmació.
52 |
53 | ### rm
54 |
55 | Eliminamos un directorio utilizando `-rf`
56 |
57 | ```console
58 | sergio@ubuntu:~$ rm -rf etc_bak/
59 | ```
60 |
61 | ### file
62 |
63 | ```console
64 | sergio@ubuntu:~$ file .gitconfig
65 | .gitconfig: ASCII text
66 | ```
67 |
68 | ## Trabajando con directorios
69 |
70 | `cd` - comando para cambiar de directorio
71 | `mkdir` - para crear un directorio
72 | `rmdir` - eliminar un directorio
73 | `$PATH` - variable de entorno que describe el directorio donde los usuarios pueden ejecutar una aplicacion sin especificar la ruta completa.
74 |
75 | `cd -` volvemos al ultimo directorio en el que hemos estado.
76 | echo \$OLDPWD - nos devuleve el utimo directorio
77 |
78 | ```console
79 | sergio@ubuntu:~$ cd NAS/
80 | sergio@ubuntu:~/NAS$ cd -
81 | /home/sergio
82 | sergio@ubuntu:~$ echo $OLDPWD
83 | /home/sergio/NAS
84 | ```
85 |
86 | Para volver dos directorios atrás
87 |
88 | ```
89 | sergio@ubuntu:/etc/systemd/system$ cd ../..
90 | sergio@ubuntu:/etc$
91 | ```
92 |
93 | ### mkdir
94 |
95 | Para crear un directorio anidado dentro de otro utilizamos el parámetro `-p`
96 |
97 | ```bash
98 | mkdir -p Documents/notes
99 | ```
100 |
101 | ### \$PATH
102 |
103 | Todos los comandos que estén en la variable \$PATH, podrán ser ejecutados desde cualquier ruta del sistema.
104 |
105 | ```console
106 | sergio@ubuntu:~$ echo $PATH
107 | /home/sergio/gems/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
108 | ```
109 |
110 | ## 103.2 Procesar secuencias de texto usando filtros
111 |
112 | `less` - sirve para mostrar el texto de un fichero linea por linea
113 |
114 | `uniq` - omite las lineas repetidas
115 |
116 | ## 103.3 Administración básica de archivos
117 |
118 | Archivos y compresión de carpetas
119 |
120 | `dd` - copia y convierte archivos. Se utiliza para crear fichero de un determinado tamaño y realizar copias de seguridad de unidades de disco.
121 |
122 | `tar` - combina ficheros y directorios en un archivo. Este comando no proporciona compresión.
123 |
124 | `gzip` - comprime ficheros en formato gz.
125 |
126 | `gunzip` - descomprime ficheros en formato gz
127 |
128 | `bzip2` - comprime ficheros en formato bz2.
129 |
130 | `bunzip2` - descomprime ficheros en bz2.
131 |
132 | `xz` - comprime ficheros en formato xz.
133 |
134 | `unxz` - descomprime ficheros formato xz.
135 |
136 | Los diferentes tipos de ficheros que podemos encontrar en linux son:
137 |
138 | - **Archivos regulares**(-)
139 |
140 | - **Directory files(d)**
141 |
142 | - **Archivos especiales**:
143 | - Archivo bloqueado(b)
144 | - Carácter de archivo de dispositivo(c)
145 | - Named pipe file or just a pipe file(p)
146 | - Archivo de enlace simbólico(l)
147 | - Archivo de Socket (s)
148 |
149 | Buscar ficheros
150 |
151 | ### find
152 |
153 | `find`
154 |
155 | _-name_: para buscar por nombre de fichero.
156 |
157 | _-ctime_: encuentra ficheros basados en el momento que fueron modificados.
158 |
159 | _-atime_: encuentra ficheros basados en el momento que se accedió a ellos.
160 |
161 | _-empty_: -exec[command]{}\; ejecutamos un comando después de realizar una búsqueda, útil por ejemplo para eliminar todos los ficheros que encontremos vacios
162 |
163 | > El comando find busca recursivamente en la carpetas que esten jerarquicamente por debajo.
164 |
165 | ```console
166 | sergio@ubuntu:~$ sudo find / -name passwd
167 | /usr/bin/passwd
168 | /usr/share/lintian/overrides/passwd
169 | /usr/share/doc/passwd
170 | /usr/share/bash-completion/completions/passwd
171 | /etc/cron.daily/passwd
172 | /etc/passwd
173 | /etc/pam.d/passwd
174 | ```
175 |
176 | Buscar los ficheros del directorio home modificados en el ultimo día
177 |
178 | ```console
179 | sergio@ubuntu:~$ find . -ctime -1
180 | .
181 | ./a_file
182 | ./.bash_history
183 | ./Projects
184 | ./Documents
185 | ./Documents/notes
186 | ```
187 |
188 | Ficheros modificados en los últimos dos días
189 |
190 | ```console
191 | sergio@ubuntu:~$ find . -atime -2
192 | ```
193 |
194 | Buscar los ficheros vacíos (con `-f` buscamos los ficheros con `-d` los directorios)
195 |
196 | ```console
197 | sergio@ubuntu:~$find . -empty -type -f
198 | ```
199 |
200 | Borrar todos los ficheros vacios
201 |
202 | ```console
203 | find . -empty -type f -exec rm -fv {} \;
204 | ```
205 |
206 | Buscar en el home del usuario todos los archivos comprimidos y copiarlos a la carpeta test
207 |
208 | ```console
209 | find ~ -name "*.tar.*" -exec cp -v {} /home/sergio/test \;
210 | ```
211 |
212 | ### which
213 |
214 | `which` sirve para localizar donde esta instalado un paquete.
215 |
216 | ```console
217 | [sergio@hostingsoriano ~]$ which nginx
218 | /usr/sbin/nginx
219 | ```
220 |
221 | ### File Globing
222 |
223 | `*`: localiza cero o mas caracteres
224 |
225 | `?`: localiza cualquier caracter exacto.
226 |
227 | `[abc]`: localiza cualquier de los caracteres de la lista, es sensible a mayusculas.
228 |
229 | `[^abc]`: localiza cualquier caracter menos los de la lista.
230 |
231 | `[0-9]`: licaliza un rango de numeros.
232 |
233 | muestra los ficheros que empiezan por B o b y tienen extension js.
234 |
235 | ```console
236 | sergio@ubuntu:~/blockchain/curso-bitcoin-blockchain-piloto$ ls [Bb]*.js
237 | BasicCoin.js BasicPoWCoin.js
238 | ```
239 |
240 | Creamos varios directorios en una misma orden
241 |
242 | ```console
243 | sergio@ubuntu:~$ mkdir -p Projects/{A,B,C,D}
244 | sergio@ubuntu:~$ ls Projects/
245 | A B C D
246 | sergio@ubuntu:~$
247 | ```
248 |
249 | Ver el contenido de un archivo comprimido
250 |
251 | ```console
252 | catxz archivo.xz
253 | ```
254 |
255 | mostrar la columna 6 del archivo de usuarios passwd
256 |
257 | ```console
258 | sergio@ubuntu:~/$ cut -f 6 -d ':' /etc/passwd
259 | ```
260 |
261 | Combinar el contenido de dos ficheros
262 |
263 | ```console
264 | sergio@ubuntu:~$ paste file1 file2
265 | ```
266 |
267 | ### dd
268 |
269 | Nos sirve para crear una copia exacta de un dispositivo de almacenamiento, copiar una imagen a un pendrive, o cualquier tarea que requiere copiar o clonar información de un medio a otro.
270 |
271 | Podemos crear por ejemplo crear una copiar de seguridad del sistema de arranque:
272 |
273 | ```console
274 | sergio@ubuntu:~$ sudo dd if=/dev/vda of=/tmp/mbr.img bs=512 count=1
275 | 1+0 registros leídos
276 | 1+0 registros escritos
277 | 512 bytes copied, 0,0012344 s, 415 kB/s
278 | sergio@ubuntu:~$ ls /tmp/
279 | ```
280 |
281 | Es necesario un **origen**(if) y un **destino** (of)
282 |
283 | la opcion `bs=512` sirve para indicar que tanto en la lectura como en la escritura se hagan bloques de 512 BYTES
284 |
285 | Para copiar el MBR:
286 |
287 | ```console
288 | sudo dd if=/dev/hda |pv|dd of=mbr count=1 bs=512
289 | ```
290 |
291 | ## 103.4 Uso de secuencias de texto, tuberías y redireccionamientos
292 |
293 | Redirigiendo las salidas con los caracteres >,>>
294 |
295 | input y output
296 |
297 | input <, |
298 | abreviatura 'stdin'
299 |
300 | ```console
301 | wc test.sh (input proviene del teclado)
302 | wc < test.sh (input proviene de un arhivo)
303 | cat /etc/passwod | less (input proviene de stdout del comando cat)
304 | ```
305 |
306 | standar error -> 'stdeer'
307 |
308 | `tee`: concatenado con el comando find nos devuelve la salida de find en un fichero.
309 |
310 | ```console
311 | find / -iname "*.sh" | tee result.txt
312 | ```
313 |
314 | `xargs` : toma la entrada (el resultado de otro comando) normalmente `find` y lo pasa a otro comando
315 |
316 | Listar todas las carpetas de librerías disponibles, pasar a un fichero y ordenar en otro fichero
317 |
318 | ```console
319 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~ ls -d /usr/share/doc/lib[Xx]* | tee lib.docs.txt | sort -r | tee lib-docs-rev.txt
320 | ```
321 |
322 | Buscar todos los fichero con la extension sh e imprimir los resultados con el comando ls en un fichero.
323 |
324 | ```console
325 | find / -name "*.sh" | xargs ls -al > myresult.txt
326 | ```
327 |
328 | Buscar todos lo ficheros dentro de carpeta test que tengan la palabra junk y moverlos a la carpeta bak. el parámetro -l obtendrá el nombre del fichero.
329 |
330 | ```console
331 | grep -l "junk" test/file_* | xargs -I {} mv {} test/bak/
332 | ```
333 |
334 | Eliminar todos los ficheros que encontremos con locate
335 |
336 | ```
337 | sudo locate whatever | xargs rm -f
338 | ```
339 |
340 | ## 103.5 Crear, supervisar y matar procesos
341 |
342 | En este tema aprenderemos a ejecutar trabajos en primer y segundo plano, enviar señales a los programas para que se ejecuten despues de cerrar una sesión, supervisar procesos activos, ordenar los procesos para visualizarlos y enviar señales a los procesos.
343 |
344 | `man proc` - manual del del pseudo directorio del sistema de ficheros.
345 |
346 | `man 7 signal` - manual del los diferentes estados de las señales de procesos.
347 |
348 | ### Revisar el estado del sistema
349 |
350 | **Procesos**: son set de intrucciones que estan cargados en la memoria.
351 |
352 | `PID`: es el identificador del proceso
353 |
354 | `ps`: nos muestra los procesos
355 |
356 | > ps -a muestra todos los procesos.
357 |
358 | > ps -eH | less - muestra todos los procesos ordenados por jerarquia.
359 |
360 | > ps -u username - muestro los procesos de un usuario
361 |
362 | > ps -e --forest - muestra todos los procesos en arbol
363 |
364 | `top`: sirve para ver los proceso que hay activos
365 |
366 | Si pulsamos la tecla `k` y escribimos el PID del procesos lo matamos.
367 |
368 | ### Monitorizar procesos
369 |
370 | `uptime` para conocer el tiempo que lleva arrancado el sistem.
371 |
372 | ```console
373 | [sergio@hostingsoriano ~]$ uptime
374 | 21:48:41 up 2:06, 1 user, load average: 0,00, 0,01, 0,05
375 | ```
376 |
377 | `free`: sirve para conocer la memoria ram y de la partición de swap.
378 |
379 | ```console
380 | sergio@Lenovo:~/GITHUB/LPIC-1$ free -h
381 | total used free shared buff/cache available
382 | Mem: 7,5G 4,8G 609M 542M 2,1G 2,1G
383 | Swap: 2,0G 111M 1,9G
384 |
385 | ```
386 |
387 | `pgrep`: nos devuelve el PID del proceso basado en el nombre.
388 |
389 | > Con pgrep -a nginx nos muestra el proceso con la ruta completa.
390 |
391 | ```console
392 | [root@hostingsoriano sergio]# pgrep nginx
393 | 14686
394 | 14711
395 | [root@hostingsoriano sergio]# pgrep -a nginx
396 | 14686 nginx: master process nginx -g daemon off;
397 | 14711 nginx: worker process
398 | [root@hostingsoriano sergio]# pgrep -u sergio
399 | 13666
400 | 13667
401 | ```
402 |
403 | `kill`: mata el proceso con PID introducido, en caso de que el proceso tenga otros elementos depentiendes de el tambien matarar los procesos hijos. Envia una señal (normalmente SIGTERM) a un proceso basado en su PID
404 |
405 | `pstree` - nos muestra un arbol de los procesos.
406 |
407 | `pkill` - envía una señal (normalmente SIGTERM) a un proceso basado en su nombre(mata el proceso indicando el nombre).
408 |
409 | La diferencia entre SIGTERM y SIGKILL, es que el kill mata todos los procesos hijos, y SIGTERM solo el proceso en cuestión.
410 |
411 | > Se recomienda utilizar SIGTERM(15) antes de utilizar SIGKILL(9).
412 |
413 | ---
414 |
415 | ### Mantener un proceso corriendo
416 |
417 | Las tareas son procesos que son gestionados por con consola(shell). A cada tarea se asigna un ID se forma secuencial. Y puesto que cada tarea es un proceso tambien lleva asociado un PID.
418 |
419 | Tenemos que entender la diferencia que existe entre tareas que se ejecuta en primer plano(_foreground_) y en segundo plano(_background_).
420 |
421 | **Foreground**: una teare se ejecuta en primer plano cuando esta ha sido lanzada desde una terminal, la terminal se queda ocupada hasta que no ha temirnado de ejecutar la tarea.
422 |
423 | **Background**: cuando escribes una ampersand `&` al final de la ejecución que pasas por la linea de comandos. De esta manera el proceso se ejecuta en segundo plano.
424 |
425 | Una tarea o trabajo que ejecutemos puede tener diferentes estados:
426 |
427 | - **Runnung**: cuando se ejecuta en consola o segundo plano.
428 | - **Suspended**: pasa a suspendida cuando una vez lanzada pulsamos `control + z`
429 | - **Stopped**: la tarea se para cuando si es lanzada por consola presionamos `control + c`
430 |
431 | `killall` - mata todos los procesos basados en el nombre
432 |
433 | sudo killall nginx
434 |
435 | `watch` - ejecuta un comando en intervalos, por ejemplo df cada 5 segundos para saber si el disco se esta llenando.
436 |
437 | ```
438 | watch -n 5 df
439 | ```
440 |
441 | `screen` - permite ejecutar una consola en una nueva sesión, por ejemplo si nos conectamos a un servidor y queremos que se nos mantenga la consola abierta en caso de que perdamos la conexón.
442 |
443 | > Ejecutamos screen -r para volver a la sesion que habiamos dejado abierta
444 |
445 | > Para dejar en segundo plano tenemos que pulsar Control+a y Control+d
446 |
447 | `tmux` - es como screen pero con mas funciones.
448 |
449 | Ejemplos [aquí](http://www.sromero.org/wiki/linux/aplicaciones/tmux)
450 |
451 | Por ejemplo para conectarnos a un servidor
452 |
453 | 1. tmux - nos abre una nueva terminal bajo tmux.
454 | 2. Nos conectamos a un servidor remote (SSH).
455 | 3. Presionamos `Control+b+d` para volver a nuestro equipo(dejando la sesion abierta).
456 |
457 | `tmux ls` - para ver las sesioes abiertas.
458 |
459 | Para volver a una sesion abierta.
460 |
461 | ```
462 | tmux attach-session -t 0
463 | ```
464 |
465 | `nohup` - un comando que lanzemos escribiendo previeamente nohup, se seguira ejecutando hasta que no se cierre la sesion con la que nos hemos logado. Nos crea un fichero **nohup.out** que podemos consultar con tail.
466 |
467 | ```console
468 | sergio@Lenovo-ideapad-710S-Plus-13IKB ~/GITHUB/LPIC-1 master ●✚ nohup ping www.sergiosoriano.es &
469 | [1] 21518
470 | nohup: ignoring input and appending output to 'nohup.out'
471 | ⚙ sergio@Lenovo-ideapad-710S-Plus-13IKB ~/GITHUB/LPIC-1 master ●✚ jobs
472 | [1] + running nohup ping www.sergiosoriano.es
473 | ```
474 |
475 | `tail -f nohup.out`
476 |
477 | Para conocer el PID del proceso ejecutamos.
478 |
479 | ```console
480 | ⚙ sergio@Lenovo-ideapad-710S-Plus-13IKB ~/GITHUB/LPIC-1 master ●✚ jobs -l
481 | [1] + 21518 running nohup ping www.sergiosoriano.es
482 | ```
483 |
484 | `fg` - sirve para traer un tareas de segundo plano al primer plano. `fg %1` donde `%1` es el número de la tarea que podemos ver con la orden `jobs`.
485 |
486 | `bg` - sirve para ejecutar tareas suspendias en segundo plano. Si hemos lanzado una tarea y la hemos dejado en estado suspendido, podemos relanzarla en segundo plano ejecutando `bg %1`.
487 |
488 | [Ejemplos](https://www.thegeekdiary.com/understanding-the-job-control-commands-in-linux-bg-fg-and-ctrlz/)
489 |
490 | ## 103.6 Modificar la prioridad de ejecución de los procesos
491 |
492 | Manejar la prioridad de los procesos y ejeutar trabajos con diferentes prioridades.
493 |
494 | `nice` - sirve para asignar la prioridad de un proceso.
495 |
496 | `ps` - muestra los procesos activos. Con `ps -a` vemos todos los procesos.
497 |
498 | `renice` - para cambiar la prioridad de un proceso
499 |
500 | `top` - nos muestra los procesos activos.
501 |
502 | ## 103.7 Realizar búsquedas en archivos de texto usando expresiones regulares
503 |
504 | Buscar una cadena de texto en un fichero
505 |
506 | `grep -i 'texto' fichero`
507 |
508 | Con el parametro `-i` ignora si el texto esta en mayúsculas o minúsculas.
509 |
510 | `grep` - Podemos utilizarlo para buscar cadenas de texto en ficheros, directorios y salidas de otros comandos.
511 |
512 | `egrep` - Igual que el comando grep pero sin necesidad de añadir el parametro `-E` que nos permite extender el comando para utilizar expresiones regulares.
513 |
514 | `fgrep` - Igual que el comando grep opero sin necesidad de añadir el parametro `-F` que nos permite buscar cadenas de texto en **más de un** fichero que le indiquemos como parámetro.
515 |
516 | `sed` - Este comando nos permite modificar el contenido de fichetos de texto.
517 |
518 | `regex(7)` - Expresiones regulares. Mas información [aquí](http://man7.org/linux/man-pages/man7/regex.7.html)
519 |
520 | Ejemplos
521 |
522 | 1. Buscar el texto 'apache' recursivamente en el home del usuario
523 |
524 | ```s
525 | grep -Ril apache ~/
526 | ```
527 |
528 | 2.Buscar los usuarios que existen en el fichero de passwd que empiecen por ope y ademas tengan una
529 | 'n' o 'r' en la siguiente letra.
530 |
531 | ```s
532 | egrep '^ope(n|r)' /etc/passwd
533 | ```
534 |
535 | 3. Mostrar todas las cuentas que no tienen habilitado el login
536 |
537 | ```
538 | grep "nologin" /etc/passwd
539 | ```
540 |
541 | [Generador de expresiones regulares](https://regexr.com/)
542 |
543 | 4. Cambia la palabra web por web site del ficher myfile
544 |
545 | ```s
546 | sed 's/web/website/' ./myfile
547 | ```
548 |
549 | 5. Buscar el shell de bash y reemplazarlo con el shell csh en el archivo /etc./passwd utilizando sed
550 |
551 | ```s
552 | sed 's!/bin/bash!/bin/csh!' /etc/passwd
553 | ```
554 |
555 | Más ejemplos [aquí](http://www.sromero.org/wiki/linux/aplicaciones/uso_de_sed)
556 |
557 | ## 103.8 Edición básica de archivos
558 |
559 | Uso de VI
560 |
561 | - [] Navegar por un documento usando vi.
562 | - [] Entender y usar los modos de vi.
563 | - [] Insertar, editar, borrar, copiar y encontrar texto usando vi.
564 | - [] Conocimientos de Emacs, nano y vim.
565 | - [] Configurar el editor estándar.
566 |
567 | `/, ?` - buscar una cadena de texto
568 |
569 | `h,j,k,l` - la misma funcion que las flechas de movimiento, arriba, abajo, izquierda y derecha entre carćteres y lineas.
570 |
571 | `i, o, a` - para insertar caracteres, con `i` a la izquierda, `o` añade una nueva linea y con `a` a la derecha del cursor.
572 |
573 | `d, p, y, dd, yy` - `d` para eliminar , `p` para pegar y `y` para copiar.
574 |
575 | `dd` - elimna la linea completa sobre la que estas situado
576 |
577 | `yy` - copia la linea.
578 |
579 | `p` - pega el texto copiado.
580 |
581 | `ZZ, :w!, :q!`
582 |
583 | `:w!` - guardar.
584 |
585 | `:q!` - salir sin guardar.
586 |
587 | `ZZ` - guarda el documento y salir.
588 |
589 | https://vim.fandom.com/wiki/Vim_Tips_Wiki
590 |
591 | Mas información [aquí](https://www.thegeekdiary.com/basic-vi-commands-cheat-sheet/)
592 |
--------------------------------------------------------------------------------