0% encontró este documento útil (0 votos)
32 vistas42 páginas

Cap 5

El capítulo 5 detalla comandos básicos de Linux, incluyendo 'ls' para listar archivos y directorios, 'ps' para mostrar procesos activos, y 'kill' para finalizar procesos. También se abordan comandos como 'find' para buscar archivos según diferentes criterios y 'locate' para buscar en una base de datos. Finalmente, se presenta 'top' para monitorear procesos en tiempo real y su uso de recursos del sistema.

Cargado por

ivanimalitos
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
32 vistas42 páginas

Cap 5

El capítulo 5 detalla comandos básicos de Linux, incluyendo 'ls' para listar archivos y directorios, 'ps' para mostrar procesos activos, y 'kill' para finalizar procesos. También se abordan comandos como 'find' para buscar archivos según diferentes criterios y 'locate' para buscar en una base de datos. Finalmente, se presenta 'top' para monitorear procesos en tiempo real y su uso de recursos del sistema.

Cargado por

ivanimalitos
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Capítulo 5 - Comandos básicos

5.1 Comando ls
El comando ls (del inglés list, cuya traducción es lista, listado o listar), muestra un listado con los
archivos y directorios de un determinado directorio. Los archivos y directorios cuyo nombre
comienza con . (punto) no se muestran con la instrucción ls, por lo que se suelen denominar
«archivos ocultos».

1- Mostrar archivos ocultos

ls -a

2- Listar con formato largo

ls -l

3- Formato largo con archivos ocultos.

ls -la

4- Saber quien creo el archivo (viendo el usuario al lado de cada archivo) y con formato
largo

ls --author -l

5- Mostrar solo el autor, con formato simple.

ls -g

6- Formato, por ejemplo saber cuantos megas ocupan los archivos.

ls --block-size=M -l
ls --block-size=K -l

7- Ordenar por nombre teniendo en cuenta cuando se modificaron por última vez.

ls -cl

8- Con formato largo y con total de cuanto pesan los archivos.

ls -lh

9- Saber rápidamente cuales son carpetas y cuales archivos

ls -F

10- Ordenado al revés.

46
ls -r

11- Orden de árbol, incluyendo contenido de los directorios.

ls -R

12- Ordenar archivos por tamaño

ls -lS

13- Mostrar la versión del comando

ls --version

14- Mostrar UID y GID de los archivos

ls -n

15- Listar separando con comas

ls -m

16- TIP - Saber la fecha de instalación de tu Linux

ls -lct /etc | tail -1 | awk '{print $6, $7, $8}'

Y para tener además un detalle de la hora le agregamos unos parámetros:

ls -lct --time-style=+"%d-%m-%Y %H:%M:%S" /etc | tail -1 | awk


'{print $6, $7, $8}'

47
5.2 Comando ps
Presenta una lista con los procesos activos en el equipo, indicando:
● PID es una ID de proceso del comando en ejecución (CMD)
● TTY es un lugar donde se ejecuta el comando en ejecución
● TIME informa sobre cuánto tiempo usa la CPU mientras ejecuta el comando
● CMD es un comando que se ejecuta como un proceso actual

1- Filtrar procesos por su usuario

ps -u USUARIO

Para ver todos los procesos

ps -A

2- Filtrar procesos por uso de CPU o memoria

Otra cosa que es posible es filtrar el resultado por uso de CPU o memoria. Con esto, se
puede obtener información sobre los procesos que consumen los recursos, para hacer esto
vamos a usar el parámetro -aux

ps -aux | less

3- Qué proceso consume más procesador.

ps -aux --sort -pcpu | less

4- Qué proceso consume más memoria ram.

ps -aux --sort -pmem | less

5- Podemos combinar las opciones 4 y 5, además de mostrar el TOP 10

ps -aux --sort -pcpu,+pmem | head -n 10

6- Filtra los procesos por su nombre o ID de proceso

Para hacer esto usando el parámetro -C, seguido del nombre o ID. Digamos que queremos
mostrar procesos de firefox. Podemos escribir:

ps -C firefox

48
5.3 Comando Kill, pkill y killall
Al matar un proceso se envía una señal de interrupción a uno o a varios procesos. Suele
usarse para finalizar su ejecución.

1- Matar un proceso con kill

kill 63772

Se va a usar (SIGTERM), que solicita al proceso limpiar su estado y salir.

SIGINT

Se produce cuando el usuario presiona la combinación de teclas Control+C. (o en su


defecto la equivalente) para matar un proceso. Puede ser controlada o ignorada por un
manejador de señales.

SIGTERM

Señal que se envía el proceso para comunicarle un apagado “amable” (cerrando


conexiones, ficheros y limpiando sus propios búfer). También puede ser controlada o
ignorada por un manejador de señales del proceso. Es la señal que mandan por defecto: kill
y killall desde la terminal.

SIGKILL

Esta señal provoca un apagado forzoso del proceso. A diferencia de las anteriores, no
puede ser ignorada ni manejada por un controlador de señales. Es la manera más segura
de matar un programa si no podemos hacerlo de las formas anteriores.

Versión corta del comando

kill -9 63772

2- Matar varios procesos

kill -9 pid1 pid2 pid3

3- Pkill es una variación del comando kill. Con esta variación puedes especificar el nombre
del proceso o un patrón para encontrar un proceso:

pkill firefox

Un ejemplo de killall es

killall firefox

Aclaración: La diferencia básica entre killall y kill es que killall puede terminar el proceso
por nombre mientras el comando kill usa el pid.

49
Esto es similar a pkill. Sin embargo, killall hace una coincidencia de nombre exacto,
mientras que pkill puede hacer una coincidencia de patrón. Esta es una de las razones por
las que killall es más seguro en comparación con pkill.

50
5.4 Comando Find
find es un comando común en sistemas Unix que se utiliza para encontrar archivos
en un determinado directorio a partir de diversas reglas de búsqueda, tales como
nombre exacto de archivo, fecha de creación, tamaño, permisos, etc.

Estructura

find <directorio_de_busqueda> <opciones> <terminos_a_buscar>

/ Buscar en la raíz, o sea en toda la estructura.


. Buscar en la carpeta actual, para saber dónde estamos parados usamos pwd.
~ Buscar en la carpeta personal.

1- Ejemplo de buscar un archivo buscar.txt que debemos crear primeramente.

touch /home/nk2/Documentos/buscar.txt
find / -name "buscar.txt"

-name busca pero distingue entre mayúsculas y minúsculas. Si no estas seguro o no sabes
si el archivo a buscar tiene o alguna letra en mayúscula o minúscula, es recomendable usar
-iname que busca sin distinguir:

find / -iname "Buscar.txt"

2- Buscar archivos por extensión

find . -name "*.txt"

3- Buscar y eliminar

find . -name "archivo" -delete

4- Búsquedas por tipo

find / -type d -name "Documentos"

f – archivo normal
d – directorio o carpeta
l – enlace simbólico
c – dispositivos de caracteres
b – dispositivos de bloque

5- Búsqueda por fecha

51
Buscar archivos por su fecha de acceso y fecha de modificación, hay 3 registros de tiempo
que podemos usar:

Tiempo de acceso (-atime) – Fecha más reciente en que el archivo fue leído o escrito.

Tiempo de modificación (-mtime) – Fecha más reciente en que se ha modificado el archivo.

Hora de cambio (-ctime) – Fecha más reciente en que se actualizaron los metadatos del
archivo.

5.1- Esta opción debe usarse con un número. Este número especifica el número de días
desde que se accedió, modificó o cambió el archivo. La forma más sencilla de buscar
archivos por tiempo es:

find / -atime -1

Este ejemplo se localizaran todos los archivos a los que se accedió hace un día desde el
momento actual. Por lo tanto se listaran todos los archivos que fueron leídos y/o escritos
desde el día anterior.

5.2- Podemos hacer que nuestras consultas sean más precisas con los signos más (+) y
menos (–) precediendo al número de días. Por ejemplo:

find / -mtime +2

Esto listará todos los archivos que tienen un tiempo de modificación de más de dos días.

5.3- Para buscar todos los archivos cuyos metadatos de inodo se actualizaron hace menos
de un día, ejecuta lo siguiente:

find / -ctime -1

5.4- Vamos a ver argumentos adicionales además de estos 3 que también están
relacionados con las búsquedas por fecha. El argumento -mmin buscará archivos que se
modificaron hace menos de un minuto.

find / -mmin -1

6- Búsqueda por tamaño

Estructura: find <directorio> -size <magnitud> <unidad>

b: Bloques de 512 bytes (predeterminado)


c: bytes
w: palabras de dos bytes

52
k: Kilobytes
M: Megabytes
G: Gigabytes

6.1- Buscar archivos de 10 Megabytes

find / -size 10M

6.2- Buscar archivos que tengan más de 5 Gigabytes

find / -size +50M

7- Búsqueda por propiedad

7.1- Para buscar archivos de un determinado propietario, se debe ejecutar el siguiente


comando:

find / -user nk2

7.2- Buscar por grupo

find / -group soporte

8- Búsqueda por permisos

8.1- Buscar archivos que tengan permisos 644, que corresponde a archivos de lectura y
escritura.

find / -perm 644

8.2- Mostrará todos los archivos que tengan al menos el permiso 644.

find / -perm -644

9- Tips adicionales de búsquedas

9.1- Buscar archivos vacíos.

find / -empty

10- Buscar y cambiar los permisos de los archivos

Vamos a crear una estructura de carpetas y archivos para realizar búsquedas avanzadas:
mkdir /home/nk2/Prueba
cd /home/nk2/Prueba
mkdir /home/nk2/Test1

53
mkdir /home/nk2/Test2
mkdir /home/nk2/Test3
touch /home/nk2/Test1/texto1.txt
touch /home/nk2/Test2/texto2.txt
touch /home/nk2/Test3/texto3.txt
cd /home/nk2/Prueba

10.1- Buscar y modificar todos los permisos de directorios (carpetas) a 777.

find /home/nk2/Prueba -type d -exec chmod 0777 {} \;

10.2- Modificar todos los permisos de archivos a 644

find /home/nk2/Test1/ -type f -exec chmod 0644 {} \;

11- Saber que archivos son ejecutables

find / -perm /a=x

54
5.5 Comando Locate
El comando locate es otra forma de buscar un archivo en Linux, este comando locate se
encarga de realizar las búsquedas haciendo uso de una base de datos donde se encuentra
toda la información y locate la consulta a ella directamente.

1- Locate no viene instalado en el sistema pero lo instalamos de la siguiente forma:

$ sudo yum install mlocate [en CentOS/RHEL]


$ sudo apt install mlocate [en Debian/Ubuntu]

2- La ruta de esta base de datos es.

/var/lib/mlocate/mlocate.db

3- Una vez instalado locate en el sistema, vamos a ejecutar el comando para actualizar la
base de datos:

updatedb

4- Buscar un archivo por su nombre

locate -b "texto1.txt"

-b: busca los archivos por nombre.


-e: muestra entradas de archivos existentes en el momento en que se ejecuta el comando
locate.
-q: inhabilita la visualización de errores encontrados en el proceso de búsqueda.
-c: muestra la cantidad de archivos que coinciden, en lugar de los nombres de los archivos

5- Locate permite saber cuántas veces coincide una palabra clave de búsqueda en la base
de datos, para ello, vamos a usar el parámetro -c en el comando, donde -c es igual a
conteo:

mkdir /home/nk2/Documentos/Prueba

locate -c Prueba

Locate a veces puede mostrar archivos que han sido eliminados. Esto se debe a que el
comando locate busca en la base de datos principal del sistema operativo Linux. Si esa
base de datos no se actualiza, incluso los archivos eliminados pueden aparecer en los
resultados de búsqueda.

55
5.6 Comando TOP
El comando top nos ayuda a conocer los procesos de ejecución del sistema (y más cosas)
en tiempo real y es una de las herramientas más importantes para un administrador. Nos
mostrará una gran cantidad de datos que se actualizan cada 3 segundos.

1- top – 16:29:19 up 9 min, 2 users, load average: 0,03, 0,21, 0,22


La primera línea es fácil, vemos:
● Hora y tiempo que hace que esta corriendo el sistema (up).
● Cantidad de usuarios que está mostrando 2 porque están corriendo nksistemas y
root.
● Carga promedio del equipo en load average.

2- Task: 137 total, 1 running, 136 slleping, 0 stopped, 0 zombie


Línea número 2, vemos la cantidad de tareas totales o procesos y en qué estado están:
● Running procesos ejecutándose actualmente o preparados para ejecutarse.
● Sleeping procesos dormidos esperando que pase algo (depende del proceso).
● Stopped proceso detenido.
● Zombie el proceso no está corriendo y quedan en este estado cuando el proceso
que los inició murió o fue matado con el comando kill.

3- %Cpu(s): 1,7 us, 0,3 sy, 0,0 ni, 98,0 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
Línea Número 3, nos muestra los porcentajes de uso del procesador diferenciado por el uso
que se le de.

● us (usuario): tiempo de CPU de usuario.


● sy (sistema): tiempo de CPU del núcleo (kernel).
● ni (nice): tiempo de CPU del usuario que tienen un “nice” positivo. Generalmente se
refiere a la prioridad de un proceso. (Los valores más positivos tienen prioridad
más baja, los valores más negativos tienen una prioridad más alta)
● id (inactivo): tiempo de CPU en procesos inactivos (idle).
● wa (en espera): tiempo de CPU en procesos en espera.
● hi (interrupciones de hardware): interrupciones de hardware.
● si (interrupciones de software): tiempo de CPU en interrupciones de software.
● st (steal time): sólo aplica cuando la distro corre en una máquina virtual. Es el tiempo
que algún proceso de nuestro sistema estaba esperando en la cola de ejecución,
pero el hypervisor eligió no darnos tiempo de procesador, y asignarlo a otro
procesador virtual.

4- KiB Mem: 2051776 total, 988684 used, 1063092 free, 55764 buffers
Línea número 4, hace referencia al uso de la memoria física del equipo.

● Memoria total.
● Memoria utilizada.
● Memoria libre.
● Memoria utilizada por buffer.

5- KiB Swap: 1012732 total, 0 used, 1012732 free. 513300 cached Mem

56
Línea número 5, utilización de la memoria virtual

● Memoria total.
● Memoria utilizada.
● Memoria libre.
● Memoria en caché.

6- PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND


Línea número 6, muestra el detalle de los procesos en general teniendo en cuenta lo
siguiente:

● PID: es el identificador de proceso.


● USER (USUARIO): usuario propietario del proceso.
● PR: prioridad del proceso. Si aparece un RT sigifica que corre en tiempo real.
● NI: asigna la prioridad. Si tiene un valor bajo (hasta -20) quiere decir que tiene más
prioridad que otro con valor alto (hasta 19).
● VIRT: cantidad de memoria virtual utilizada por el proceso.
● RES: cantidad de memoria RAM física que utiliza ese proceso.
● SHR: memoria compartida.
● S (ESTADO): estado del proceso. (S (sleeping), D (uninterruptible sleep), R
(running), Z(zombies), or T (stopped or traced))
● %CPU: porcentaje de CPU utilizado desde la última actualización.
● %MEM: porcentaje de memoria física utilizada por el proceso desde la última
actualización.
● TIME+ (HORA+): tiempo total de CPU que ha usado el proceso desde su inicio.
● COMMAND: comando utilizado para iniciar el proceso.

7- Podemos utilizar las siguientes teclas para ampliar el uso de TOP, esto es mientras está
corriendo:

M : Ordenar por uso de memoria


P : Ordenar por uso de CPU
T : Ordenar por tiempo de CPU utilizado
F : seleccionar campo por el cual ordenar la lista de procesos
i : mostrar u ocultar procesos idle y zombie
m, l, t, 1 : muestra u oculta las líneas del resumen (parte de arriba)
f, o : agregar/quitar columnas, cambiar el orden
s : cambia el tiempo de actualización de la pantalla (por defecto es de 3 segundos)
z : Cambia de color
k : Matar un proceso (luego pregunta el PID)
r : “renice” cambia el nice value de un proceso (luego pregunta el PID)
q : Salir de top
h : ayuda

57
5.7 Comando Uname
El comando uname proviene de la abreviatura Unix Name. Es una herramienta de línea de
comandos cuyo fin es el de mostrar información del sistema operativo como la versión del
mismo, kernel y detalles del equipo entre otras cosas.

1- Muestra el nombre del sistema.


uname -s

2- Da información del kernel.


uname -r

3- Nos da la fecha de publicación del Kernel


uname -v

4- Muestra el nombre del sistema operativo.


uname -o

5- Muestra el nombre de nuestro equipo (el que asignamos al momento de instalar el SO).
uname -n

6- Muestra la arquitectura de nuestro procesador (i386, i486, i586, i686).


uname -m

7- Muestra toda la información sobre el sistema que se está utilizando. Digamos que este
combina los anteriores.
uname -a

8- Da información del procesador. (en este caso al ser una virtual aparece como unknown)
uname -p

58
5.8 Comando LSOF
Lsof es una potente herramienta presente en la terminal de Linux sea cual sea la
distribución, y su función es mostrar los archivos abiertos en el sistema. Nos permite saber
de forma rápida, qué archivos está utilizando un determinado proceso (PID) o usuario e
información adicional como el puerto utilizado por dichos servicios/ficheros, sockets en uso,
etc.

1- Listar archivos abiertos de un determinado PID

lsof -p PID

Ejemplo, vamos a listar los ficheros abiertos de un PID perteneciente a Firefox, también
veremos los sockets y puertos en los que escucha el proceso:

Como vemos muestra información de gran utilidad, donde:


(COMMAND) es el servicio/comando al que pertenece el proceso.
(PID) número de proceso.
(USER) usuario que lo está ejecutando.
(FD) el descriptor de archivo.
(TYPE) tipo de nodo asociado con el fichero.
(DEVICE)número de dispositivo.
El tamaño del fichero y el nombre/ruta al mismo.

2- Listar ficheros abiertos en un dispositivo o partición:

Para evitar el típico fallo de no poder desmontarlo porque la partición o el dispositivo está en
uso: lsof /partición

lsoft /dev/mapper/cl-root

3- Listar ficheros abiertos de un determinado usuario:

lsof -u nk2

4- Ver actividad de red en tiempo real


Pese a que hay otras herramientas más indicadas para este tipo de tareas (véase iptraf,
iftop o tcpdump), lsof permite visualizar los puertos TCP y UDP en escucha así como las
conexiones activas en el sistema. Para ello utilizamos el parámetro «-i»

lsof -i

5- Si no queremos ver la actividad en tiempo real sino una foto del momento en el que
ejecutamos el comando, los parámetros a especificar son:

lsof -P -i -n

59
6- Comprobar servicios/puertos que están escuchando

lsof -i -nP

7- Ver archivos abiertos por un proceso o programa concreto


Con el parámetro «-c» podemos visualizar los archivos abiertos por un proceso en ejecución
así como los puertos en los que está escuchando y sus conexiones establecidas. El
siguiente ejemplo muestra los archivos y conexiones del proceso cupsd:

lsof -c top

8- Ver archivos en uso por un usuario en una carpeta o ruta.


El siguiente ejemplo muestra un listado de los archivos en uso dentro del filesytem /tmp por
parte del usuario «nksistemas»:

lsof -u nk2 -a +D /tmp

9- Visualizar archivos abiertos de un directorio/path concreto


El parámetro +D seguido de un path muestra los archivos abiertos de esa ruta especificada.
Por ejemplo, para mostrar los archivos abiertos y por qué usuario, en la ruta /etc:

lsof +D /etc

Para ver todas las opciones podemos hacer uso de:

man lsof

60
5.9 Editor de texto nano
Nano (oficialmente GNU nano) es el editor por defecto de distribuciones Linux como Debian,
si bien existe vi o vim, para algunos usuarios resulta un poco complejo.
Vamos a ver como usar nano, junto con los atajos del teclado que nos serán de mucha
utilidad.

La siguiente lista muestra algunas combinaciones con tecla CTRL, ALT y la tecla ESC más
usuales.

Comando Función

CTRL + G Mostrar la pantalla de ayuda

CTRL + O o F2 Guardar cambios

Ctrl + C Permite cancelar la operación de guardado y además,


ver el número de línea.
CTRL + X Salir de nano. Al ejecutar este «atajo», nano preguntará
si desea o no guardar los cambios en su archivo, otra
opción muy útil. Presione Y para guardar los cambios
(Yes), N para descartarlos (No), o CTRL + C para
cancelar la operación
CTRL + R Inserta el contenido de otro archivo desde la posición
actual, es un comando interactivo, por lo que se le
solicitará colocar nombre y/o ruta del archivo cuyo
contenido desea copiar
CTRL + W Buscador de texto

CTRL + \ Buscar y reemplazar

CTRL + / Ir a la línea, columna

CTRL + Y Ir a la página siguiente

CTRL + V Ir a la página anterior


Ctrl + 6 Marcar inicio de texto a Cortar
CTRL + K Cortar el texto de la línea actual
CTRL + U Pegar el texto desde la ubicación actual del cursor
Ctrl + B Permite volver atrás letra a letra.
Ctrl + V Permite ir al final del documento.
Ctrl + A Permite ir al principio de la línea o el texto.
Ctrl+I o TAB Inserta un carácter de tabulación.
Alt+A Para marcar el inicio del texto a copiar

61
Alt+G Va a una línea.

Alt+W Repite la última búsqueda.

Alt+U Deshacer la última operación.

Alt+E Rehacer la última operación deshecha.

Alt+T Corta desde el cursor hasta el final de la línea.

ESC+3 Comenta o descomenta la línea actual, o las marcadas.

ESC+6 Copia el texto marcado.

Ejemplos avanzados

1- Ir a una línea determinada y columna, respetando la estructura (nano +N_linea,N_


columna archivo)

nano +15,5 nano.txt

2- Abrir un archivo en modo de solo lectura

nano -v nano.txt

3- Abrir un archivo de configuración del sistema utilice la opción -w, esto evita que las líneas
muy largas se ajusten al tamaño del shell, lo que produce problemas de visualización y
eventualmente, errores en la edición:

nano -w archivo.txt

4- Ver el número de línea


Estando en el documento presionamos la combinación de tecla CTRL + C una vez.

62
5.10 Editor VI/VIM
El editor vi es un editor de texto que maneja en memoria el texto entero de un archivo. Es el
editor clásico de UNIX (se encuentra en todas las versiones de Linux). Puede usarse en
cualquier tipo de terminal con atajo de teclas, aunque puede ser un poco difícil de usar al
utilizarlo por primera vez.

Vim (del inglés Vi IMproved) es una versión mejorada del editor de texto Vi, presente en
todos los sistemas UNIX. Su autor, Bram Moolenaar, presentó la primera versión en 1991,
fecha desde la que ha experimentado muchas mejoras. La principal característica tanto de
Vim como de Vi consiste en que disponen de diferentes modos entre los que se alterna para
realizar ciertas operaciones, lo que los diferencia de la mayoría de editores comunes, que
tienen un solo modo en el que se introducen las órdenes mediante combinaciones de teclas
o interfaces gráficas. Esta guía servirá tanto para vi como para vim.

MODOS DE VI:

Existen tres modos o estados de vi:


● Modo comando: este es el modo en el que se encuentra el editor cada vez que se
inicia. Las teclas ejecutan acciones (comandos) que permiten mover el cursor,
ejecutar comandos de edición de texto, salir de vi, guardar cambios, etc.
● Modo inserción o texto: este es el modo que se usa para insertar el texto. Existen
varios comandos que se pueden utilizar para ingresar a este modo.
● Modo línea o ex: se escriben comandos en la última línea al final de la pantalla.

5.10.1 MODO COMANDO:

El editor vi, como todo UNIX, diferencia mayúsculas de minúsculas. A continuación se


muestran algunos comandos útiles en el manejo del editor. Movimiento del cursor:

Comando (teclas) Acción

Flechas Mover en la dirección de la flecha

h Mover hacia la izquierda

l Mover hacia la derecha

k Mover hacia arriba

j Mover hacia abajo

0 Nos lleva hasta el inicio de la línea actual

$ Nos lleva hasta el final de la línea actual

5.10.1.1 Cambio de modo comando a texto:

63
Comando Acción

i Inserta texto a la izquierda del cursor.

a Inserta texto a la derecha del cursor.

A Inserta texto al final de la línea donde se encuentra el cursor.

l Inserta texto al comienzo de la línea donde se encuentra el cursor.

o Inserta una línea debajo de la actual

O Inserta una línea encima de la actual

5.10.1.2 Borrar texto:

Comando Acción

x Borra el carácter bajo el cursor.

dd Borra la línea donde se encuentra el cursor.

ndd Borra las próximas n líneas.

D Borra desde donde se encuentra el cursor hasta el final de la línea.

dw Borra desde donde se encuentra el cursor hasta el final de una palabra.

Es importante destacar que todo lo que se borra queda almacenado en un buffer (área
temporal de memoria), de modo que si se borró algo por error, puede volver a escribirse (si
se hace antes de realizar otros cambios, es decir, inmediatamente luego de eliminar el texto
por error. Esto se hace simplemente ejecutando el comando p.

5.10.1.3 Cortar y pegar:

Esto implica mover partes del archivo de un lugar a otro del mismo. Para esto se debe:
● Cortar el texto que se desea mover utilizando alguno de los comandos usados para
borrar texto. (para cortar una línea presionamos dd)
● Mover el cursor (con alguno de los comandos utilizados para desplazar el cursor en
el texto) hasta el lugar donde se desee pegar el texto.
● Pegar el texto con el comando p en minúscula pegará hacia abajo. Con P mayúscula
pegará el contenido arriba de la línea del cursor.

5.10.1.4 Copiar y pegar:

En este caso lo que se hace es repetir partes del texto en otro lugar del archivo.

64
● Utilizar el doble y (yy), cuya función es copiar la línea donde se está el cursor.
● Mover el cursor (con alguno de los comandos utilizados para desplazar el cursor en
el texto) hasta el lugar donde se desee pegar el texto.
● Pegar el texto con el comando p en minúscula pegará hacia abajo. Con P mayúscula
pegará el contenido arriba de la línea del cursor.

5.10.1.5 Deshacer cambios:

Se puede deshacer el último cambio realizado, utilizando el comando u.

5.10.1.6 Buscar texto

Comando Acción

/texto Busca hacia adelante la cadena de caracteres “texto”

?texto Busca hacia atrás la cadena de caracteres “texto”

n Encuentra la siguiente coincidencia en una búsqueda

N Encuentra la coincidencia anterior en una búsqueda

5.10.1.7 Buscar y reemplazar


En modo comando hacemos:

:%s/Curso/Curso2/gc

Explicación:
:%s Para buscar y reemplazar
/Curso palabra a reemplazar
/Curso2 nuevo término a utilizar
/gc
● g: se realizará el reemplazo con todas las coincidencias.
● c: solicita confirmación.

Cuando nos pregunte la acción a realizar:


y: confirma la acción
n: saltar esa coincidencia y seguirá con otra
a: para a aplicar a todo
q: sale

5.10.2 MODO TEXTO:

En este modo se ingresa el texto deseado, usando las opciones por ejemplo i. Para pasar
de modo texto a modo comando nuevamente se debe presionar la tecla ESC.

65
5.10.3 MODO LÍNEA:

Para ingresar al modo línea desde el modo comando, se debe utilizar alguna de las
siguientes teclas:
● /
● ?
● :

Para volver al modo comando desde el modo última línea, se debe apretar la tecla ENTER
(al finalizar el comando) o la tecla ESC (que interrumpe el comando).

Salir de vi, salvar, no salvar cambios, etc.:

Comando Acción

:q Salir si no hubo cambios

:q! Fuerza salir sin guardar cambios

:w o :w ‘Archivo’ Guardar cambios

:w archivo1 Guardar cambios en archivo1

:wq o x! o ZZ Guardar cambios y salir

:n En el caso de tener varios archivos abiertos a la vez, nos


llevará al siguiente fichero.

:N En el caso de tener varios archivos abiertos a la vez, nos


llevará al fichero previo.

buffers Muestra un listado de los ficheros abiertos en el momento


de la solicitud y el estado en que se encuentran

buffer x Nos lleva al fichero que le indiquemos sustituyendo X por


el número de orden por el que se han abierto los archivos.

5.10.4 Trabajar con múltiples archivos

vi txt1 txt2 txt3

Para ver los nombres de los archivos que están abiertos en el modo comando hacemos:

:buffers

“” Si está vacío es que estuvimos en el archivo pero no volvimos.


%a Archivo que nos encontramos actualmente y editando.
# Archivo abierto en segundo plano

Finalmente vemos todas las opciones disponibles con:

66
man vi

67
5.11 Comando tar
Tar es una herramienta de línea de comandos utilizada para crear y manipular archivos de
almacenamiento en sistemas Linux y Unix. Tar puede extraer desde tar, pax, cpio, zip, jar,
ar, imágenes ISO 9660 y por supuesto, puede crear los archivos respectivos.

1- Comprimir archivos

tar czvf archivos.tar.gz archivo1.pdf archivo2.pdf

2- Para descomprimir, simplemente una letra

tar xzvf archivos.tar.gz

3- Listar archivos antes de descomprimir

tar tzvf archivos.tar.gz

4- Explicación:

c: Crear
z: gzip
v: verbose
f: nombreArchivo
x: Extraer
t: Listar

68
5.12 Comando systemctl
Los servicios, o demonios como también son conocidos en Linux, se gestionan mediante los
demonios Init o Systemd.
El primer servicio que inicia el Kernel de Linux es Init o Systemd. Seguidamente, init o
systemd son los encargados de cargar el resto de servicios del sistema operativo. Por lo
tanto Init o Systemd son los padres de todos los demonios o servicios que se inicializan en
nuestro sistema operativo.

Init y Systemd siempre están activos hasta que el sistema se apaga. Mientras estos
servicios estén activos los podremos usar para administrar los servicios que se inician y
paran en nuestro ordenador o servidor.

El comando systemctl es una herramienta que sirve para poder administrar los distintos
servicios que corren en nuestra distribución. Es el reemplazo a una herramienta que
conocíamos como SysVinit (SysVinit es uno de los más antiguos y vigentes Administradores
de sistemas y servicios para Sistemas basados sobre Linux. Todavía es muy usado sobre
muchas de las Distros GNU/Linux de trayectorias, y nuevas, como Devuan.).

La gran mayoría de los sistemas Linux modernos ya usan systemctl para administrar
systemd.

Para a ver cómo trabajar con esta herramienta, usando el servicio cron para mostrar el
funcionamiento.

1- Ver todos los servicios que están corriendo

systemctl

2- Ver el estado de un servicio

systemctl status cron

3- Iniciar un servicio

systemctl start cron

4- Parar un servicio

systemctl stop cron

5- Reiniciar un servicio

systemctl restart cron

6- Habilitar un servicio para que se inicie al encender el equipo

systemctl enable cron

69
7- Deshabilitar un servicio

systemctl disable cron

8- Recargar configuración, sin reiniciar el equipo.

systemctl reload cron

9- Opción para intentar primeramente recargar y si no se puede, lo que hace es un reinicio


del servicio. (no todos los servicios soportan reload).

systemctl reload-or-restart cron

10- Diferencias entre restart y reload

El reinicio del servicio se utiliza para parar y volver a iniciar el servicio, cada vez que
ejecutamos reiniciar, los usuarios existentes se desconectarán y se creará un nuevo PID
siendo el parámetro restart muy disruptivo, mientras que reload recargará sin dejar de dar
servicio.

11- Saber si un servicio está activo

systemctl is-active cron.service

12- Verificar si un servicio está habilitado

systemctl is-enabled cron.service

70
5.13 Comandos para la administrar memoria RAM

1- Free
El primero en la lista es el clásico Free sumado a -m para dar un detalle, total, usado y libre,
también muestra el cache.

free -m

2- MEMINFO
Por medio de este comando podemos visualizar todo lo relacionado a la memoria, dentro
podemos encontrar subrayados los que se miran con más frecuencia, aunque haciendo uso
del agregado | grep MemFree nos dará el resultado de solo lo que pedimos.

cat /proc/meminfo

3- VMSTAT

Vamos a ver el comando vmstat para informar las estadísticas de memoria virtual y
proporcionar información sobre eventos del sistema, como carga de CPU, paginación,
número de cambios de contexto, interrupciones de dispositivo y llamadas del sistema.

Los campos mostrados en relación a los a procesos (proc) son:

r: El número de procesos ejecutables esperando para acceder al CPU.


b: El número de procesos en un estado dormido contínuo.

Los campos relacionados a la memoria (memory) son:

swpd: La cantidad de memoria utilizada.


free: La cantidad de memoria libre.
buff: La cantidad de memoria utilizada por las memorias intermedias.
cache: La cantidad de memoria utilizada como caché de páginas.

Los campos relacionados a swap son:

si: La cantidad de memoria intercambiada desde el disco.


so: La cantidad de memoria intercambiada hacia el disco.

Los campos relacionados con E/S (io) son:

bi: Los bloques recibidos desde un dispositivo de bloques.


bo: Los bloques enviados a un dispositivo de bloques.

Los campos relacionados al sistema (system) son:

in: El número de interrupciones por segundo.


cs: El número de cambios de contexto por segundo.

71
Los campos relacionados al CPU son:

us: El porcentaje de tiempo que el CPU ejecutó código de nivel del usuario.
sy: El porcentaje de tiempo que el CPU ejecutó código de nivel del sistema.
id: El porcentaje de tiempo que el CPU estaba desocupado.
wa: Esperas de E/S.
st: Tiempo robado (stolen) de una máquina virtual. Para Linux anterior a 2.6.11 era
desconocido.

4- Liberar memoria

Otro comando es para liberar la memoria, hacemos como root.

sync && echo 3 > /proc/sys/vm/drop_caches

72
5.14 Crear un script simple
Para crear un script, vamos a hacer uso de un editor de texto, si siguen el blog verán que a
mi me gusta usar nano, pero existen muchos otros como vi, vim, gedit, etc. Solo debemos
considerar 2 cosas importantes al hacerlo:

Guardar el archivo con un nombre, recomiendo que sea descriptivo del servicio, y debe
terminar con extensión .sh.
Para que el sistema sepa que es un script debemos colocar como primera línea #!/bin/bash
al principio del mismo.

Por ejemplo vamos a hacer un script, que limpie la memoria cache de nuestro Linux, sin
necesidad de reiniciar lo voy a llamar limpiar_memoria.sh

nano limpiar_memoria.sh

Ahora vamos a valernos de los comandos para liberar memoria, así que pegamos lo
siguiente:

#!/bin/bash
sync && echo 3 > /proc/sys/vm/drop_caches

Guardamos, si usamos nano F2, y solo falta darle permisos de ejecución, dado que si no el
script nunca correrá.

chmod +x limpiar_memoria.sh

Listo el script, como verán es bastante simple de hacer y podemos lanzarlo para probar
como funciona con sh script o ./script.sh

73
5.15 Cron y Crontab
Cron y Crontab son 2 elementos muy importantes a la hora de programar tareas y que se
ejecuten sin que tengamos que estar pendientes de su estado, en Windows existe su
equivalente llamado programador de tareas. Veamos las diferencias:

Cron es un administrador regular de procesos que corre en segundo plano (también llamado
demonio) permite ejecutar procesos a intervalos regulares (por ejemplo, cada minuto, día,
semana o mes). Los procesos que deben ejecutarse y la hora en la que deben hacerlo se
especifican en el fichero crontab.

Crontab es un simple archivo de texto, donde se guarda una lista de comandos a ejecutar
en un tiempo especificado por el usuario. Crontab verificará la fecha y hora en que se debe
ejecutar un script o un comando, también mirara los permisos de ejecución y se realizará en
background (segundo plano). Generalmente cada usuario del sistema posee su propio
fichero Crontab. Se considera que el ubicado en la carpeta etc pertenece al usuario root.
Para generar el archivo propio, cada usuario deberá hacer uso del comando crontab (dicho
comando es igual para cada usuario).

Teniendo un script creado y habiendo entendido que cron es el servicio y crontab el archivo
de configuración, vamos a programar una tarea que limpie la memoria.

Antes que nada vamos a ver como funciona crontab y sus parámetros, teniendo en cuenta
que voy a hacer todo con permisos de root:

1- Para ver las tareas creadas usamos el parámetro -l

crontab -l

2- Para editarlos o crear una tarea con -e

crontab -e

3- Define el directorio de crontab del usuario (este debe tener permisos de escritura y
ejecución del usuario) con -c carpeta

crontab -c dir

4- Administrar el crontab de otro usuario, ejemplos:

crontab -u usuario
crontab -l -u root
crontab -e usuario2
crontab -r -u usuario

El parámetro -r es para eliminar las tareas previamente creadas.

5- Programando una tarea

74
Las tareas que crearemos, requieren una sintaxis determinada. Tienen 5 asteriscos al
principio seguidos del comando a ejecutar. Veamos en detalle para qué sirve cada cosa.

* * * * * /root/limpiar_memoria.sh

Los 5 asteriscos, se ponen asterisco espacio asterisco espacio… y mirando de izquierda a


derecha y representan:

Minutos: de 0 a 59.
Horas: de 0 a 23.
Día del mes: de 1 a 31.
Mes: de 1 a 12, siendo 1 Enero … 12 Diciembre.
Día de la semana: de 0 a 7, siendo 0 el domingo, también es posible utilizar las tres
primeras letras del nombre del día en inglés, como Sun, Mon, etc

6- Con los operadores es posible especificar varios valores en un campo; existen tres
posibles valores:

El asterisco (*): Este operador abarca todos los valores posibles; un asterisco en un campo
minutos es igual a ejecutar el script cada minuto.
la coma (,): Este operador permite especificar una lista de valores; por ejemplo si queremos
ejecutar un comando los lunes y miércoles: «1,3» en el campo de los días.
El guión (-): Este operador especifica una serie de valores de manera agrupada con un cota
inferior y una superior; por ejemplo si quisiéramos ejecutar un comando de lunes a viernes
podríamos colocar el siguiente valor en el campo día: «1-5», que es equivalente a 1,2,3,4,5.

7- Vamos a hacer pruebas, para crear la tarea lanzamos el comando

crontab -e

Ejemplo 1

El script limpiar_memoria.sh ubicado en /home/nksistemas/ se ejecutará, cada minuto, de


cada hora, de cada día del mes, de cada mes y cada día de la semana

* * * * * /root/limpiar_memoria.sh

Ejemplo 2

El script limpiar_memoria.sh ubicado en /home/nksistemas/ se ejecutará, cada 40 minutos,


de cada hora, de cada día del mes, de cada mes y cada día de la semana

40 * * * * /root/limpiar_memoria.sh

Ejemplo 3

Si deseamos ejecutar el script todos los 1 de octubre a las 7:30 haríamos

75
30 7 1 10 * /root/limpiar_memoria.sh

Ejemplo 4

Para que corra a las 3 AM todos los días

0 3 * * * /root/limpiar_memoria.sh

Ejemplo 5

Ejecutar la tarea a las 22 PM todos los días.

0 22 * * * /root/limpiar_memoria.sh

Ejemplo 6

Ejecutar un script de lunes a viernes a las 2:30 horas.

30 2 * * 1-5 /root/limpiar_memoria.sh

Ejemplo 7

Ejecutar el script cada 5 minutos, durante 2 horas de lunes a viernes

5 2 * * 1-5 /root/limpiar_memoria.sh

8- Log para saber si corre bien

cat /var/log/syslog | grep limpiar_memoria.sh

9- Logs de cron

Podemos visualizar los logs de cron en /var/log/syslog, pero vamos a ir un poco más allá y
verificar si la tarea que creamos esta corriendo y ejecutándose.

cat /var/log/syslog | grep limpiar_memoria.sh

76
5.16 Programar tareas con el comando AT
El comando at utiliza el daemon atd – Sirve para programar una tarea para que se ejecute
una sola vez. Nos permite programar tareas de forma similar a cron, pero en lugar de
programar tareas repetitivas se usa para programar tareas que ejecutamos una vez a una
determinada hora.

1- Hay que instalarlo

apt install at -y

2- Podemos verificar el estado del servicio

systemctl status atd

3- Los comandos de at son:

at: ejecuta comandos a la hora especificada.


atq: listar los trabajos pendientes de los usuarios.
atrm: borra trabajos por su número 1.de trabajo.

4- Programar un trabajo

at 10:00 PM
sh /root/limpiar_memoria.sh

Guardo presionando ctrl+D

4.1- Alternativa a crear tarea

echo "sh /root/limpiar_memoria.sh" | at 10:00 PM

4.2- Programar reboot

echo "reboot" | at 1:00 AM

5- Una vez creada podemos

5.1- Listar trabajos

atq
o
at -l

5.2- Eliminar un trabajo

atrm 2

77
at -d 3

atq

5.3- Saber que tiene la tarea

at -c 1

6- Ejemplos

6.1- Correr tarea el domingo a las 10 AM

at 10:00 AM sun

6.2- Correr tarea el 1 de mayo a las 3 AM


at 03:00 AM may 1

6.3- Programar una tarea a las 10:00 AM del próximo 5 de junio de 2021

#Lo podemos hacer de dos formas:

at 10:00 AM 6/5/2021
at 10:00 AM 6.5.2021

6.4- Programar una tarea a las 11 de la mañana el mismo día del próximo mes

at 11:00 AM next month

6.5- Programar una tarea para mañana a las 11 AM

at 11:00 AM tomorrow

6.6- Programar una tarea de aquí a una hora

at now + 1 hour

6.7- Programar una tarea de aquí a 30 minutos

at now + 30 minutes

6.8- Programar una tarea de aquí a una y dos semanas

at now + 1 week
at now + 2 weeks

6.9- Programar una tarea de aquí a uno y dos años

at now + 1 year

78
at now + 2 years

6.10- Programar una tarea a media noche

at midnight

7- Aclaración

Hora:
9pm
20:45
now (ahora)
noon (12pm)
midnight (00:00)

Fecha:
today (hoy)
tomorrow (mañana)
Sep 10 (10 de septiembre)
Jan 5 (5 de enero)

Podemos también crear combinaciones de fecha y hora, como por ejemplo:

10:45pm Jan 10 representa las 22:45 hs del día 10 de enero


8:23am May 11 indica las 8:23 hs del día 11 de mayo

Incremento:
+minutes
+hours
+days
+weeks
+months
+years

(Para el incremento también se aceptan las formas singulares minute, hour, day, week,
month, y year). El incremento se utiliza para «sumar» una cierta medida de tiempo al
momento indicado para la ejecución de la tarea.

79
5.17 Memoria SWAP
Cuando la memoria RAM llega al límite y no queda más espacio, el sistema operativo suele
matar procesos, comenzando por aquellos que no afecten el funcionamiento del sistema,
pero si nuestro servidor web mata servicios como apache, el sitio web no funcionará lo que
será muy disruptivo.
La memoria swap es un espacio de intercambio, que bien puede ser una partición lógica en
el disco o simplemente un archivo. En lugar de utilizar espacio en memoria RAM, el swap
utiliza espacio en disco duro para almacenar datos temporales, reduciendo así el uso de la
RAM. Este proceso de descargar la memoria ram al disco se denomina swapping.
El conjunto combinado de memoria RAM y swap crean una memoria virtual mayor a la que
trae una pc o servidor por defecto. Así, el Kernel de Linux puede ejecutar procesos que
requieren de más memoria de la que se encuentra físicamente disponible.

El parámetro swappiness representa la preferencia del kernel (la cantidad y la frecuencia)


para utilizar swap. Swappiness puede tener un valor entre 0 y 100, pero por defecto se
utiliza 60. Hay que aclarar que este valor puede no ser igualmente eficaz en todos los
casos, ya que dependerá del uso individual, las especificaciones del hardware o las
necesidades del usuario.
Cuanto mayor sea el valor del parámetro swappiness, más agresivamente el kernel utilizará
swap. Por ello, se recomienda utilizar un valor bajo que reduzca el intercambio desde RAM
y mejore la capacidad de respuesta del sistema (rendimiento global, funcionalidad y
velocidad del sistema operativo).

5.17.1 Cambiando el valor de swap mediante terminal


Acceder al disco ya sea partición o archivo es mucho más lento que acceder a la memoria
RAM. Así que, si tenemos un equipo con buena memoria RAM, lo más conveniente es
reducir el acceso a swap, para aprovecharla.
El valor del parámetro swappiness se almacena en un archivo de configuración de texto
simple que se ubica en /proc/sys/vm con el nombre "swappiness". Si te desplazas al
directorio con permisos de administrador, es posible localizar el archivo y abrirlo para
comprobar el valor swappiness de tu sistema. Puedes hacer lo mismo en la terminal si
escribes:

sudo cat /proc/sys/vm/swappiness

El valor devuelto a menudo es 60, que es el valor por defecto de swap. Si queremos
reducirlo escribiremos:

sudo sysctl -w vm.swappiness=10

Cuidado, esto durará mientras no reiniciemos el PC, si se reinicia los valores vuelven a 60
nuevamente por defecto. Pero si vemos que con la reducción de swappiness se obtuvo un
mejor rendimiento, podemos hacer permanente este valor abriendo el archivo de
configuración con el comando:

sudo nano /etc/sysctl.conf

80
Y escribiendo en la última línea:

vm.swappiness=10

5.17.2 Administrando la memoria SWAP


1- Para verificar la memoria swap

swapon -s

cat /proc/swaps

2- Desactivar la swap

swapoff -v /dev/sda5

2.1- Eliminar la configuración del archivo fstab

nano /etc/fstab

Eliminamos lo siguiente:

# swap was on /dev/sda5 during installation


UUID=46d7785c-b4f6-4747-acd6-579fe249d986 none swap sw 0 0
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0

2.2- Eliminar la partición

cfdisk

2.3- Volvemos a verificar

swapon -s

3- Creando un archivo de swap

dd if=/dev/zero of=/swapfile bs=1M count=2048


chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

Explicación de cada parámetro:

dd: comando para usar la aplicación "duplicate date" con el fin de crear un archivo de swap.

81
if=/dev/zero: Indicamos que como fichero de origen (input file) se debe usar el dispositivo
/dev/zero, dicho dispositivo /dev/zero genera una cadena de ceros con las características
que definiremos con los comandos bs y count.

of=/swapfile: indicamos que se genere un archivo con nombre swapfile en la raíz de nuestro
linux. Este archivo será generado por el dispositivo /dev/zero y estará formado por una
cadena de ceros con las características que definiremos con los comando bs y count.

bs=1M: Definimos que la información que se escribe en el fichero /swapfile sea en bloques
de 1 MegaByte.

count=2048: Establecemos que en el archivo /swapfile se escriban 2048 bloques del


tamaño definido en el parámetro bs (1MB)

Por lo tanto ejecutando el comando creamos el archivo de swap en /swapfile que ocupará 2
GB y estará formado por 2048 bloques de 1MB. (2048 x 1 = 2GB).

3.1- Agregamos el archivo swap a fstab para que se inicie con el sistema.

nano /etc/fstab

Pegamos lo siguiente al final del archivo:

/swapfile none swap sw 0 0

4- Verificar

swapon -s

5.17.3 Priorizar el uso de la memoria swap entre partición y archivo.


Vamos a volver atrás los cambios del laboratorio y creamos nuevamente el archivo swap.

1- Crear archivo swap

dd if=/dev/zero of=/swapfile bs=1M count=2048


chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

1.1- Agregamos el archivo swap a fstab para que se inicie con el sistema.

nano /etc/fstab

Pegamos lo siguiente al final del archivo:

/swapfile none swap sw 0 0

82
1.2- Verificamos

swapon -s

Vemos que la partición de Swap /dev/sda5 tiene una prioridad más alta que el archivo
/var/swap (-2 Versus -3). Por lo tanto la primera Swap que se usará será la /dev/sda5 y
cuando esté completamente llena empezará a usarse el archivo de swap /swapfile.

2- Establecer prioridad

En el archivo /etc/fstab, debemos agregar la prioridad después de sw,pri=X

UUID=46d7785c-b4f6-4747-acd6-579fe249d986 none swap sw,pri=0 0 0

/swapfile none swap sw,pri=1 0 0

Guardamos los cambios. En la primeras líneas, correspondiente a la partición /dev/sda5, le


asignamos prioridad 0. Y en la segunda línea, correspondiente al archivo de Swap, le
asignamos prioridad 1.

2.1- Reiniciamos el equipo y verificamos nuevamente

swapon -s

En estos momentos la prioridad de /swapfile es más elevada que la de la partición de swap


/dev/sda5. Por lo tanto ahora empezará a llenarse el archivo de swap primero y cuando esté
completamente lleno empezará a utilizarse la partición de swap.

6.4 Liberar memoria SWAP


Se puede liberar la memoria devolviendo el contenido a la ram, primero vemos el consumo
con el comando free, y después ejecutamos:

sudo swapoff -a && sudo swapon -a

Ahora volvemos a teclear el comando free para verificar:

free

83
5.18 Sudo
Utilizar el comando sudo (super user do, por sus siglas en inglés) nos asegura poder otorgar
privilegios root —temporalmente— a un usuario. Esta es la forma recomendada y la mejor
práctica para ejecutar acciones con privilegios elevados. La gran diferencia, es que los
comandos precedidos con sudo son ejecutados por el propio usuario, no por root.

Podemos mencionar algunas ventajas que nos proporciona el uso de sudo:

● Permite dar permisos de administrador a un usuario normal, durante un período


limitado de tiempo, y que un usuario común pueda ejecutar tareas de administración
del sistema con su propia contraseña.
● Sudo proporciona mayor seguridad en el aspecto que nos permite administrar un
sistema operativo sin la necesidad de iniciar una sesión de usuario root.

1- Instalación

Debian
apt install sudo

CentOS
dnf install sudo

2- Acceder a sudo con un editor

nano /etc/sudoers

3- Acceder con un comando

visudo

4- Estructura del archivo sudoers

nombre_usuario nombre_equipo = (usuario:grupo) comando_restringir

Analisemos que significa cada uno de los términos:

nombre_usuario: Es el nombre de usuario que puede usar el comando sudo. El nombre de


usuario puede ser un usuario, un alias de usuario o un grupo.

nombre_equipo: Es el nombre del equipo o hostname en el que podemos aplicar el


comando sudo. Sus valores pueden ser todos los equipos (ALL), un solo equipo, un alias de
equipos, una dirección IP, etc.

(usuario:grupo): Especificamos los usuarios y los grupos que podrán usar el usuario de
sudo cuando ejecuta los comandos. Para poder ejecutar comandos con un usuario y grupo

84
específico tendremos que usar los comandos sudo -u y sudo -g. Si no indicamos ningún
usuario ni ningún grupo se usará el usuario root y el grupo root.

comando_restringir: Especificación/restricción de los comandos que pueden ejecutar los


usuarios que pueden ejecutar el comando sudo.

5- Dar permisos de usuario root a un usuario normal para ejecutar cualquier comando en
nombre de cualquier usuario. Esta configuración es utilizada por el 99% de usuarios
domésticos en sus equipos.
Vamos a editar el archivo /etc/sudoers.

visudo

nk1 ALL=(ALL:ALL) ALL

6- Dar permisos de usuario root a un usuario normal mediante sudo

nk1 debian=(root:root) ALL

Introduciendo esta línea damos permiso al usuario nk1 para que en el equipo debian pueda
ejecutar cualquier comando en nombre del usuario root.

A diferencia del caso anterior en este caso el usuario nk1 únicamente podrá usar comando
sudo en el equipo debian y únicamente lo podrá hacer en nombre del usuario root.

7- Dar permisos para que todos los usuarios de un grupo tengan permisos de administrador

%nk1 ALL=(root:root) ALL

Introduciendo esta línea damos permisos a todos los usuarios del grupo nk1 para que en
cualquier equipo pueda ejecutar cualquier comando en nombre del usuario root.

8- Dar permisos a un usuario para que únicamente pueda usar solo los comandos que se le
permita.

A modo de ejemplo podemos introducir el siguiente comando en el fichero /etc/sudoers:

nk1 ALL=(root:root) /usr/bin/passwd *, !/usr/bin/passwd root

Con este comando damos permiso al usuario nk1 para que en cualquier equipo pueda
cambiar la contraseña de cualquier usuario exceptuando la contraseña del usuario root.

9- Configurar sudo para deshabilitar o limitar el período de gracia de sudo

En el momento de ejecutar un comando con sudo tenemos que introducir la contraseña de


nuestro usuario. Una vez introducida la contraseña nuestro sistema operativo la recordará

85
durante un período de 5 minutos que es por defecto. A veces se considera que este período
de gracia es mucho tiempo y representa una brecha de seguridad.

Vamos a cambiar el valor

Debemos introducir una línea adicional

Defaults:ALL timestamp_timeout=0

Si necesitamos que el valor cambie a 2 minutos entonces modificamos el valor

Defaults:ALL timestamp_timeout=2

10- Usar el comando sudo sin necesidad de usar contraseña

Contrariamente al punto anterior pueden existir la necesidad de no querer introducir su


contraseña al usar el comando sudo. Vamos a modificar el archivo sudoers y debemos
modificar lo siguiente

nk1 ALL=(ALL:ALL) NOPASSWD: ALL

Así el usuario nk1 podrá ejecutar cualquier comando con sudo sin necesidad de introducir
ninguna contraseña.

11- En el caso que quisiéramos que un usuario solo pudiera usar determinados comandos
sin tener que utilizar contraseña podríamos reemplazar el comando anterior por el siguiente:

nk1 ALL=(ALL:ALL) NOPASSWD: /usr/bin/apt-get,/sbin/shutdown

De este modo el usuario nk1 podría gestionar los paquetes del equipo y apagar el equipo
sin necesidad de introducir ninguna contraseña. Para el resto de tareas de administrador
tendría que introducir la contraseña.

12- Configurar sudo para limitar los intentos que un usuario tiene para adivinar la
contraseña

De forma predeterminada disponemos de 3 intentos para no equivocar la contraseña de


nuestro usuario. En el caso que fallemos 3 veces deberemos volver a introducir de nuevo el
comando que queremos ejecutar.

Para reducir el número de intentos a 2 por ejemplo, debemos modificar la línea:

Defaults:ALL passwd_tries=2

13- El registro de log lo vemos por defecto en:

86
En Debian y distros derivadas: /var/log/auth.log
En Fedora y distros derivadas: /var/log/secure
Si usamos Arch y distros derivadas: /var/log/sudo-io
En CentOS: /var/log/secure

Para consultar los logs podemos hacer:

journalctl _COMM=sudo

Pero se puede definir el archivo y ubicación en que se guardarán los logs:

Defaults logfile=/var/log/sudo

Y visualizamos los cambios.

less /var/log/sudo

87

También podría gustarte