В Linux можно копировать собранные файлы так, чтобы не менять файл назначения, если новая версия фактически такая же!
Для этого у GNU install есть опция -C (--compare):
install -C -m 0755 ./build/myapp ./bin/myapp
Перед установкой install сравнит исходный и существующий файлы. Если содержимое и заданные атрибуты совпадают, файл назначения вообще не будет изменён.
Это принципиально отличается от обычного копирования поверх файла:
cp ./build/myapp ./bin/myapp
Даже если результат сборки идентичен предыдущему, лишняя перезапись может изменить метаданные файла и запустить всё, что следит за его изменением.
С install -C это удобно убрать прямо из Makefile или скрипта локального развёртывания:
install -C -m 0755 build/myapp /usr/local/bin/myapp
Причём install одновременно умеет выставлять права, поэтому отдельный chmod после копирования не требуется:
install -C -m 0644 config.ini /etc/myapp/config.ini
🔥 install -C полезен там, где одна и та же сборка устанавливается много раз: неизменившийся файл остаётся нетронутым, а копирование и выставление прав сводятся к одной команде.
🚪 Linux Ready | #совет
Для этого у GNU install есть опция -C (--compare):
install -C -m 0755 ./build/myapp ./bin/myapp
Перед установкой install сравнит исходный и существующий файлы. Если содержимое и заданные атрибуты совпадают, файл назначения вообще не будет изменён.
Это принципиально отличается от обычного копирования поверх файла:
cp ./build/myapp ./bin/myapp
Даже если результат сборки идентичен предыдущему, лишняя перезапись может изменить метаданные файла и запустить всё, что следит за его изменением.
С install -C это удобно убрать прямо из Makefile или скрипта локального развёртывания:
install -C -m 0755 build/myapp /usr/local/bin/myapp
Причём install одновременно умеет выставлять права, поэтому отдельный chmod после копирования не требуется:
install -C -m 0644 config.ini /etc/myapp/config.ini
🔥 install -C полезен там, где одна и та же сборка устанавливается много раз: неизменившийся файл остаётся нетронутым, а копирование и выставление прав сводятся к одной команде.
🚪 Linux Ready | #совет