Respuestas:
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 cp
un 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.
Técnicamente, la diferencia entre install -c
y cp
es que install
establece los permisos del archivo de destino rwxr-xr-x
. cp
conserva los permisos del archivo fuente menos la umask. Estos comportamientos predeterminados son útiles en diferentes situaciones. Obviamente, con todas las opciones que ofrecen cp
y install
ofrecen hoy en día, las funcionalidades han convergido.
Hoy en día, install
se usa comúnmente en makefiles, en cp
cualquier otro lugar. Esta distinción es útil ocasionalmente porque algunos sistemas operativos o sistemas de instalación le permiten conectarse al install
programa 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.
La install
utilidad, en su base, es una fantasía cp
. Pero como una herramienta específicamente se instala, contiene algunas características que cp
no lo hacen. Mi /usr/bin/install
partir de GNU coreutils no sólo copias, sino que también puede cambiar las permanentes / propiedad como banderas Arg (ahorro chgrp
, chown
, chmod
invocaciones) una opción de columna de información de depuración (guardar una strip
invocació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.
cp --remove-destination
en GNU coreutils.