лучшая стратегия для резервного копирования * ваших * скриптов?

--- уже спросил на unix.StackExchange, но выключил (слишком субъективно) ---

Переписан для ясности.

  • Я хочу написать сценарии для своего собственного использования
  • Я хочу иметь возможность их резервного копирования
  • Я еще не создал подпрограмму резервного копирования - собираюсь написать сценарий.
  • Это будет мой 4-й сценарий и мой первый серьезный подход к резервному копированию (так что будьте осторожны).

Какова наиболее эффективная стратегия, учитывая, что два фактора, кажется, находятся в компромиссе:

a) среди нескольких вариантов, /usr/local/bin широко пропагандируется как наиболее выгодный место для пользовательских сценариев, (но не уникально; см. идеи в 1 , 2 , 3 );

b) /usr/local/bin полон других, автоматически сгенерированных файлов, файлов (например, Dropbox и т. Д.), Которые я бы не хотел брать в резервную копию и, следовательно, должен был бы найти способ фильтрации (это не тривиальная задача для моего навыка уровень, хотя я готов учиться).

Я атакую ​​это из «конца каталога» (например, «не используйте этот каталог, используйте этот!») Или из «конца сценария резервного копирования» (например, эффективный фильтр, который я мог бы использовать с tar или cp или что угодно, чтобы извлечь мои файлы сценариев из толпы в /usr/local/bin).

Я не могу найти никого, кто бы говорил об этих двух вещах в одном месте (но «резервное копирование» и «сценарии» заваливают результаты «резервными сценариями», поэтому, возможно, я пропустил это).

Приветствия - спасибо за конструктивные ответы до сих пор.

PS - см. Также более раннюю версию этого вопроса в другом месте для пары полезных ответов перед выключением.

2
задан 4 January 2018 в 14:54

1 ответ

Вы упомянули две вещи, которым я не верю, хорошие решения:

"Созданный":

Стандартные атрибуты файла Linux включают пользователя владельца и группу. Я настоятельно рекомендую удостовериться все файлы в /usr/local/bin (или на самом деле почти все каталоги, которые содержат материал, к которому получат доступ все пользователи) принадлежат root как пользователь и группа, и также только перезаписываемый владельцем. Это - меры безопасности, которые должны предотвратить непривилегированные модификации в файл, который мог бы позже быть выполнен кем-то еще или с поднятым использованием полномочий sudo.

Таким образом, как владелец всех тех сценариев в /usr/local/bin должен быть root, мы не можем использовать это для различения сценариев, которых Вы хотите создать резервную копию.

"Подкаталог":

Исполняемые файлы в подкаталогах /usr/local/bin не был бы принят системой как команды, которые можно выполнить непосредственно без пути. Причина состоит в том, что для этого, исполняемый файл должен быть непосредственно в каталоге, перечисленном в $PATH переменная среды. Подкаталоги автоматически не включены здесь, каждое местоположение должно быть явно указано - снова как улучшение безопасности для понижения риска случайного выполнения недоверяемого кода.

Хотя было бы возможно добавить, что подкаталог во всех необходимых местоположениях, я воздержусь от изменения всех пользователей $PATH (а не забыть, /etc/sudoers конфигурация secure_path должен включать новый каталог также, если Вы хотите его доступный при использовании sudo).


Теперь, что Вы могли сделать вместо этого? Вот несколько идей:

Определенный для пользователя каталог bin:

Если Вам не нужны те сценарии в масштабе всей системы для всех пользователей, но только для Вашей собственной учетной записи, просто поместите их в ~/bin (~ будучи Вашим корневым каталогом). Это местоположение находится только на Вашем собственном пользователе $PATH, не кого-либо еще. Для Ваших персональных сценариев это должно быть самым простым путем.

Следует иметь в виду, что необходимо перезапустить текущую оболочку однажды (закройте и вновь откройте окно терминала, введите source ~/.profile или выйдите из системы и въезжайте задним ходом), если Вы просто создали каталог во время своей текущей сессии. Это вызвано тем, что каталог добавляется, только если он существует, когда оболочка инициализирует себя. Вы никогда не должны делать этого снова позже.

Сохраните список своих сценариев:

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

#!/bin/bash
backupdir=~/backup/scripts
listfile=~/backup/script-list.txt
while read line ; do
    cp -- "$line" "$backupdir"
done < "$listfile"

Просто необходимо сохранить файл списка (здесь ~/backup/script-list.txt) обновленный и хорошо отформатированный. В этой простой версии необходимо удостовериться, что каждая строка содержит точно один полный путь в файл, которого Вы хотите создать резервную копию без продвижения или конечных пробелов и никаких пустых строк. Конечно, сценарий мог быть улучшен, чтобы смочь обработать такие случаи, но это - просто быстрый прототип.

Добавьте "подпись" к своим собственным сценариям и только создайте резервную копию тех, которые содержат ее:

Просто думайте об уникальной строке, которую Вы добавляете ко всем своим собственным сценариям, например, в комментарии. Это могло быть похожим *** CREATED BY BYTECOMMANDER *** или так, возможно, еще более уникальный. Затем можно сделать резервный сценарий, который сканирует /usr/local/bin для файлов, содержащих Вашу строку для подписи и только, копирует тех, оставляя других в покое:

#!/bin/bash
backupdir=~/backup/scripts
signature="*** CREATED BY BYTECOMMANDER ***"
for scriptfile in /usr/local/bin/* ; do
    if grep -qF "$signature" "$scriptfile" ; then
        cp -- "$scriptfile" "$backupdir"
    fi
done
3
ответ дан 4 January 2018 в 14:54
  • 1
    То, что ls... материал в комментарии делает точно это, списки все пакеты, установленные с датой/временем за данный месяц (здесь, май). – ish 1 June 2012 в 10:54
  • 2
    То, что ls... материал в комментарии делает точно это, списки все пакеты, установленные с датой/временем за данный месяц (здесь, май). – ish 1 June 2012 в 10:54
  • 3
    То, что ls... материал в комментарии делает точно это, списки все пакеты, установленные с датой/временем за данный месяц (здесь, май). – ish 1 June 2012 в 10:54
  • 4
    То, что ls... материал в комментарии делает точно это, списки все пакеты, установленные с датой/временем за данный месяц (здесь, май). – ish 1 June 2012 в 10:54
  • 5
    То, что ls... материал в комментарии делает точно это, списки все пакеты, установленные с датой/временем за данный месяц (здесь, май). – ish 1 June 2012 в 10:54
  • 6
    То, что ls... материал в комментарии делает точно это, списки все пакеты, установленные с датой/временем за данный месяц (здесь, май). – ish 1 June 2012 в 10:54

Другие вопросы по тегам:

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