Skip to content

Commit 76c5c08

Browse files
committed
Added more sections
1 parent 9a3a748 commit 76c5c08

7 files changed

Lines changed: 662 additions & 16 deletions

File tree

Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
# Gestión de paquetes
2+
3+
## Introducción
4+
5+
En los sistemas Linux existen varios métodos para instalar programas en el sistema. La opción más primitiva y abierta es descargar el código fuente del programa, compilarlo e instalarlo asegurándonos previamente que tenemos todas las dependencias instaladas. Este método de instalación provee generalmente de un fichero `Makefile` con el listado de instrucciones para ser usadas por el comando `make` para compilar e instalar.
6+
7+
La otra opción para manejar la gestión de aplicaciones es usar un gestor de paquetes. Un gestor de paquetes es un conjunto de programas que se encargan de instalar, actualizar y eliminar aplicaciones del sistema de forma automática.
8+
9+
Los programas en Linux vienen empaquetados (y comprimidos) en un único fichero donde además de la funcionalidad del programa trae información sobre sí mismo, dependencias, hash de verificación, distribuidor, versión, etc. Existen diferentes formatos de paquetes que están enfocados en distribuciones específicas como `.deb` o `.rpm`. Las más generales utilizan `.tar.gz` o `.tar.xz`
10+
11+
El gestor de paquetes puede variar en función de la distribución que estemos usando, pero todos cumplen la misma funcionalidad común.
12+
13+
Ejemplos de gestores de paquetes:
14+
15+
- `zypper` - utilizados en sistemas SUSE y openSUSE entre otros.
16+
- `dpkg`, `apt-get` y compañía - utilizados en sistemas basados en Debian (existen muchos basados en estos como `snap`, `aptitude`, `synaptic`, etc).
17+
- `pacman` - utilizados en sistemas basados en Arch (`yay` y derivados para el repositorio AUR).
18+
- `rpm`, `yum` y su sucesora `dnf` - utilizados en sistemas basados en Red Hat Enterprise Linux.
19+
- `nix` - gestor de paquetes sin distribución específica
20+
- `portage` - utilizados en sistemas basadaos en Gentoo
21+
22+
Las distribuciones que utilizan gestores de paquetes obtienen sus paquetes de **repositorios**. Los repositorios son servidores públicos cuyo objetivo es almacenar paquetes a disposición de los usuarios. Existen repositorios oficiales y no oficiales. Los paquetes que provienen de repositorios oficiales son mantenidos por las entidades que crearon la distribución. Los repositorios no oficiales son mantenidos por la comunidad para aportar paquetes que los creadores de la distribución no admiten como paquetes core por diversos motivos (por ejemplo, filosofía OpenSource).
23+
24+
> Los siguientes ejemplos están basados sobre una máquina Ubuntu, cuyo gestor de paquetes oficial más utilizado es `apt`.
25+
> Todos los ejemplos de comandos precedidos con un `#` indican que requieren de permisos de superusuario para ser ejecutados. Los que empiezan por `$` pueden ser ejecutados por cualquier usuario común.
26+
27+
## Gestión de paquetes en Ubuntu.
28+
29+
El gestor de paquetes `apt` está separado en diferentes programas independientes:
30+
31+
- `apt-get`: Encargado de instalar, desinstalar, actualizar paquetes y sincronizar la lista de paquetes con los repositorios.
32+
- `apt-cache`: Encargado de servir información relacionada con los paquetes (buscar paquetes, mostrar información de paquetes, etc).
33+
- `apt`: Sucesor de `apt-get` y `apt-cache` cuya API aún no es del todo estable, pero es bastante funcional.
34+
- `apt-key`: Encargado de manipular la lista de claves para autenticar paquetes. Útil si utilizamos repositorios externos, ya que las claves de los repositorios oficiales son manejadas automáticamente.
35+
`add-apt-repository`: Encargado de añadir o eliminar un repositorio de la lista de repositorios.
36+
37+
El listado de repositorios habilitados se encuentra en `/etc/apt/sources.list`.
38+
39+
### Sincronizar caché de paquetes con los repositorios
40+
41+
Para saber qué paquetes están disponibles en los repositorios junto con sus versiones hace falta sincronizarse con los repositorios que tengamos configurados. Este proceso es importante a la hora de instalar paquetes ya que sin él podríamos requerir un paquete que ya no exista o sea demasiado antiguo.
42+
43+
Para actualiza la caché de paquetes utilizamos el comando:
44+
45+
```shell
46+
# apt-get update
47+
```
48+
49+
O con `apt`:
50+
51+
```shell
52+
# apt update
53+
```
54+
55+
### Instalar y actualizar paquetes específicos
56+
57+
Para instalar paquetes utilizamos el comando:
58+
59+
```shell
60+
# apt-get install <package1> <package2> ... <packageN>
61+
```
62+
63+
Ejemplo:
64+
65+
```shell
66+
# apt-get install nodejs npm
67+
```
68+
69+
Admite varias opciones como `-q` para instalación silenciosa, `-s` para realizar simulación de instalacíon sin realmente añadirlo al sistema o `-y` para que no nos pida confirmación de instalación.
70+
71+
Si intentamos instalar un paquete que esté instalado ya en el sistema intentará actualizarlo si existiesen nuevas versiones del mismo. En caso de no haber actualizaciones no realizará cambios en el sistema a menos que utilicemos los flags que empiezan por `--allow` (man apt-get) para forzar una reinstalación. También podemos especificar que sólo actualice paquetes sin añadirlos en caso de que no estuviese previamente instalados con el flag `--only-upgrade`.
72+
73+
También podemos utilizar `apt`:
74+
75+
```shell
76+
# apt install nodejs npm
77+
```
78+
79+
### Actualizar todos los paquetes:
80+
81+
Para actualizar todos los paquetes con versiones nuevas disponibles sin tener que especificar uno por uno utilizaremos el comnado:
82+
83+
```shell
84+
# apt-get upgrade
85+
```
86+
87+
O utilizando `apt`:
88+
89+
```shell
90+
# apt upgrade
91+
```
92+
93+
Para obtener un listado de paquetes con actualizaciones nuevas podemos ejecutar:
94+
95+
```shell
96+
$ apt list --upgradable
97+
```
98+
99+
Con `apt-get` no existe una forma simple de ver este listado, pero una opción es utilizar la opción `-s` para simular la actualización y así ver los paquetes:
100+
101+
```shell
102+
$ apt-get upgrade -s
103+
```
104+
105+
### Eliminar paquetes:
106+
107+
Para eliminar paquetes utilizaremos el comando:
108+
109+
```shell
110+
# apt-get remove <package1> <package2> ... <packageN>
111+
```
112+
113+
Ejemplo:
114+
115+
```shell
116+
# apt-get remove nodejs npm
117+
```
118+
119+
Admite diversos flags como `-y` para no pedir confirmación, `-s` para simular el borrado, etc.
120+
121+
Si añadimos el signo `+` al final del nombre del paquete lo instalará en vez de borrar. Por ejemplo, `nodejs+` instalará `nodejs` en vez de borrarlo.
122+
123+
Es importante saber que `apt-get remove` elimina los paquetes pero deja los ficheros de configuración en el sistema. Para eliminar también sus ficheros de configuración utilizaremos `apt-get purge`:
124+
125+
```shell
126+
# apt-get purge nodejs npm
127+
```
128+
129+
Si utilizamos `apt` tenemos tanto `apt remove` y `apt purge` para las dos operaciones mencionadas.
130+
131+
Si por algún motivo tenemos alguna dependencia _huérfana_ de paquetes, es decir, dependencias que no han sido eliminadas al desinstalar un paquete utilizaremos el siguiente comando para eliminarlas:
132+
133+
```shell
134+
# apt-get autoremove
135+
```
136+
137+
O utilizando `apt`:
138+
139+
```shell
140+
# apt autoremove
141+
```
142+
143+
### Buscar paquetes en los repositorios:
144+
145+
Para buscar paquetes en los repositorios utilizaremos:
146+
147+
```
148+
$ apt-cache search <package>
149+
```
150+
151+
Esto buscará en los repositorios los paquetes que tengan relación directa o indirecta con el nombre del paquete que hayamos puesto o paquetes con nombres similares.
152+
153+
Ejemplo:
154+
155+
```
156+
$ apt-cache search npm
157+
```
158+
159+
Utilizando `apt`:
160+
161+
```
162+
$ apt search npm
163+
```
164+
165+
### Ver datos de un paquete:
166+
167+
Para obtener información de uno o varios paquetes utilizaremos:
168+
169+
```
170+
$ apt-cache show <package1> <package2> ... <packageN>
171+
```
172+
173+
Ejemplo:
174+
175+
```
176+
$ apt-cache show npm
177+
```
178+
179+
````
180+
O si utilizamos `apt`:
181+
182+
```
183+
$ apt show npm
184+
```
185+
186+
### Mostrar paquetes instalados
187+
188+
La interfaz de `apt-cache` no tiene ningún flag para obtener un listado de paquetes instalado, pero el comando `dpkg` sí:
189+
190+
```
191+
$ dpkg -l
192+
```
193+
194+
Todos los paquetes que comiencen por `ii` están instalados en el sistema.
195+
196+
Utilizando `apt`:
197+
198+
```
199+
$ apt list --installed
200+
```
201+
202+

00-fundamentos-linux/01-entornos-linux/01-gestion-de-entorno.md renamed to 00-fundamentos-linux/01-entornos-linux/02-gestion-de-entorno.md

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Comandos de gestión del sistema
1+
# Comandos de gestión del entorno
22

33
## top
44

@@ -183,7 +183,6 @@ tcp6 0 0 :::111 :::* LISTEN
183183
tcp6 0 0 :::22 :::* LISTEN
184184
```
185185

186-
187186
## ps
188187

189188
El comando `ps` muestra un reporte de los procesos actuales del sistema.
@@ -206,8 +205,45 @@ vagrant 13528 13527 0 19:07 pts/2 00:00:00 -bash
206205
vagrant 16167 13528 0 19:38 pts/2 00:00:00 ps -fu vagrant
207206
```
208207

209-
## networking
210-
ping
211-
nslookup
212-
ip
213-
ifconfig
208+
## kill
209+
210+
El comando `kill` se utiliza para enviar señales al _PID_ o _Process ID_ que represente a un proceso. Existen diferentes señales que podemos ver mediante:
211+
212+
```shell
213+
$ kill -L
214+
```
215+
216+
Para enviar señales a un proceso podemos escribirlo de varias formas:
217+
218+
- `-<ID-SEÑAL>`: `kill -15 229`
219+
- `-SIG<SEÑAL>`: `kill -SIGTERM 229`
220+
- `<SEÑAL>`: `kill SIGTERM 229`
221+
- `-s <SEÑAL>`: kill -s SIGTERM 229
222+
223+
Para ver el objetivo de cada señal podemos verlos con `man signal 7`. También un programa puede actuar de una forma u otra dependiendo de la señal que enviemos, por ejemplo, la señal `SIGHUP` en un proceso Nginx recarga su configuración o `SIGQUIT` espera a que todas las conexiones establecidas sean cerradas antes de abortar el proceso, a diferencia de `SIGTERM` que corta las conexiones y sale directamente.
224+
225+
Si no especificamos una señal por defecto se enviará `TERM`.
226+
227+
```shell
228+
$ yes > /dev/null &
229+
[3] 13402
230+
$ ps 13402
231+
PID TTY STAT TIME COMMAND
232+
13402 pts/0 R 0:03 yes
233+
$ kill -SIGSTOP 13402
234+
$ ps 13402
235+
PID TTY STAT TIME COMMAND
236+
13402 pts/0 T 0:17 yes
237+
238+
[3]+ Stopped yes > /dev/null
239+
$ kill -SIGCONT 13402
240+
$ ps 13402
241+
PID TTY STAT TIME COMMAND
242+
13402 pts/0 R 0:18 yes
243+
$ kill -SIGTERM 13402
244+
$ ps 13402
245+
PID TTY STAT TIME COMMAND
246+
[3]- Terminated yes > /dev/null
247+
$ ps 13402
248+
PID TTY STAT TIME COMMAND
249+
```

00-fundamentos-linux/02-trabajando-con-la-cli/00-comandos-basicos.md

Lines changed: 74 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,6 @@ File found: ./folder0/file1.txt
297297
File found: ./file1.txt
298298
```
299299

300-
301300
## grep
302301

303302
El comando `grep` se utiliza para buscar ocurrencias de cadenas de texto en uno o más ficheros. En este ejemplo vamos a buscar el modelo de CPU del sistema.
@@ -330,7 +329,6 @@ user1:x:1001:1001::/home/user1:/bin/bash
330329
$ grep "/bin/bash" /etc/passwd | grep -v vagrant
331330
root:x:0:0:root:/root:/bin/bash
332331
user1:x:1001:1001::/home/user1:/bin/bash
333-
$
334332
```
335333

336334
Podemos combinar múltiples flags. En este caso vamos a buscar todas las opciones de configuración del servidor SSH pero excluyendo comentarios y líneas vacías:
@@ -382,3 +380,77 @@ $ grep -R "^Aug 20 15:17" /var/log/
382380
```
383381

384382
El comando `grep` acepta diferentes tipos de tokens para utilizar expresiones regulares. [Aquí](https://linuxize.com/post/regular-expressions-in-grep/) se recopilan varios ejemplos sobre expresiones regulares.
383+
384+
## head
385+
386+
El comando `head` se utiliza para mostrar líneas del principio de un fichero. Por defecto muestra las 10 primeras líneas, pero podemos especificar cuántas utilizando el flag `-n <number>` o `-<number>`:
387+
388+
```shell
389+
$ head /etc/passwd
390+
root:x:0:0:root:/root:/bin/bash
391+
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
392+
bin:x:2:2:bin:/bin:/usr/sbin/nologin
393+
sys:x:3:3:sys:/dev:/usr/sbin/nologin
394+
sync:x:4:65534:sync:/bin:/bin/sync
395+
games:x:5:60:games:/usr/games:/usr/sbin/nologin
396+
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
397+
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
398+
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
399+
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
400+
```
401+
402+
```shell
403+
$ head -n 3 /etc/passwd
404+
root:x:0:0:root:/root:/bin/bash
405+
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
406+
bin:x:2:2:bin:/bin:/usr/sbin/nologin
407+
```
408+
409+
```shell
410+
$ head -3 /etc/passwd
411+
root:x:0:0:root:/root:/bin/bash
412+
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
413+
bin:x:2:2:bin:/bin:/usr/sbin/nologin
414+
```
415+
416+
## tail
417+
418+
El comando `tail` se utiliza para mostrar las últimas líneas de un fichero. Por defecto muestra las últimas 10 líneas pero podemos especificar cuántas utilizando el flag `-n <number>` o `-<number>`:
419+
420+
```shell
421+
$ tail /etc/passwd
422+
tcpdump:x:108:114::/nonexistent:/usr/sbin/nologin
423+
landscape:x:109:116::/var/lib/landscape:/usr/sbin/nologin
424+
pollinate:x:110:1::/var/cache/pollinate:/bin/false
425+
sshd:x:111:65534::/run/sshd:/usr/sbin/nologin
426+
_rpc:x:112:65534::/run/rpcbind:/usr/sbin/nologin
427+
statd:x:113:65534::/var/lib/nfs:/usr/sbin/nologin
428+
vagrant:x:1000:1000:vagrant,,,:/home/vagrant:/bin/bash
429+
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
430+
vboxadd:x:998:1::/var/run/vboxadd:/bin/false
431+
user1:x:1001:1001::/home/user1:/bin/bash
432+
```
433+
434+
```shell
435+
$ tail -n 3 /etc/passwd
436+
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
437+
vboxadd:x:998:1::/var/run/vboxadd:/bin/false
438+
user1:x:1001:1001::/home/user1:/bin/bash
439+
```
440+
441+
```shell
442+
$ tail -3 /etc/passwd
443+
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
444+
vboxadd:x:998:1::/var/run/vboxadd:/bin/false
445+
user1:x:1001:1001::/home/user1:/bin/bash
446+
```
447+
448+
Otro flag útil es `-f` para mostrar las líneas nuevas que se hayan añadido al fichero en tiempo real.
449+
450+
## less
451+
452+
El comando `less` se utiliza para visualizar el contenido de un fichero. El contenido es mostrado de forma interactiva y podemos navegar por el fichero utilizando las flechas del teclado. Presionando la tecla `h` podemos ver el menú de ayuda con sus atajos disponibles.
453+
454+
```shell
455+
$ less /etc/passwd
456+
```

0 commit comments

Comments
 (0)