Как установить строку и столбец в сценарии оболочки

Это зависит от обстоятельств.

Создание ссылки выполняется быстрее, чем копирование данных, но результирующий файл будет иметь то же содержимое, что и исходный, и любые изменения будут отображаться в обоих. Если это преимущество или нет, зависит от того, почему была сделана ссылка / копия. Кроме того, жесткие ссылки работают только в одной файловой системе, поэтому, если / var или / var / tmp монтируются отдельно от исходного каталога, связывание не будет работать.


Но мне интересно, каков здесь вариант использования. Если цель сценария - скопировать файл с именем $ 1 , зачем делать копию в $ TRANSFER_FILE вместо того, чтобы просто запускать scp непосредственно в исходном файле ? Создание локальной копии в первую очередь необходимо только в том случае, если есть основания предполагать, что исходный файл может быть изменен во время копирования, и файл не должен копироваться в несогласованном состоянии. Но у этого подхода есть некоторые проблемы:

1) создание локальной копии с помощью cp имеет ту же проблему: источник также может быть изменен во время локальной копии. 2) связывание с ln будет мгновенным, но поскольку жесткая ссылка указывает на те же данные, что и исходный, любой процесс, открывший файл до того, как ссылка была сделана, все еще может продолжить изменение данных.

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

2
08.02.2017, 22:37
0 ответов

Теги

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