En los sistemas Unix, el utilitario install permite copiar archivos binarios a sus ubicaciones definitivas, lo que se conoce popularmente como "instalar". Este artículo demuestra su uso básico y opciones.



La herramienta install es una especie de cp con esteroides. Es decir combina cp+chown+chmod+strip en un único comando. Es utilizada típicamente por todos los gestores de paquetes para la instalación de archivos. También suele ser utilizada desde scripts de instalación de programas y utilitarios propietarios o por fuera de la gestión de paquetes tradicional.

Para entender el funcionamiento de este utilitario, veamos un ejemplo compilando un clásico "hola mundo" en lenguaje C y compilado con gcc:

root@hal9000:/home/emi# mkdir testc &&cd testc
root@hal9000:/home/emi/testc# cat > test.c <<EOT
> #include <stdio.h>
> int main() {
>   printf("Hola mundo!!!\n");
>   return 0;
> }
> EOT
root@hal9000:/home/emi/testc# gcc -Wall -o test test.c
root@hal9000:/home/emi/testc# ll
total 24
-rwxr-xr-x 1 root root 16608 Nov 13 09:36 test
-rw-r--r-- 1 root root    75 Nov 13 09:36 test.c
root@hal9000:/home/emi/testc# file test
test: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=d6dc6ba4b82006b069341e343886a450726297d9, not stripped

Se ha creado el archivo test.c con cat (este truco para crear un archivo con cat es similar al que expliqué anteriormente, pero se indica la secuencia de terminación a la redirección de entrada en lugar de emplear Ctrl+D). Este es un archivo fuente de código en lenguaje C en formato de texto plano que luego ha sido compilado con gcc.

Notar que el binario generado figura "not stripped". Es decir contiene la tabla de símbolos de debug.

El usuario con el que se desea instalar en su ubicación definitiva (/usr/local/bin/) es root:

root@hal9000:/home/emi/testc# id
uid=0(root) gid=0(root) groups=0(root)

Como mencionaba al comienzo, install permite copiar, modificar permisos y ownsership y pasar strip, todo en un solo comando. A tal fin, las opciones -o y -g establecen usuario y grupo dueños del archivo en su ubicación definitiva. Luego -m indica los permisos en modo octal y -s indica que se realice el strip de binarios:

root@hal9000:/home/emi/testc# install -o root -g staff -m 755 -s -v test /usr/local/bin/test
'test' -> '/usr/local/bin/test'

Se observa en el archivo instalado que los permisos y ownership son correctos:

root@hal9000:/home/emi/testc# ll /usr/local/bin/test 
-rwxr-xr-x 1 root staff 14408 Nov 13 09:37 /usr/local/bin/test

Además el binario ha sido "destripado":

root@hal9000:/home/emi/testc# file /usr/local/bin/test 
/usr/local/bin/test: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=d6dc6ba4b82006b069341e343886a450726297d9, stripped

Sin embargo, notar que la fecha de modificación no coincide con la fecha de modificación del binario origen. No se ha preservado, sino que coincide con la fecha actual del sistema al momento de crear el nuevo archivo.

root@hal9000:/home/emi/testc# date
Wed 13 Nov 2019 09:37:55 AM -03

Para preservar las fechas de acceso/modificación del archivo origen, es necesario agregar la opción -p:

root@hal9000:/home/emi/testc# install -p -o root -g staff -m 755 -s -v test /usr/local/bin/test
removed '/usr/local/bin/test'
'test' -> '/usr/local/bin/test'

La fecha y hora coincide con el archivo origen:

root@hal9000:/home/emi/testc# ll /usr/local/bin/test 
-rwxr-xr-x 1 root staff 14408 Nov 13 09:36 /usr/local/bin/test

Notar además que se ha eliminado la instalación previa del archivo /usr/local/bin/test, tal como se observa en la salida de install.

Es posible preservar archivos preexistentes en el origen. La opción -b permite crear una copia de respaldo antes de sobrescribir un archivo existente:

root@hal9000:/home/emi/testc# ll /usr/local/bin/test*
-rwxr-xr-x 1 root staff 14408 Nov 13 09:36 /usr/local/bin/test
-rwxr-xr-x 1 root staff 14408 Nov 13 09:36 /usr/local/bin/test~

Tener en cuenta que este mecanismo básico mantiene una única copia de seguridad. Para ver más opciones de backup, consultar la opción --backup en la página de manual (man install), la cual funciona exactamente igual a la del utilitario cp.


Tal vez pueda interesarte


Compartí este artículo