Cómo es install -c diferente de cp

20

¿Cuál es la diferencia entre install -c y cp? La mayoría de las instalaciones tienden a usar install -c, pero desde la página de manual no suena como algo diferente a cp (excepto quizás establecer permisos). ¿Cuándo debo usar install -c y cuándo cp?

sligocki
fuente

Respuestas:

18

Una diferencia significativa es que cp trunca el archivo de destino y comienza a copiar datos del origen en el archivo de destino.

instalar, por otro lado, elimina primero el archivo de destino.

Esto es importante porque si el archivo de destino ya está en uso, podrían pasarle cosas malas a quien esté usando ese archivo en caso de que tenga cpun archivo nuevo encima. por ejemplo, sobrescribir un ejecutable que se está ejecutando podría fallar. Truncar un archivo de datos en el que un proceso existente está ocupado leyendo / escribiendo podría causar un comportamiento bastante extraño. Si solo elimina primero el archivo de destino, como lo hace la instalación, las cosas continúan de manera muy normal: el archivo eliminado no se elimina realmente hasta que todos los procesos cierran ese archivo.

nos
fuente
3
Buena respuesta. Pero vea también cp --remove-destinationen GNU coreutils.
Peter Eisentraut
7

Técnicamente, la diferencia entre install -cy cpes que installestablece los permisos del archivo de destino rwxr-xr-x. cpconserva los permisos del archivo fuente menos la umask. Estos comportamientos predeterminados son útiles en diferentes situaciones. Obviamente, con todas las opciones que ofrecen cpy installofrecen hoy en día, las funcionalidades han convergido.

Hoy en día, installse usa comúnmente en makefiles, en cpcualquier otro lugar. Esta distinción es útil ocasionalmente porque algunos sistemas operativos o sistemas de instalación le permiten conectarse al installprograma para registrar los paquetes instalados. Los sistemas modernos de administración de paquetes hacen que este tipo de obsoleto, pero algunas personas todavía lo usan. Además, la posibilidad de establecer los permisos del archivo de destino de la misma manera es muy conveniente.

Peter Eisentraut
fuente
4

La installutilidad, en su base, es una fantasía cp. Pero como una herramienta específicamente se instala, contiene algunas características que cpno lo hacen. Mi /usr/bin/installpartir de GNU coreutils no sólo copias, sino que también puede cambiar las permanentes / propiedad como banderas Arg (ahorro chgrp, chown, chmodinvocaciones) una opción de columna de información de depuración (guardar una stripinvocación) y también un poco de mojo para los contextos de SELinux.

Simplemente proporciona acciones de conveniencia útiles para las instalaciones de software. Ninguno cambia la vida, todos son útiles y hacen que sus scripts sean más limpios.

Rich Homolka
fuente