¿
make install
Con un Makefile la mayor parte del tiempo llama/usr/bin/install
?¿Qué trabajo necesario hace
/usr/bin/install
además de copiar los archivos recién compilados/usr/bin/local
?La página de manual dice
/usr/bin/install
copiar archivos y establecer atributos. ¿Qué atributos son tan importantes para establecer?- ¿Solo establece modos de permiso y propietario / grupo, que no son necesarios?
11
Respuestas:
install
ofrece una serie de características además de copiar archivos a un directorio.-s
opción elimina la tabla de símbolos de un ejecutable, ahorrando espacio-m
opción establece los bits de permiso. Los archivos que se encuentran en el directorio del desarrollador se crearon sujetos a su umask, lo que puede impedir que otros los ejecuten.install -m 755 file1 /usr/local/bin
garantiza que todos puedan ejecutar el archivo, que es probablemente lo que el desarrollador quiere para un archivo en un directorio compartido.-o
y-g
establecen el propietario y el grupo. Concp
, el propietario y el grupo del archivo de destino se establecerían en el uid y gid de quien ejecutó el archivocp
, y concp -p
, el propietario y el grupo del archivo de destino serían los mismos que el archivo en el directorio de compilación, ninguno de los cuales podría ser lo que el desarrollador quiera. Elwall
programa debe estar en grupotty
, elscreen
programa debe estar en grupoutmp
, etc.install -s -m 755 -o root -g bin file1 file2 lib/* $(DESTDIR)
es más sucinto que los cuatro comandoscp
,strip
,chmod
, ychown
.La última viñeta es probable por qué
install
se inventó el comando y por qué muchos makefiles lo usan.Install
sin embargo, no siempre se usa. He vistocp -r lib $(DESTDIR)/lib
cuando hay un árbol completo lleno de cosas para copiar, y./install.sh
si el desarrollador prefiere usar un script personalizado. Muchos paquetes tienen uninstall.sh
derivado del que viene con X11, que es similarinstall
pero admite una-t
opción (transformación) para cambiar el nombre de los archivos de destino de una manera específica.fuente
Dado que los comandos que se usan en un archivo MAKE dependen esencialmente de los desarrolladores del proyecto, es difícil dar una respuesta definitiva aquí. En general, diría que es una buena práctica usar el
install
comando en un archivo MAKE para cualquier proceso de instalación mencionado en 2, pero de nuevoinstall
no es POSIX, por lo que usarlo siempre puede no ser el enfoque más portátilAFAIK, la mayoría de las herramientas se pueden usar para generar automáticamente archivos MAKE como
automake
ycmake
se usaráninstall
.Generalmente
install
se usa para copiar archivos y configurar permisos / propietario / grupo en un comando como usted dice. Otra función de uso común es quitar símbolos innecesarios (por ejemplo, símbolos de depuración) de un binario que ya no los necesita. También tiene algunas opciones adicionales para cosas como hacer copias de seguridad antes de instalar y trabajar dentro de un contexto SELinux que pueden ser útiles.Los permisos para elegir dependen del archivo en sí. La mayoría de los archivos instalados son legibles por todos, pero solo se pueden escribir desde la raíz (la idea es colocar los archivos de programa en un lugar donde todos puedan acceder a ellos pero no puedan ser manipulados). Este no es el caso con todo, si el archivo contiene datos confidenciales, es común limitar el acceso a un grupo o solo a la raíz.
fuente