He visto en muchos lugares que se utilizan install -d
para crear directorios y install -c
copiar un archivo. ¿Por qué no usar mkdir
y cp
? ¿Hay alguna ventaja en el uso install
?
He visto en muchos lugares que se utilizan install -d
para crear directorios y install -c
copiar un archivo. ¿Por qué no usar mkdir
y cp
? ¿Hay alguna ventaja en el uso install
?
Respuestas:
Depende de lo que estés haciendo.
El install
comando se usa normalmente en scripts de instalación que vienen con paquetes y código fuente para instalar un binario en su sistema. También se puede usar para instalar cualquier otro archivo o directorio. Además de las -d
y -c
opciones que tiene -m
para la especificación de los nuevos permisos del archivo a instalar, por lo que no tiene que hacer una cp
y una chmod
para conseguir el mismo resultado. Por ejemplo:
install -m644 "$srcdir/$pkgname-$pkgver-linux64" "$pkgdir/opt/$pkgname"
También tiene opciones -g
y -o
para configurar el grupo objetivo y el propietario, respectivamente. Esto evita llamadas separadas a chown
. En general, el uso install
acorta su script y lo hace más conciso al crear, copiar, configurar el modo y otras cosas relacionadas con un solo comando en lugar de muchos.
Para referencia, ver man install
. Para su uso, solo eche un vistazo a cualquier script de instalación enviado con algún código fuente del paquete .
"instalar" generalmente combina las siguientes acciones:
Por lo tanto, se sigue el enfoque de Unix de que se debe crear una herramienta para una acción única pero completa de instalar un archivo creado por una herramienta de construcción en su ubicación de trabajo.
El concepto completo, como he descrito, se implementa en sistemas BSD (en la llamada versión "xinstall"); Trato aquí el modo "copia segura" (nueva versión con cambio de nombre atómico) como vital para esto. Los sistemas Linux (de coreutils) pierden esta parte importante y son propensos a las carreras entre la eliminación y la reapertura por un proceso de espectador; pero esto podría haber sido cubierto por los administradores de paquetes.
Además de las descripciones anteriores aquí sobre el uso, hay una diferencia de bajo nivel entre cp
y install
, al menos en Linux. Si copia sobre un archivo existente, cp
sobrescribe el inodo existente del archivo, mientras que install
siempre crea un nuevo inodo para el mismo nombre de archivo.
Esto hace la diferencia al instalar una nueva versión de un binario en ejecución. El uso cp
provoca un error EBUSY, mientras que install
tendrá éxito. El binario en ejecución seguirá usando la versión anterior, pero la nueva versión se usa si se reinicia el programa.
Si el directorio en cuestión ya existe:
mkdir -p
intentará establecer los bits de propiedad y modo de archivoinstall -d
no intentará establecer los bits de propiedad y modo de archivoEsto es para mkdir
y install
desde GNU coreutils . Ambos usan la misma make_dir_parents
función, pero con el preserve_existing
parámetro se establece en false
o true
, respectivamente.
install
o$(INSTALL)
en archivos MAKE también marca esos pasos como pasos de copia de instalación y no como pasos de copia normales. Eso podría ser útil.