Ir al contenido

Entradas etiquetadas como ‘comandos’

13
feb

Dpkg: el administrador de paquetes de Debian

Las diferentes distribuciones de Linux suelen incluir un software específico para administrar los paquetes del sistema. En el caso de Debian y sus derivados (como Ubuntu) se trata del popular apt-get y de dpkg. Este último se controla por medio de la línea de comandos o, incluso, utilizando interfaces gráficas. Nosotros veremos el primer caso.

Dpkg permite administrar, construir, instalar y remover paquetes del sistema. Para llevar a cabo su tarea mantiene cierta información sobre los paquetes disponibles que son su estado, el estado de selección y sus flags. En el caso de los estados pueden alterarse manualmente mediante un comando.

La tabla de paquetes que mantiene dpkg se vería como la siguiente:

PAQUETE 1 ESTADO ESTADO DE SELECCION FLAGS
PAQUETE 2 ESTADO ESTADO DE SELECCION FLAGS
PAQUETE … ESTADO ESTADO DE SELECCION FLAGS
PAQUETE N ESTADO ESTADO DE SELECCION FLAGS

El estado representa precisamente en qué estado se encuentra en el sistema. Algunos estados disponibles hasta la versión actual son:

installed Instalado.
not-installed No fue instalado.
config-files Sólo existe la configuración del paquete en el sistema.
unpacked Sólo ha sido desempaquetado pero no configurado.
half-installed La instalación había comenzado pero no fue completada por alguna razón.
half-configured Se desempaquetó y la configuración había empezado pero finalizó por alguna razón.
triggers-awaited Está esperando de alguna activación.
triggers-pending El paquete ha sido activado.

El estado de la selección representa la acción a realizar sobre el paquete en cuestión. Los mismos pueden ser:

install El paquete fue seleccionado para instalar.
hold Se marcó en espera y no va a ser manipulado por dpkg.
deinstall El paquete es seleccionado para su desinstalación aunque se mantendrán los archivos de configuración.
purge El paquete es seleccionado para su desinstalación, incluyendo sus archivos de configuración.

Los flags son banderas o etiquetas que avisan sobre el estado de un paquete. Por ejemplo, si el flag reinst-required está activado significa que el paquete necesita de una reinstalación.

10
ene

El significado de “su”

En el mundo de los Unix estamos muy acostumbrados a utilizar a diario tanto el comando su como el comando sudo. ¿Pero cuántas veces nos hemos planteado qué significan? Al parecer, Aaron Toponce lo ha hecho en muchas oportunidades, llegando al punto de escribir un post sobre el significado de su. En el mismo comenta los distintos descubrimientos que evidenciaban diferentes significados para los dos comandos mencionados, de lectura divertida y entretenida.

La duda que deja planteada es si su quiere decir super-user, switch-user, substitute-user o subshell y da motivos razonables para inclinarse por la última opción, aunque alguna prueba se lo desmiente. Lo que sí parece ser seguro es que sudo agrega las palabras and do al final de lo que su signifique. Con ello, significaría super-user and do, switch-user and do, etcétera.

Como reflexión final de este post me pregunto: ¿Cuántos de ustedes pasan un sábado a la madrugada diviertiéndose filosofando con el significado del comando su? ¿Soy sólo yo? ¡Espero que no!

23
nov

Comandos de Unix: apropos

Es muy común olvidar el nombre de una aplicación o un comando en Unix, sobre todo si no lo usamos frecuentemente. El comando apropos, estándar en Unix, nos permite encontrar aquellos programas que coincidan con la cadena de caracteres que le pasamos como argumentos. En realidad, lo que hace el mencionado comando es buscar en las páginas de los manuales aquellas aplicaciones que coincidan con nuestra búsqueda y las lista en pantalla. Por ejemplo, deseo buscar los programas que contengan web browser en su descripción:

leandro@megan:~$ apropos "web browser"
google-chrome (1) - the web browser from Google
w3m (1) - a text based Web browser and pager
www-browser (1) - a text based Web browser and pager

20
nov

Strace: analizar llamadas al sistema de un proceso

El comando strace nos va a permitir realizar un diagnostico sobre la ejecución de una aplicación, generando una salida con todas las llamadas al sistema que invoque la aplicación durante su ejecución.

Por ejemplo, supongamos que necesitamos analizar el comando host (comando para resolver dns) y que particularmente nos interesa saber qué archivo/s abre para poder devolvernos la IP dado un dominio. Para este caso, probemos con Google.
matias ~ $ host www.google.com.ar
www.google.com.ar is an alias for www.google.com.
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 64.233.163.147
www.l.google.com has address 64.233.163.99
www.l.google.com has address 64.233.163.103
www.l.google.com has address 64.233.163.104

Ahora ejecutemos el comando strace pasándole como parámetro el que acabamos de ejecutar. La salida generada es bastante extensa por lo cual para el ejemplo la recorto y dejo solamente la parte que nos interesa.
matias ~ $ strace host www.google.com.ar
futex(0x27a2c0, FUTEX_WAKE_PRIVATE, 2147483647) = 0
time(NULL) = 1258589891
open("/etc/resolv.conf", O_RDONLY|O_LARGEFILE) = 6
fstat64(6, {st_mode=S_IFREG|0644, st_size=53, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7709000
read(6, "# Generated by NetworkManager\nna"..., 4096) = 53
read(6, "", 4096) = 0
close(6)

Si analizamos un poco esta salida detectamos en este caso que llama a la system call open, abre el archivo /etc/resolv.conf como readonly y lo identifica con el número 6. Después lee dos líneas del archivo 6, la primera está comentada y la segunda contiene el servidor dns al cuál le debe realizar la consulta por el dominio www.google.com.ar. Por último cierra el archivo identificado con la llamada close.

El ejemplo visto es muy sencillo, pero la idea es que a partir del mismo se imaginen otros muchísimos casos donde sería de ayuda aplicar el comando strace.

3
oct

Medir el tiempo que toma ejecutar un comando

Muchas veces es útil tener una aproximación o incluso el tiempo exacto que le toma a un comando ejecutarse. Para ello existe otro comando, time, que mide precisamente este factor. Su funcionamiento es sencillo: chequea el reloj del sistema antes de ejecutar el comando en cuestión y lo vuelve a chequear ni bien finaliza. El resultado: una simple diferencia. En el siguiente ejemplo vemos que ejecutar el comando du -sh en mi home demora aproximadamente 1 minuto y 22 segundos:

scarlet:~ leandro$ time du -sh
166G    .

real    1m22.445s
user    0m0.797s
sys     0m13.733s