Mostrando las entradas con la etiqueta pacman. Mostrar todas las entradas
Mostrando las entradas con la etiqueta pacman. Mostrar todas las entradas

Arquitectura del movimiento y la persistencia visual: el Pacman y la máscara binaria.


Arquitectura del movimiento y la persistencia visual: el Pacman y la máscara binaria.

Análisis del script de presentación ASCII de los videos de Entropía binaria para 2026.

En la programación de animaciones en terminal, mover un objeto de un punto A a un punto B es trivial; lo verdaderamente complejo surge cuando ese objeto debe interactuar con el entorno, modificándolo (permanentemente) a su paso. En el caso del script que estamos estudiando, el desafío es doble: el personaje debe recorrer la pantalla en un patrón de zigzag preciso y, al mismo tiempo, "ir comiéndose" al planeta para revelar un logotipo oculto debajo. Para lograr esto, no podemos pensar en el movimiento y en el dibujo como procesos separados; ambos dependen de un mapa de memoria compartido.

Para poder comprender el movimiento, primero debemos observar cómo se gestionan los límites. El Pacman no se mueve libremente; está confinado a un bucle lógico. En cada ciclo del procesador, su coordenada horizontal varía según una variable de dirección. Sin embargo, para lograr el efecto de escritura en zigzag, el script evalúa constantemente si el personaje ha superado los márgenes predefinidos a la izquierda o a la derecha del planeta. Cuando esto ocurre, suceden tres cosas simultáneamente: la dirección se invierte (se multiplica por -1), la coordenada vertical disminuye para subir un renglón, y el personaje se reposiciona en el borde opuesto. Este comportamiento cíclico asegura que el personaje barra toda la superficie del objeto central sin necesidad de programar cada giro manualmente.

Pero la magia real del script reside en cómo "borra" el planeta sin borrar el logo. Aquí es en donde entra en juego el concepto de matriz asociativa "array asociativo". En BASH, una matriz (array) común, se indiza (indexa) con números (0, 1, 2,...), pero un array asociativo nos permite usar cadenas de texto como índices. El script declara una variable llamada visitados. Cada vez que el Pacman se mueve, no solo cambia su posición en pantalla, sino que calcula qué coordenadas del planeta está tocando en ese momento. Luego, registra esas coordenadas exactas en el array asociativo usando el formato "fila,columna" como clave y asignándole un valor de "1". Es como si el Pacman fuera dejando un rastro de migajas invisibles en la memoria del ordenador, marcando "aquí estuve".

El paso final ocurre en el motor de renderizado. Cuando el script se dispone a dibujar el planeta línea por línea, no imprime ciegamente los caracteres del planeta. En su lugar, para cada celda de la cuadrícula, consulta el array visitados (de ahí su nombre). El programa se hace una pregunta simple: "¿ha pasado el Pacman por la coordenada Y,X actual?". Si la respuesta es no (el valor no existe o es 0), el script dibuja el caracter correspondiente al planeta (tierra o agua). Pero si la respuesta es sí (el valor es 1), el script ignora el planeta y busca en su lugar qué caracter corresponde a esa misma posición en el sprite del logotipo de Entropía binaria. De esta forma, no estamos realmente "borrando" nada; estamos alternando dinámicamente entre dos capas de imágenes (la capa del planeta y la capa del logo) utilizando la posición histórica del Pacman como una máscara de recorte en tiempo real.

Disección del código: implementación del motor de movimiento y revelado.

A continuación, he extraído y aislado la lógica exacta que controla el movimiento en zigzag, la detección de colisión (máscara) y el renderizado condicional.

Nota: para que este código sea funcional de manera independiente sin necesidad de descargar los archivos de texto externos (arte_ascii/...), he sustituido la función de carga de archivos por la definición manual de dos sprites simples (un cuadrado de "Planeta" y un cuadrado de "Logo") y un Pacman básico. El resto de la lógica (movimiento, array visitados, actualizar_mascara y el bucle de dibujo) es textualmente la del script original.


#!/bin/bash

c_borde_planeta="\e[34m"
c_tierra_planeta="\e[33m"
c_agua_planeta="\e[36m"
c_pacman="\e[1;33m"
c_texto="\e[1;37m"

# Colores logo.
c_logo_1_relleno="\e[38;5;52m"  # Marrón oscuro.
c_logo_1_fondo="\e[38;5;220m"   # Dorado.

# Ajustes de posición planeta y logo.
ajuste_planeta_y=0; ajuste_planeta_x=0
ajuste_logo_y=0; ajuste_logo_x=0

limite_pacman_izq=19
limite_pacman_der=5

vel_movimiento=50000000         # Velocidad pacman comiendo.
vel_anim=150000000              # Animación boca (150ms).

dir_arte="arte_ascii"

if [[ ! -d "$dir_arte" ]];then echo "Error: Falta '$dir_arte'";exit 1;fi

tput civis;tput rmam;clear      # rmam = desactivar auto-margen.
trap "tput cnorm;tput smam;echo -e '\e[0m';clear;exit" SIGINT 
c_reset="\e[0m"

# Estado inicial.
estado_juego=0        
filas_visitadas=0     
set_color_logo=1      
texto_pac=""          

declare -A visitados

# CARGA DE SPRITES DESDE ARCHIVOS DE TEXTO PLANO.
cargar_sprite() {
    local archivo="$dir_arte/$1"
    local -n ref_arr=$2; local -n ref_ancho=$3; local -n ref_alto=$4
    
    if [[ ! -f "$archivo" ]];then echo "Error: falta '$archivo'";tput cnorm;exit 1;fi
    
    mapfile -t ref_arr < "$archivo"
    ref_alto=${#ref_arr[@]}
    ref_ancho=0
    
    for linea in "${ref_arr[@]}";do
        len=${#linea}
        if [[ $len -gt $ref_ancho ]];then ref_ancho=$len;fi
    done
}

declare -a arte_planeta arte_logo pac_cerrado pac_abierto_izq pac_abierto_der 
cargar_sprite "planeta"             arte_planeta     ancho_planeta   alto_planeta
cargar_sprite "logo_entropía"       arte_logo        ancho_logo      alto_logo
cargar_sprite "pacman_cerrado"      pac_cerrado      ancho_pac       alto_pac
cargar_sprite "pacman_abierto_izq"  pac_abierto_izq  tmp_w           tmp_h
cargar_sprite "pacman_abierto_der"  pac_abierto_der  tmp_w           tmp_h

# POSICIONAMIENTO INICIAL.
ancho_term=$(tput cols);alto_term=$(tput lines)

offset_x=$(( ((ancho_term - ancho_planeta) / 2) + ajuste_planeta_x ))
offset_y=$(( ((alto_term - alto_planeta) / 2) + ajuste_planeta_y ))

logo_rel_x=$(( ((ancho_planeta - ancho_logo) / 2) + ajuste_logo_x ))
logo_rel_y=$(( ((alto_planeta - alto_logo) / 2) + ajuste_logo_y ))

pac_x=$(( offset_x + ancho_planeta + 2 ))
pac_y=$(( offset_y + alto_planeta - alto_pac )) 
pac_dir=-1;estado_pac=0;idx_texto=0

# LÓGICA DE MÁSCARA (EL BORRADO)
actualizar_mascara() {
    local -n ref_sprite_actual
    if [[ $estado_pac -eq 0 ]];then ref_sprite_actual=pac_cerrado
    elif [[ $pac_dir -eq 1 ]];then ref_sprite_actual=pac_abierto_der
    else ref_sprite_actual=pac_abierto_izq
    fi

    local rel_pac_x=$((pac_x - offset_x))
    local rel_pac_y=$((pac_y - offset_y))

    for ((py=0; py<alto_pac; py++));do
        local linea_sprite="${ref_sprite_actual[py]}"
        for ((px=0; px<ancho_pac; px++));do
            local char_en_sprite="${linea_sprite:px:1}"
            if [[ "$char_en_sprite" != " " ]] && [[ -n "$char_en_sprite" ]];then
                local ly=$((rel_pac_y + py))
                local lx=$((rel_pac_x + px))
                
                if [[ $ly -ge 0 ]] && [[ $ly -lt $alto_planeta ]] && [[ $lx -ge 0 ]] && [[ $lx -lt $ancho_planeta ]];then
                    visitados["$ly,$lx"]=1
                fi
            fi
        done
    done
}

# MOTOR GRÁFICO (RENDERIZADO).
dibujar_escena() {
    buffer="\e[H\e[2J" 

    # PLANETA / LOGO Eb.
    local c_relleno=$c_logo_1_relleno
    local c_fondo=$c_logo_1_fondo

    for ((i=0;i<alto_planeta;i++));do
        local pantalla_y=$((offset_y + i))
        buffer+="\e[${pantalla_y};${offset_x}H"
        
        local linea_planeta="${arte_planeta[i]}"
        local idx_fila_logo=$((i - logo_rel_y))
        local linea_logo=""
        if [[ $idx_fila_logo -ge 0 ]] && [[ $idx_fila_logo -lt $alto_logo ]];then linea_logo="${arte_logo[$idx_fila_logo]}";fi

        local linea_construida=""
        for ((j=0; j<ancho_planeta; j++)); do
            # LÓGICA DE VISIBILIDAD.
            local mostrar_logo=0
            if [[ "${visitados["$i,$j"]}" == "1" ]];then mostrar_logo=1;fi
            
            if [[ $mostrar_logo -eq 1 ]];then
                # MODO "LOGO".
                local idx_col_logo=$((j - logo_rel_x))
                if [[ $idx_fila_logo -ge 0 ]] && [[ $idx_fila_logo -lt $alto_logo ]] && [[ $idx_col_logo -ge 0 ]] && [[ $idx_col_logo -lt $ancho_logo ]];then
                    local char="${linea_logo:idx_col_logo:1}"
                    
                    if [[ "$char" == "#" ]];then linea_construida+="${c_fondo}█${c_reset}"
                    elif [[ "$char" == " " ]] || [[ -z "$char" ]];then linea_construida+=" "
                    else linea_construida+="${c_relleno}█${c_reset}"
                    fi
                    
                else
                    linea_construida+=" "
                fi
            else
                # MODO "PLANETA".
                local char="${linea_planeta:j:1}"
                if [[ -z "$char" ]]; then char=" ";fi
                
                if [[ "$char" == "█" || "$char" == "#" ]];then linea_construida+="${c_tierra_planeta}${char}${c_reset}"
                elif [[ "$char" == "-" || "$char" == "=" || "$char" == ":" || "$char" == "." ]];then linea_construida+="${c_borde_planeta}${char}${c_reset}"
                else linea_construida+="${c_agua_planeta}${char}${c_reset}";fi
            fi
        done
        buffer+="$linea_construida"
    done

    # PACMAN.
    local -n ref_p
    if [[ $estado_pac -eq 0 ]];then ref_p=pac_cerrado
    elif [[ $pac_dir -eq 1 ]];then ref_p=pac_abierto_der
    else ref_p=pac_abierto_izq;fi

    local j=0
    
    for pline in "${ref_p[@]}";do
        local py=$((pac_y + j))
        local linea_transparente="${pline// /\\e[1C}"
    
        if [[ $py -gt 0 ]] && [[ $py -lt $alto_term ]];then
            buffer+="\e[${py};${pac_x}H${c_pacman}${linea_transparente}${c_reset}"
        fi
        
        ((j++))
    done
    
    echo -ne "$buffer"
}

# BUCLE PRINCIPAL.
ultimo_tiempo=$(date +%s%N)
temp_mov=0
temp_anim=0

while true;do
    ahora=$(date +%s%N)
    delta=$((ahora - ultimo_tiempo))
    ultimo_tiempo=$ahora
    
    # LÓGICA DE MOVIMIENTO (ESTADO 0).
    if [[ $estado_juego -eq 0 ]];then
        temp_mov=$((temp_mov + delta))
        
        if [[ $temp_mov -ge $vel_movimiento ]];then
            pac_x=$((pac_x + pac_dir))
            actualizar_mascara

            # Límites zigzag.
            if [[ $pac_dir -eq -1 ]] && [[ $pac_x -le $((offset_x - limite_pacman_izq)) ]];then
                pac_dir=1;pac_y=$((pac_y - 4));pac_x=$((offset_x - limite_pacman_izq))
            fi
            
            if [[ $pac_dir -eq 1 ]] && [[ $pac_x -ge $((offset_x + ancho_planeta + limite_pacman_der)) ]];then
                pac_dir=-1;pac_y=$((pac_y - 4));pac_x=$((offset_x + ancho_planeta + limite_pacman_der))
            fi
            
            # FIN DEL RECORRIDO (Salida del script).
            if [[ $pac_y -le $((offset_y + 2)) ]] && [[ $pac_dir -eq 1 ]] && [[ $pac_x -ge $((offset_x + ancho_planeta)) ]];then
                 tput cnorm;echo -e "\e[H\e[2J\e[0m";exit 0
            fi
            
            temp_mov=0
            dibujar_escena
        fi
    fi
    
    # Acumular tiempo para la animación.
    temp_anim=$((temp_anim + delta))

    # Si pasó el tiempo suficiente, cambiar estado (0 a 1, o 1 a 0, etc).
    if [[ $temp_anim -ge $vel_anim ]];then
        estado_pac=$((1 - estado_pac))
        temp_anim=0
    fi
    
    sleep 0.001 # Descanso de CPU para no recargarla innecesariamente.
done

Análisis detallado: cómo funciona el motor de borrado del planeta y revelado del logotipo.

Antes de ejecutar el código extraído en la sección anterior, es imperativo aclarar un requisito físico. Aunque la lógica del script es autónoma, sus dependencias son los archivos de gráficos ASCII. Para que el programa funcione y no acuse errores del tipo "falta el directorio arte_ascii, o falta el archivo pacman", debes tener una carpeta llamada arte_ascii en el mismo directorio en donde guardes el script. Dentro de ella, deben existir los siguientes archivos de texto plano que contienen los dibujos: planeta, logo_entropía, pacman_cerrado, pacman_abierto_izq y pacman_abierto_der. Sin estos archivos, las matrices de memoria estarán vacías y el script no tendrá nada que dibujar.

Una vez cubierto este requisito, pasemos al análisis técnico de cómo BASH, un lenguaje pensado para administrar sistemas, es llevado aquí a comportarse como un excelente motor de videojuegos.

1. La carga de recursos por referencia.

El script comienza definiendo colores y variables, pero la primera pieza de ingeniería interesante es la función cargar_sprite. En lugar de escribir el código de carga cinco veces (una para cada archivo), se utiliza una función general. Lo notable aquí es el uso de local -n. Esto crea una "nameref" (referencia por nombre), que actúa como un puntero. Cuando llamamos a cargar_sprite "planeta" arte_planeta ..., la función no recibe una copia del array, sino que apunta directamente a la variable global arte_planeta. El comando mapfile -t es el encargado de leer el archivo de texto línea por línea y volcarlo directamente dentro del array. Sin este comando, tendríamos que utilizar, por ejemplo, bucles while read que son mucho más lentos.

2. El sistema de coordenadas relativas.

Para centrar el planeta en la pantalla, el script calcula el offset_y y offset_x basándose en el tamaño actual de la terminal (tput cols). Sin embargo, el reto matemático está en el logotipo. El logo de "Entropía binaria" es algo más pequeño que el planeta y debe aparecer centrado dentro de él. Para esto se calculan logo_rel_y y logo_rel_x. Estas variables almacenan la diferencia de posición entre la esquina superior izquierda del planeta y la esquina superior izquierda del logo. Este cálculo es fundamental para que más adelante sepamos exactamente qué píxel del logo corresponde a qué píxel del planeta.

3. El corazón del efecto: declare -A visitados.

Esta línea es muy importante, porque al declarar visitados como un array asociativo (-A), estamos creando una memoria no dependiente de índices numéricos consecutivos (0, 1, 2...), sino de claves de texto. El script utiliza este array como una "máscara de recorte". No guardamos el dibujo final, sino simplemente un registro de coordenadas "Y,X" por las que el Pacman ha pasado. Si la clave "5,10" existe en el array, significa que esa celda ya fue "comida".

4. La función actualizar_mascara.

Cada vez que el Pacman se mueve un paso, se llama a esta función. Su trabajo no es dibujar, sino calcular colisiones. El script recorre el cuadrado pequeño que forma el cuerpo del Pacman. Si el Pacman tiene un píxel sólido en una posición, el script traduce esa posición local a la posición global del planeta. La línea visitados["$ly,$lx"]=1 es la que "marca" el territorio. Nótese que no borramos el planeta en este punto; simplemente anotamos en nuestra libreta virtual que esa coordenada específica ya ha sido visitada.

5. El renderizado condicional (dibujar_escena).

Aquí es en donde ocurre la magia visual. El script no dibuja el logo y luego le pega el "planeta comido parcialmente" encima: esto posiblemente causaría parpadeos que el ojo humano sería capaz de advertir. En su lugar, decide píxel por píxel qué debe mostrar, componiendo una imagen que será la que se espere ver (planeta mezclado con logo de manera inteligente y razonable. El bucle anidado recorre todas las filas (i) y columnas (j) del área del planeta. En cada iteración, se hace una pregunta crítica: if [[ "${visitados["$i,$j"]}" == "1" ]]; ...

- Si la respuesta es SÍ (1): significa que el Pacman ya pasó por ahí. El script ignora el array del planeta y mira el array arte_logo. Utilizando las coordenadas relativas calculadas al principio, extrae el color y el caracter del logo y lo añade al búfer.
/ Si la respuesta es NO (vacío): significa que el terreno está intacto. El script ignora el logo y extrae el carácter del array arte_planeta, aplicándole los colores de tierra o agua.

Este enfoque permite que el logo aparezca "detrás" del planeta a medida que este es borrado, creando una sensación de profundidad y capas.

6. El bucle de física y el movimiento zigzag.

Finalmente, el bucle while true maneja el tiempo. Se usa la técnica de "Delta tiempo" (ahora - ultimo_tiempo) para controlar la velocidad. Esto asegura que el juego corra a la misma velocidad independientemente de la potencia de la CPU que esté ejecutando el script, cosa que no sucede con "sleep". El movimiento en zigzag se logra monitoreando la variable pac_x.

Cuando pac_dir es -1 (izquierda) y se llega al limite_pacman_izq, el script cambia pac_dir a 1 (derecha) y resta 4 a pac_y.

Al restar a pac_y, el personaje sube visualmente porque en la terminal, la fila 0 está arriba. Este cambio de dirección y altura crea el patrón de barrido que permite limpiar todo el mapa automáticamente hasta que la coordenada Y del Pacman supera la parte superior del planeta, momento en el cual el script detecta el fin del juego y termina, así como termina este artículo :D

 

Guía ultrarrápida de instalación de "yay" en Artix, Arch y sistemas derivados.

 


Primero que nada, desglosemos todo el siguiente "lío enmarañado".

¿Qué es "YAY"?
"Yay" (Yet Another Yoghourt) es un "helper".

¿Qué es un "helper"?
Un "helper", es una herramienta que permite enlazar e interactuar fácilmente con el repositorio "AUR" (Arch User Repository).

¿Qué es "AUR"?
Los repositorios oficiales son mantenidos por desarrolladores (Artix, Arch, etc). La diferencia con el repositorio "AUR", es que este es comunitario y no oficial, claramente.
Mientras que en los repositorios oficiales hay paquetes binarios precompilados por desarrolladores, en "AUR", los mismos usuarios colocan archivos PKGBUILD.
Los repositorios oficiales contienen paquetes precompilados y listos para su descarga e instalación. Descargar e instalar desde aquí es un proceso automático y veloz, pero nunca podrás estar seguro al 100% de que ese paquete precompilado por los desarrolladores de la distribución (Arch, Debian, openSUSE) no contenga cambios respecto su código fuente real.

¿Qué es un "PKGBUILD"?
Un archivo "PKGBUILD", es una lista de órdenes para que tu equipo pueda compilar exitosamente un paquete, partiendo desde el código fuente real del mismo y convirtíendolo en un "binario ejecutable". La parte compleja es que AUR requiere que tú compiles los paquetes utilizando los recursos de tu sistema, y aquí es en donde "yay" se vuelve un software clave y de gran ayuda, porque compilar a mano... Conlleva mucho... pero realmente MUCHO tiempo.
Un claro ejemplo de esto es el uso de distribuciones como Slackware o Crux, en donde cada paquete debe ser compilado para ser instalado... a menos que este ya se encuentre en la "imagen ISO" del sistema en sí.

¿Qué es un "binario ejecutable"?
Es un archivo listo para ser descargado, instalado y ejecutado, sin necesidad de ser compilado.


Ahora que queda más claro el propósito de AUR (aunque aún puedan quedar muchas dudas, procedamos con su instalación. Mirá qué fácil que es. Solo hay que seguir esta lista, en orden y paso a paso. Es solo abrir la terminal e ir escribiendo cada uno de estos comandos y dando [Enter].

mkdir helper
cd helper
sudo pacman -S wget git fakeroot make gcc
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si


Listo. Ya podés hacer esto para instalar paquetes desde el repositorio comunitario "AUR":
"yay -S <PAQUETE>"
Por ejemplo:
yay -S hardinfo

Algo muy importante a tener en cuenta: "AUR" no solo aloja paquetes para compilar, sino que a veces podés tener la suerte de que lo que estás buscando tenga el sufijo "bin" (ejemplo: "hardinfo-bin"). En este caso, es un buen consejo preferir los "-bin" antes que "los otros", porque los "-bin" son... ¡archivos ya compilados! Esto te "salvará" de tener que compilar vos mismo a través de "yay" e invertir tiempo y "esfuerzo de hardware" a la misma vez.

No hay mucho más que decir. ¡Abrazo grande y éxito instalando paquetes comunitarios!

Resumen de los principales comandos para el gestor de paquetes pacman.

Introducción.
Los comandos básicos para gestionar con pacman se dividen en tres grandes ramas. Pero antes, comencemos viendo un poco de la información acerca de pacman con el comando:

man pacman

Este comando que significa manual pacman, nos devuelve bastante información, entre ella lo siguiente:

NAME/NOMBRE

pacman - package manager utility

DESCRIPTION/DESCRIPCION

Pacman is a package management utility that tracks installed packages on a Linux system. It features dependency support, package groups, install and uninstall scripts, and the ability to sync your local machine with a remote repository to automatically upgrade packages. Pacman packages are a zipped tar format.

Since version 3.0.0, pacman has been the front-end to libalpm(3), the “Arch Linux Package Management” library. This library allows alternative front-ends to be written (for instance, a GUI front-end). Invoking pacman involves specifying an operation with any potential options and targets to operate on. A target is usually a package name, file name, URL, or a search string. Targets can be provided as command line arguments. Additionally, if stdin is not from a terminal and a single hyphen (-) is passed as an argument, targets will be read from stdin. A grandes rasgos y traducido al español.

Pacman es una utilidad de administración de paquetes que rastrea los paquetes instalados en un sistema Linux. Cuenta con soporte de dependencias, grupos de paquetes, scripts de instalación y desinstalación y la capacidad de sincronizar tu computadora con un repositorio remoto para actualizar paquetes automáticamente.

Invocar pacman implica especificar una operación con posibles opciones y objetivos sobre los que operar. El objetivo suele ser un nombre de paquete, un nombre de archivo, una URL o una cadena de búsqueda.

Pacman entonces resulta ser un gestor de paquetes muy práctico, y acompaña a la distribución madre Arch y todas sus derivadas como Artix, la que yo estoy usando, y otras como Endeavour, Manjaro, Arco Linux, etcétera.

Antes de seguir, quisiera comentar que toda la información que comparto en este artículo está mucho más amplia y explicada en la propia wiki de Arch, cuya página dejo en el siguiente enlace:

https://wiki.archlinux.org/title/Pacman

Bien, la primera gran rama del comando de Pacman que voy a comentar es la del comando: pacman -S, la S viene de --sync abreviatura de Synchronize Sincronizar, actualizar e instalar paquetes. Los paquetes se instalan directamente desde los repositorios remotos, incluidas todas dependencias necesarias para ejecutar dichos paquetes. Por ejemplo podemos instalar el programa darktable; para lo cual el comando sería:

sudo pacman -S darktable

Lo mismo sería si queremos actualizar un paquete específico, justo el mismo comando, sudo pacman -S y el nombre del paquete que queremos actualizar. Siguiendo con el tema de actualizar existe un comando de esta línea de los -S para ese fin el cual es:

sudo pacman -Syu

Este comando combina tanto “Sy” como “Su” es decir combina sincronizar Sy, con Actualizar Su, si solo hacemos sudo pacman -Su esto sirve para actualizar los paquetes del sistema con la información con que se cuenta en este preciso momento, pero al hacer Syu primero sincronizamos los paquetes con los repositorios y luego hacemos la actualización, justo con lo que acabas de sincronizar. En otras palabras, el comando sudo pacman -Syu es un equivalente a en el gestor apt hacer: sudo apt update y sudo apt upgrade. A la vez, sincroniza la base de datos de los repositorios, con nuestros paquetes instalados, e instala las actualizaciones que hagan falta.

Otro comando útil podría ser, si queremos recordar, si es que tenemos instalado un paquete para buscarlo, para ello podemos usar sudo pacman -Ss Y alguna palabra o caracteres incluidos en el nombre del paquete Por ejemplo imaginemos que buscamos flameshot y solo recordamos que su nombre comienza con flame el comando sería:

sudo pacman -Ss flame

Otro comando útil, si deseas obtener la información de un paquete ya sea que lo tengas instalado o no es: sudo pacman -Si nombrepaquete Por ejemplo yo no tengo instalado openshot así que puedo ver su info con el comando:

sudo pacman -Si openshot

Bien, el último comando que voy a mostrarles en esta rama, es uno para limpiar la caché de Arch, este comando es:

sudo pacman -Sc

Arch y pacman, guardan los paquetes que se van instalando, incluso las versiones de estos, así que es bueno de vez en cuando limpiar un poco la caché con este comando.

Ahora, la siguiente gran rama del comando de Pacman que voy a comentar es la del comando: pacman -R, la R viene de --remove haciendo referencia a remover paquetes.

En resumen, sirve para remover paquetes del sistema, hay varias formas de usarlo pero yo les mostraré la más común, ya si tienen curiosidad pueden visitar la wiki de Arch y profundizar, por su cuenta, bueno, vamos a ver la forma más común de remover paquetes con pacman es con el comando: sudo pacman -R nombrepaquete Por ejemplo eliminemos darktable que acabamos de instalar entonces el comando sería:

sudo pacman -R darktable Y con eso lo borraríamos, muchos hemos usado este comando por las prisas o el ajetreo diario. sin embargo y aquí vamos a profundizar un poco, en la rama pacman -R, sería más adecuado eliminar un paquete con: sudo pacman -Rs nombrepaquete Porque de esta forma no solo eliminamos el paquete, sino que eliminaremos también las dependencias de dicho paquete, más no las dependencias que use este paquete pero sean utilizadas por otros, lo cual está genial. Sin embargo aún podemos profundizar más, si usamos el comando:

sudo pacman -Rns nombrepaquete No solo borraremos el paquete y sus dependencias, sino que además borraremos los archivos de configuración que se crearon en el sistema al instalar ese paquete, por ejemplo instalemos openshot, ya saben sudo pacman –S openshot y lo eliminamos con el comando:

sudo pacman -Rns openshot

Veremos que también se eliminan sus dependencias y también sus archivos de configuración.

Bien, ahora para ir finalizando hablaremos un poco de Pacman -Q la última rama de este gestor de paquetes que quería comentar.

Pacman -Q viene de Query, es decir consulta.

En resumen consulta la base de datos de los paquetes. Esta operación le permite ver los paquetes instalados y sus archivos, así como metainformación sobre paquetes individuales (dependencias, conflictos, fecha de instalación, fecha de compilación, tamaño). Veamos algunos ejemplos, si simplemente usamos:

sudo pacman -Q

Nos dará una lista de todos los paquetes que tenemos instalados, y la versión que tenemos. Ahora si queremos saber cuales de esos paquetes son oficiales, (no son de AUR) por ejemplo, podemos ejecutar

sudo pacman -Qn

Y los tendremos, si queremos contar estos paquetes solo debemos usar:

sudo pacman -Qn | wc -l

Para saber cuales son de AUR no oficiales el comando sería:

sudo pacman -Qm

Y para contarlos igualmente

sudo pacman -Qm | wc -l

Si te parece demasiado y no recuerdas haber instalado tantos paquetes, recuerda que te muestra los paquetes que se han instalado incluyendo dependencias, si queremos conocer solo los paquetes que nosotros instalamos debemos usar el comando:

sudo pacman -Qe

Y lo mismo si queremos ver cuantos paquetes instalamos desde pacman (oficiales) sería:

sudo pacman -Qen | wc -l

Y para saber cuantos instalamos desde AUR sería:

sudo pacman -Qem | wc -l

Finalmente para ver los paquetes huérfanos, es decir paquetes que a lo mejor se instalaron como dependencias de otros que eliminamos, por las prisas o por descuido solo con sudo pacman -R y dejamos las dependencias ahí perdidas, pues podemos usar el comando:

sudo pacman -Qdt

Ahora si queremos saber cuantos paquetes huérfanos tenemos en nuestro sistema pues lógicamente podemos usar le comando:

sudo pacman –Qdt | wc -l

En mi caso son solo 26 paquetes.

Ahora si quisiéramos eliminar esos paquetes huérfanos de nuestros sistema, existe una comando, para tal fin, ese comando es:

sudo pacman –Rns $(pacman –Qdtq)

Si volvemos a ejecutar sudo pacman –Qdt no nos devolverá nada, y si ejecutamos sudo pacman –Qdt | wc –l, nos devolverá “0”.
Otro comando muy interesante es el que nos si rve para buscar todos los archivos que contiene un paquete, ese comando es: sudo pacman -Ql nombrepaquete Por ejemplo veamos a revisar nuestro querido y ya desatendido neofetch, usamos:

sudo pacman -Ql neofetch

Y podemos ver todos sus archivos, si usamos

sudo pacman -Ql neofetch | wc -l

podemos ver que tiene 10 archivitos.

Y bueno, creo que hasta aquí este pequeño resumen, he tratado de mostrar los comandos mas importantes, pero repito, si deseas empaparte bien de los comandos de gestor de paquetes pacman, te dejo su Wiki, hay mucha pero mucha información, sin embargo este resumen quizás pueda ser útil para aquellos que comienzan en este mundo y quieren ir practicando un poco, con la terminal. Hasta otra.

Carlos Mauricio López (Metzengerstein)
Flag Counter Visitas previas a la existencia de este contador: 3433

Artículos aleatorios

    Páginas: