He visto en muchos lugares que se utilizan install -dpara crear directorios y install -ccopiar un archivo. ¿Por qué no usar mkdiry cp? ¿Hay alguna ventaja en el uso install?
fuente
He visto en muchos lugares que se utilizan install -dpara crear directorios y install -ccopiar un archivo. ¿Por qué no usar mkdiry cp? ¿Hay alguna ventaja en el uso install?
Depende de lo que estés haciendo.
El installcomando 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 -dy -copciones que tiene -mpara la especificación de los nuevos permisos del archivo a instalar, por lo que no tiene que hacer una cpy una chmodpara conseguir el mismo resultado. Por ejemplo:
install -m644 "$srcdir/$pkgname-$pkgver-linux64" "$pkgdir/opt/$pkgname"
También tiene opciones -gy -opara configurar el grupo objetivo y el propietario, respectivamente. Esto evita llamadas separadas a chown. En general, el uso installacorta 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.
installo$(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.Además de las descripciones anteriores aquí sobre el uso, hay una diferencia de bajo nivel entre
cpyinstall, al menos en Linux. Si copia sobre un archivo existente,cpsobrescribe el inodo existente del archivo, mientras queinstallsiempre 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
cpprovoca un error EBUSY, mientras queinstalltendrá éxito. El binario en ejecución seguirá usando la versión anterior, pero la nueva versión se usa si se reinicia el programa.fuente
Si el directorio en cuestión ya existe:
mkdir -pintentará establecer los bits de propiedad y modo de archivoinstall -dno intentará establecer los bits de propiedad y modo de archivoEsto es para
mkdiryinstalldesde GNU coreutils . Ambos usan la mismamake_dir_parentsfunción, pero con elpreserve_existingparámetro se establece enfalseotrue, respectivamente.fuente