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

Как всегда, грузовик python задерживается, но:

делает его исполняемым, перетаскивая его через окно терминала, перетаскивая файл для копирования через окно терминала и устанавливая количество копий:

script file number_ofcopies

Число начальных нулей устанавливается автоматически, файлы называются file_001.pdf, file_002.pdf, а имена файлов помещены перед расширением.

Сценарий: [!d4 ]

#!/usr/bin/env python3

import sys
import shutil

orig = sys.argv[1]; n = sys.argv[2]; size = len(str(n)); out = (orig[:orig.rfind(".")], orig[orig.rfind("."):])
for item in [out[0]+"_"+(size-len(str(item)))*"0"+str(item)+out[1] for item in range(1, int(n)+1)]:
    shutil.copyfile(orig, item)
1
задан 4 January 2018 в 15:54

3 ответа

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

«Создано»:

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

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

«Создано»:

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

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

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

Каталог 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
ответ дан 22 May 2018 в 15:46
  • 1
    Это просто великолепно. Приветствую, командир! – j doe will do just fine 4 January 2018 в 16:07
  • 2
    @jdoewilldojustfine Ницца. Если этот ответ решает вашу проблему, вы можете подумать о том, чтобы принять его, щелкнув по кнопке «Серый круглый» справа. Спасибо и добро пожаловать в Ask Ubuntu. – Byte Commander 4 January 2018 в 19:47

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

«Создано»:

Стандартные атрибуты файла 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
ответ дан 17 July 2018 в 23:55

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

«Создано»:

Стандартные атрибуты файла 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
ответ дан 24 July 2018 в 17:07

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

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