управление версиями для / и т.д. под *BSD

"Категорический" ответ, конечно, принесен Вам Бесполезным Использованием cat Премия.

Цель кошки состоит в том, чтобы конкатенировать (или "соединиться"), файлы. Если это - только один файл, связывание его ни с чем вообще является пустой тратой времени и стоит Вам процесса.

При инстанцировании кошки именно так чтения кода по-другому делают для просто еще одного процесса и еще одного набора потоков ввода/вывода, которые не нужны. Обычно реальная задержка в Ваших сценариях будет неэффективными циклами и фактической обработкой. В большинстве современных систем, одной дополнительной cat движение не должно уничтожать Вашу производительность, но существует почти всегда другой способ написать Ваш код.

Большинство программ, как Вы отмечаете, может принять аргумент в пользу входного файла. Однако всегда существует встроенная оболочка < это может использоваться везде, где поток STDIN ожидается, который сохранит Вас один процесс путем выполнения работы в процессе оболочки, который уже работает.

Можно даже стать творческими с тем, ГДЕ Вы пишете это. Обычно это было бы помещено в конце команды перед определением любых выходных перенаправлений или каналов как это:

sed s/blah/blaha/ < data | pipe

Но это не должен быть тот путь. Это может даже быть на первом месте. Например, Ваш пример кода мог быть записан как это:

< data \
    sed s/bla/blaha/ |
    grep blah |
    grep -n babla

Если удобочитаемость сценария является Вашим беспокойством, и Ваш код достаточно грязен что, добавляя строку для cat как ожидают, поможет следовать, существуют другие способы очистить Ваш код. Тот, что я использую много, которое помогает сделать сценарии easiy для выяснения позже, разбивает каналы в логические наборы и сохраняет их в функциях. Код сценария затем становится очень естественным, и любую часть pipline легче отладить.

function fix_blahs () {
    sed s/bla/blaha/ |
    grep blah |
    grep -n babla
}

fix_blahs < data

Вы могли затем продолжить fix_blahs < data | fix_frogs | reorder | format_for_sql. За pipleline, который читает как этот, действительно легко следовать, и отдельные компоненты могут быть отлажены легко в их соответствующих функциях.

14
03.11.2010, 22:36
3 ответа

Под хинду инструмент для управления вызванными пакетом изменениями в / и т.д. (названный отправкой-conf) поддерживает rcs для отслеживания изменений, но это не действительно мощно.

Я склонен присваивать версию своему / и т.д. через git, тем более, что при помощи различных ответвлений я могу сохранить свой / и т.д. максимально подобным по различным дистрибутивам столь же возможный при хранении как можно большего количества материала в одном месте (для некоторых областей, который, очевидно, перестал работать, апачская конфигурация, например, действительно отличается через различные дистрибутивы). Это работает как это:

У меня есть мой master repo с моими конфигурационными файлами по умолчанию. Теперь я существую касания с новым дистрибутивом, таким образом, я создаю новое ответвление на основе моего master ответвление на основе имени распределения (в этом примере debian). Debian сохраняет некоторый файл конфигурации в месте отличающимся от моего master таким образом, я делаю a git mv file new_loc. И все прекрасно. Я переключаюсь назад на master и изменение, что файл, потому что я добавил некоторую определенную директиву конфигурации, когда я объединяюсь master в мой debian перейдите перемещенный файл изменяется, таким образом, я могу в основном просто изменить большинство вещей в моем master ответвление и просто должно объединить изменения в моих ответвлениях "распределения" (обычно, они имеют тенденцию быть большим количеством соединения распределения и ответвлений цели, debian сервер имеет некоторые различия к debian рабочей станции, очевидно, но функции все еще работают).

Так в основном у меня есть "универсальная конфигурация" в master и (для высказывания это в условиях объектно-ориентированного программирования) наследовало тех, которые в мои ответвления (кто также может наследоваться друг от друга).

Кроме этого, gitмеханизмы, чтобы "избирательно подойти к выбору" фиксаций (в этом случае изменения в / и т.д./) время от времени были довольно полезны мне, где мне только были нужны части определенной конфигурации.

Теперь к некоторым Вашим идеям:

  • Если бы мне было нужно больше интеграции диспетчера пакетов, то я, вероятно, использовал бы сценарии обертки для этого (в данный момент, я не делаю).
  • при обработке восходящих версий, поскольку ответвление хорошо работало бы с git, просто другое ответвление Вы иногда объединяетесь (частично) в master
  • Черный список в мерзавце является файлом .gitignore в Вашем repo так, чтобы был покрыт.
4
27.01.2020, 19:52
  • 1
    мне понравилось cfg-обновление на хинду лучше, чем отправка-conf, к сожалению, первый не сохраняется. С тех пор за приблизительно год до того, как я уехал, и это была путаница жемчуга спагетти, imo. –  xenoterracide 04.11.2010, 02:36

Существует инструмент, названный etckeeper, я понятия не имею, насколько хороший это.

etckeeper является набором инструментов, чтобы позволить / и т.д. быть сохраненным в мерзавце, подвижном, darcs, или bzr репозиторий. Это сцепляется в способный (и другие диспетчеры пакетов включая конфетку и pacman-g2) для автоматической фиксации изменений, внесенных в / и т.д. во время обновлений пакета. Это отслеживает метаданные файла, которые обычно не поддерживают revison системы управления, но это важно для / и т.д., таково как полномочия/etc/shadow. Это является довольно модульным и настраивается, также будучи прост в использовании, если Вы понимаете основы работы с управлением версиями.

Я также не знаю, может ли это быть сделано продолжить работать *BSD, я подозреваю, что это могло, но что это не будет поддерживаться с портами из поля.

-1
27.01.2020, 19:52

Я использовал fossil для этого с некоторым успехом. См. мое сообщение об Окаменелости для большего количества информации. Я также использовал названный инструмент etcupdate который является больше для перемещения между обновлениями, чем отслеживание изменений. Я полагаю, что это было предназначено, чтобы быть сопутствующим инструментом для freebsd-update однажды. Я в настоящее время не уверен в его состоянии, но оно продолжает работать мой RELEASE-8.* системы.

http://lists.freebsd.org/pipermail/freebsd-current/2010-June/017927.html http://people.freebsd.org/~jhb/etcupdate/

3
27.01.2020, 19:52

Теги

Похожие вопросы