¿Cuál es el propósito del comando 'instalar'?

49

He visto el installcomando usado en muchos Makefiles, y su existencia y uso son un poco confusos. Según las páginas del manual, parece una imitación cpcon menos funciones, pero supongo que no se usaría a menos que tuviera alguna ventaja cp. ¿Cual es el trato?

azernik
fuente

Respuestas:

50

installno solo copia archivos sino que también cambia su propiedad y permisos y, opcionalmente, elimina los símbolos de depuración de los ejecutables. Combina cpcon chown, chmody strip. Es una herramienta conveniente de alto nivel que logra una secuencia común de tareas elementales.

Una ventaja de installsobre cppara instalar ejecutables es que si el destino ya existe, elimina el archivo de destino y crea uno nuevo. Esto elimina todas las propiedades actuales, como las listas y capacidades de control de acceso, que pueden verse como una ventaja y una desventaja. Al actualizar los ejecutables, si hay instancias en ejecución de este ejecutable, siguen ejecutándose sin verse afectados. Por el contrario, cpactualiza el archivo en su lugar si hay uno. En la mayoría de las variantes de Unix, esto falla con el error EBUSY¹ si el objetivo es un ejecutable en ejecución; en algunos puede causar que el destino se bloquee porque carga secciones de código dinámicamente y la modificación del archivo hace que se cargue un código sin sentido.

installes un comando BSD (agregado en 4.2BSD , es decir, a principios de la década de 1980). No ha sido adoptado por POSIX.

¹ "Archivo de texto ocupado". En este contexto, "archivo de texto" significa "archivo ejecutable binario", por razones históricas oscuras .

Gilles 'SO- deja de ser malvado'
fuente
Nota importante (por lo que puedo entender) es que también se combina rmcon cp. Esto significa que puede sobrescribir archivos que están en uso al desvincularlos ( rm) primero. cpsolo daría un error.
code_fodder
10

Proporciona una forma estandarizada de manipular la propiedad y los permisos de un archivo o directorio al copiar el archivo o crear el directorio, en un solo comando.

Ignacio Vazquez-Abrams
fuente
99
No es atómico. Atómico significa que no hay estados intermedios visibles para otros procesos. installrealiza una copia seguida de chown y chmod, todas las llamadas al sistema separadas, y no utiliza rename-in-place (al menos a partir de coreutils 8.13, la versión GNU no lo hace). Si asume que todo sucede atómicamente, puede recibir una desagradable sorpresa.
3

Con el installcomando podemos copiar archivos con los permisos deseados

Ejemplo que se usa principalmente al configurar ldap

install -o ldap -g ldap /etc/openldap/DB_CONFIG_EXAMPLE  /var/lib/ldap/DB_CONFIG

Esto nos ahorra hacer chown ldap. /var/lib/ldap/DB_CONFIG, si copió usando, cpentonces también necesita hacerlo chownen este escenario

Rahul Patil
fuente
1

Vea la página del manual para install:

$ man install

extracto

SYNOPSIS
       install [OPTION]... [-T] SOURCE DEST
       install [OPTION]... SOURCE... DIRECTORY
       install [OPTION]... -t DIRECTORY SOURCE...
       install [OPTION]... -d DIRECTORY...


DESCRIPTION
       This  install  program  copies  files  (often just compiled) into 
       destination locations you choose.  If you want to download and
       install a ready-to-use package on a GNU/Linux system, you should instead 
       be using a package manager like yum(1) or apt-get(1).

       In the first three forms, copy SOURCE to DEST or multiple SOURCE(s) to 
       the existing DIRECTORY, while  setting  permission  modes and 
       owner/group.  In the 4th form, create all components of the given 
       DIRECTORY(ies).

       Mandatory arguments to long options are mandatory for short options too.

Otras cosas útiles como la instalación con propiedad específica, permisos y la preservación de las marcas de tiempo de los archivos originales también se pueden lograr mediante el uso de install.

   -g, --group=GROUP
          set group ownership, instead of process' current group

   -m, --mode=MODE
          set permission mode (as in chmod), instead of rwxr-xr-x

   -o, --owner=OWNER
          set ownership (super-user only)

   -p, --preserve-timestamps
          apply access/modification times of SOURCE files to corresponding 
          destination files

Referencias

slm
fuente
44
Como dije en la pregunta, leí la página principal; me dejó sin aclarar sobre lo que esto agrega a la funcionalidad de cp.
azernik
slm destacó la funcionalidad específica que distingue a los dos: puede establecer el propietario, el grupo y el modo específicos para el archivo de destino con install, en lugar de solo preservar los permisos existentes como concp
Joshua Miller