При использовании rsync --checksum
хороший общий способ "скопировать, если изменено", в Вашем особом случае существует еще лучшее решение!
Если Вы не хотите излишне перекомпилировать файлы, необходимо использовать кэш, который был создан для точно этой цели! На самом деле, мало того, что это избежит ненужный, перекомпилировал Ваших автоматически сгенерированных файлов, это также ускорит вещи каждый раз, когда Вы делаете make clean
и перекомпилируйте с нуля.
Затем я уверен, что Вы спросите, "Действительно ли это безопасно?" Ну, Да, как веб-сайт указывает:
Действительно ли это безопасно?
Да. Самый важный аспект кэша компилятора состоит в том, чтобы всегда производить точно тот же вывод, который произвел бы реальный компилятор. Это включает обеспечение точно тех же объектных файлов и точно тех же предупреждений компилятора, которые были бы произведены, если Вы используете реальный компилятор. Единственным путем необходимо смочь сказать об использовании кэша, скорость.
И это просто в использовании это, просто добавив его как префикс в CC=
строка Вашего make-файла (или можно использовать символьные ссылки, но make-файл путь, вероятно, лучше).
Что кажется мне, преимущество easiest-to-think-of состоит в том, что подобные файлы живут в том же дереве каталогов. Конфигурационные файлы живут в /etc
, файлы журнала и/или файлы трассировки во время выполнения живут в /var/log
, исполняемые файлы живут в /usr/bin
, информация о выполнении как файлы PID живет в /var/run
. Вы хотите знать то, что находится в файле конфигурации NTP? Каталог изменения к /etc
и сделайте ls ntp*
. Вы хотите иметь некоторые исполняемые файлы часов программы так, чтобы некоторый традиционный вирус файловой системы не заражал их? Все в /usr/bin
и /usr/local/bin
наблюдение потребностей.
Второе преимущество, о котором я могу думать, состоит в том, что стиль Unix организации способствует разделению данных и исполняемого файла. Исполняемые файлы живут в каталоге, это хорошо находится далеко от того, где шаблоны живут (/usr/share
, вероятно), и хорошо далеко от того, где данные живут. То разделение могло бы быть причиной, почему Unix/Linux / *BSD имеет больше сопротивления вирусам файловой системы, чем Windows делает, или старый Mac Pre-OSX имел.
Нет действительно никаких преимуществ для этого расположения кроме него являющийся легким предположить, где совместно использовано, и конфигурационные файлы для приложения. UNIX имеет длинное наследие этого вида расположения, и повреждаться это было бы довольно трудно. Однако некоторые дистрибутивы UNIX изменили свою модель - они только обеспечивают старые местоположения для целей прежней версии, и другие приложения связываются в ее собственный небольшой каталог/пакет. Mac OS X является самым видным примером этого, и существует несколько неясных дистрибутивов Linux, которые делают то же самое (и Android делает что-то подобное, только берет его немного далее и устанавливает и запускает каждое приложение под его собственным идентификатором пользователя также).
Главное, которое предоставляет конвенция файловой системы, состоит просто в том, что - конвенция, так, чтобы люди знали, где искать файлы (быть этим вручную или в коде). Нет никакой реальной технической причины его, чтобы быть одним путем по другому.
Независимо от того, какая организация будет выбрана, это сделает некоторые вещи проще, а некоторые - сложнее.
Организация файлов по типам, способом Unix (в bin
, man
, lib/python
, ...), облегчает использование файлов. Если вы хотите запустить команду, вы знаете, где её найти, независимо от того, какой пакет её предоставляет. Если вы хотите искать по документации, все это в одном месте. Если какая-то программа предоставляет модуль подсветки синтаксиса Vim, функцию завершения zsh или привязки Python, то соответствующий файл будет в том месте, где его может найти vim/zsh/python.
Unix также организует файлы по шаблонам использования. Конфигурационные файлы находятся в /etc
, файлы, которые не изменяются в нормальном режиме работы, находятся в /usr
, а файлы, которые изменяются автоматически, находятся в /var
. Пользовательские данные заходят в /home
. Это очень полезно для управления конфигурацией (управлять тем, что находится в /etc
плюс список установленных пакетов). Также полезно определить стратегии резервного копирования: то, что в /etc
и /home
очень важно, в то время как то, что в /usr
можно легко загрузить заново.
Основная стоимость метода Unix заключается в том, что установка программного обеспечения распространяется по многим каталогам. Тем не менее, в современных Unix-системах все равно есть менеджеры пакетов; управление файлами во многих каталогах - не самая сложная вещь, которую они делают (отслеживание зависимостей очень полезно и сложнее).
В отличие от Windows. Windows начинала без управления пакетами, и каждое приложение где-то создавало свой собственный каталог. Все файлы обычно находятся внутри этого каталога: программы, статические данные, пользовательские данные, ... За исключением иногда библиотек, программы которых попадают в общий системный каталог, не обращая внимания на конфликты ("DLL hell"). Со временем Windows стала многопользовательской, что потребовало отделения пользовательских каталогов от системных. Windows также создала центральное место для конфигурационных файлов (Unix's /etc
) и некоторых системных данных (Unix's /var
), реестр. Это скорее исторический артефакт, во многом из-за отсутствия управления пакетами и ранней истории как однопользовательской системы. Подход Windows имеет много ограничений: он не позволяет программным пакетам легко взаимодействовать. Например, большинство установленных программ не попадают в путь поиска команд по умолчанию, поэтому они плохо взаимодействуют с любой формой написания сценариев. Инсталляторы обычно предоставляют иконку меню в виде особого случая - выпадающего в отдельном системном каталоге (à la Unix!).
Ограничением подхода Unix является то, что он не позволяет легко сосуществовать нескольким версиям пакета, что особенно проблематично во время обновления пакета. Лучшим способом получить лучшее из обоих миров было бы распаковать каждый пакет в свой собственный каталог (структура /opt
) и создать леса символических ссылок из каталогов пакетов в структуру /usr
. Это то, что делает программное обеспечение типа stow.
Подводя итог, можно сказать, что подход Unix упрощает использование файлов, управление файлами и позволяет пакетам взаимодействовать; для этого требуется программное обеспечение для управления пакетами, но это все равно желательно. Подход Windows упрощает управление пакетами вручную, но для получения полезной функциональности необходимо ориентироваться на модель Unix.
Основным преимуществом, не упомянутым выше, и одной из исторических причин такой структуры является физическое разделение нескольких томов / дисков, доступных на разных этапах загрузки. процесс.
Еще одним преимуществом является то, что различные каталоги могут быть смонтированы на томах / файловых системах, которые оптимизированы для данных каталога. Например, tmpfs
для / run
; и / sbin
на носителе / ПЗУ только для чтения.
Также тома могут быть локальными или удаленными, личными или общими.
Наконец, см. Application Directory для альтернативного подхода (упомянутого @fluffy), используемого в UNIX (OS X .app
), Linux ( ROX Desktop ) и Windows ( PortableApps.com ).
/bin
,/etc
, от/
. – jw013 17.01.2013, 23:47