--- уже спросил на unix.StackExchange, но выключил (слишком субъективно) ---
Переписан для ясности.
Какова наиболее эффективная стратегия, учитывая, что два фактора, кажется, находятся в компромиссе:
a) среди нескольких вариантов, /usr/local/bin
широко пропагандируется как наиболее выгодный место для пользовательских сценариев, (но не уникально; см. идеи в 1 , 2 , 3 );
b) /usr/local/bin
полон других, автоматически сгенерированных файлов, файлов (например, Dropbox и т. Д.), Которые я бы не хотел брать в резервную копию и, следовательно, должен был бы найти способ фильтрации (это не тривиальная задача для моего навыка уровень, хотя я готов учиться).
Я атакую это из «конца каталога» (например, «не используйте этот каталог, используйте этот!») Или из «конца сценария резервного копирования» (например, эффективный фильтр, который я мог бы использовать с tar
или cp
или что угодно, чтобы извлечь мои файлы сценариев из толпы в /usr/local/bin
).
Я не могу найти никого, кто бы говорил об этих двух вещах в одном месте (но «резервное копирование» и «сценарии» заваливают результаты «резервными сценариями», поэтому, возможно, я пропустил это).
Приветствия - спасибо за конструктивные ответы до сих пор.
PS - см. Также более раннюю версию этого вопроса в другом месте для пары полезных ответов перед выключением.
Вы упомянули две вещи, которым я не верю, хорошие решения:
Стандартные атрибуты файла Linux включают пользователя владельца и группу. Я настоятельно рекомендую удостовериться все файлы в /usr/local/bin
(или на самом деле почти все каталоги, которые содержат материал, к которому получат доступ все пользователи) принадлежат root
как пользователь и группа, и также только перезаписываемый владельцем. Это - меры безопасности, которые должны предотвратить непривилегированные модификации в файл, который мог бы позже быть выполнен кем-то еще или с поднятым использованием полномочий sudo
.
Таким образом, как владелец всех тех сценариев в /usr/local/bin
должен быть root
, мы не можем использовать это для различения сценариев, которых Вы хотите создать резервную копию.
Исполняемые файлы в подкаталогах /usr/local/bin
не был бы принят системой как команды, которые можно выполнить непосредственно без пути. Причина состоит в том, что для этого, исполняемый файл должен быть непосредственно в каталоге, перечисленном в $PATH
переменная среды. Подкаталоги автоматически не включены здесь, каждое местоположение должно быть явно указано - снова как улучшение безопасности для понижения риска случайного выполнения недоверяемого кода.
Хотя было бы возможно добавить, что подкаталог во всех необходимых местоположениях, я воздержусь от изменения всех пользователей $PATH
(а не забыть, /etc/sudoers
конфигурация secure_path
должен включать новый каталог также, если Вы хотите его доступный при использовании sudo
).
Теперь, что Вы могли сделать вместо этого? Вот несколько идей:
Если Вам не нужны те сценарии в масштабе всей системы для всех пользователей, но только для Вашей собственной учетной записи, просто поместите их в ~/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
ls...
материал в комментарии делает точно это, списки все пакеты, установленные с датой/временем за данный месяц (здесь, май). – ish 1 June 2012 в 10:54ls...
материал в комментарии делает точно это, списки все пакеты, установленные с датой/временем за данный месяц (здесь, май). – ish 1 June 2012 в 10:54ls...
материал в комментарии делает точно это, списки все пакеты, установленные с датой/временем за данный месяц (здесь, май). – ish 1 June 2012 в 10:54ls...
материал в комментарии делает точно это, списки все пакеты, установленные с датой/временем за данный месяц (здесь, май). – ish 1 June 2012 в 10:54ls...
материал в комментарии делает точно это, списки все пакеты, установленные с датой/временем за данный месяц (здесь, май). – ish 1 June 2012 в 10:54ls...
материал в комментарии делает точно это, списки все пакеты, установленные с датой/временем за данный месяц (здесь, май). – ish 1 June 2012 в 10:54