Что конкретно делает cp -b (–backup)?

Вопрос или проблема

Прежде чем вы скажете мне об очевидном, я знаю, опция резервного копирования создает резервную копию файла.

Но дело в том, что команда cp в общем виде создает резервную копию файла. Можно сказать, что копия файла является резервной копией.

Таким образом, мой вопрос таков: что делает опция -b, чего команда cp не делает уже?

Страница man cp(1) дает следующее описание опции --backup:

создает резервную копию каждого существующего файла назначения

Это определение не очень полезно, по сути, оно говорит “опция резервного копирования делает резервную копию”. Это не дает никаких указаний на то, что -b добавляет к cp

Я знаю, что -b добавляет суффикс в конец имени нового файла. Но делает ли оно что-то еще? Или на этом все? Является ли резервная копия -b просто командой cp, которая добавляет что-то в конец имени файла?

P.S. Обычно вы используете -b при создании резервных копий в вашей повседневной работе? Или вы просто используете -a?

Она создает резервную копию каждого файла назначения, который уже существует. Тех, которые иначе были бы перезаписаны и потеряны.

$ mkdir foo; cd foo
$ echo hello > hello.txt
$ echo world > world.txt
$ cp -b hello.txt world.txt
$ ls
hello.txt  world.txt~  world.txt
$ cat world.txt
hello
$ cat world.txt~
world

Этот файл world.txt~ является созданной резервной копией. Если вы внимательно посмотрите, вы увидите, что резервная копия — это фактически исходный файл, просто переименованный. (т.е. номер inode остается тем же, и такие параметры, как права доступа к файлу, тоже остаются прежними.)

Из той же (GNU coreutils) страницы man cp:

       --backup[=CONTROL]
              создает резервную копию каждого существующего файла назначения

Таким образом, естественно, мы ищем определение CONTROL в этом документе:

       Суффикс резервной копии — '~', если он не установлен с помощью --suffix или SIMPLE_BACKUP_SUFFIX.  Метод управления версиями может быть выбран через параметр --backup или переменную окружения VERSION_CONTROL.  Вот возможные значения:

       none, off
              никогда не создавать резервные копии (даже если указан --backup)

       numbered, t
              создавать нумерованные резервные копии

       existing, nil
              нумерованные, если существует нумерованная резервная копия, в противном случае простые

       simple, never
              всегда создавать простые резервные копии

Но делает ли оно что-то еще?

нет.

P.S. Обычно вы используете -b при создании резервных копий в вашей повседневной работе? Или вы просто используете -a?

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

Для резервного копирования все зависит от контекста, но для личных/малых файловых систем снимки файловой системы (либо с помощью ZFS, либо с использованием тонкого уровня LVM внизу) работают очень хорошо. Для резервного копирования за пределами устройства в основном используется rsync для полных резервных копий. Для случаев, когда требуется инкрементальное резервное копирование вне диска, duplicity вполне подойдет.

.

Ответ или решение

Опция командной строки -b (–backup) в утилите cp предоставляет возможность создания резервной копии существующих файлов назначения до их перезаписи. Хотя на первый взгляд может показаться, что выполнение команды cp само по себе является способом создания резервной копии, различия между простым копированием и использованием этой специальной опции заключаются в деталях реализации и намерениях пользователя, что мы и рассмотрим более подробно.

Теория: Назначение и варианты использования --backup

Команда cp, как известно, используется для копирования файлов и директорий из одного места в другое. Однако, когда копируемый файл совпадает с уже существующим файлом в целевом каталоге, без специальных параметров cp просто перезаписывает существующий файл. Опция -b изменяет это поведение: она сохраняет оригинальную версию файла прежде, чем она будет перезаписана, и делает это путем создания резервной копии.

--backup использует различные шаблоны резервного копирования в зависимости от установленных настроек. Управление этими поведениями осуществляется через дополнительный параметр CONTROL, который может принимать разные значения:

  • none или off: резервные копии не создаются, даже если указана опция --backup.
  • numbered или t: создаются пронумерованные резервные копии.
  • existing или nil: создаются пронумерованные резервные копии, только если уже существуют такие файлы; в противном случае создаются простые резервные копии.
  • simple или never: создается простая резервная копия, которая обычно имеет суффикс ~.

Пример использования: Демонстрация и визуализация

Рассмотрим следующую демонстрацию, которая поясняет работу -b:

$ mkdir demo; cd demo
$ echo "старое содержимое" > file.txt
$ echo "новое содержимое" > новый_файл.txt
$ cp -b новый_файл.txt file.txt
$ ls
file.txt  file.txt~  новый_файл.txt
$ cat file.txt
новое содержимое
$ cat file.txt~
старое содержимое

В этом примере файлы с одноименными именами уже существовали в целевом каталоге. Использование команды cp -b привело к созданию резервной копии файла file.txt, сохранив его оригинальное содержимое в файле file.txt~, прежде чем его содержимое было заменено новый_файл.txt.

Применение: Практическое использование

Основная цель -b заключается в предотвращении потери данных в процессе выполнения операций копирования. Это наиболее полезно в сценариях, где безопасность данных имеет критическую значимость, и пользователю необходимо сохранить оригинальные версии файлов для последующего восстанавления или проверки.

Однако в рамках ежедневной работы ИТ-специалистов или администраторов систем эта опция может не обладать высоким приоритетом для полноценного резервного копирования. Например, для более эффективных и масштабируемых решений резервного копирования обычно используются технологии, такие как файловые моментальные снимки или специализированные утилиты (например, rsync для синхронизации данных и duplicity для инкрементальных резервных копий). Эти инструменты позволяют не только сохранить резервные копии, но и обеспечить их учет и организацию на уровне системы и в сети.

Таким образом, -b в основном служит для временного и быстрого предотвращения утраты данных в определенных случаях и не является заменой для полноценных решений для резервного копирования.

Оцените материал
Добавить комментарий

Капча загружается...