파일을 새 버전으로 바꾸는 두 가지 전략이 있습니다.
새 버전으로 임시 파일을 만든 다음 제자리로 이동하십시오.
- 장점 : 프로그램이 해당 파일을 열면 이동 전후에 파일을 열 었는지 여부에 따라 이전 내용 또는 새 내용을 읽습니다. 믹스 업이 없습니다.
- 장점 : 충돌이 발생하면 이전 내용이 유지됩니다.
- 단점 : 새 파일이 만들어 지므로 파일 속성 (소유권, 권한 등)이 유지되지 않습니다.
기존 파일을 덮어 씁니다.
- 장점 : 파일의 속성이 유지됩니다.
- 단점 : 충돌이 발생하면 파일을 절반 만 쓸 수 있습니다.
- 단점 : 프로그램을 업데이트 할 때 파일이 열려 있으면이 프로그램은 일치하지 않는 데이터를 읽을 수 있습니다.
가능하면 방법 1을 사용하지만 먼저 원본 파일의 속성을로 복제하십시오 cp -p --attributes-only
. 여기에는 GNU coreutils (즉, 비 임베디드 Linux 또는 충분히 Linux와 유사한 환경)가 필요합니다. 당신의 경우 cp
가없는 --attributes-only
,이 옵션을 생략 : 그것은 작동 것이다 그러나 그것은뿐만 아니라 데이터를 복제 할 수 있습니다.
tmp=$(mktemp)
cp -p --attributes-only "$original" "$tmp"
modifyfile "$original" "$tmp"
mv -f "$tmp" "$original"
기존 파일의 속성을 복제 할 수없는 경우 (예 : 파일에 대한 쓰기 권한이 있지만 소유하지 않고 소유자를 보존하려는 경우) 방법 2 만 가능합니다. 데이터 손실 위험을 최소화하려면
- 파일이 불완전한 창을 가능한 작게 만드십시오. 임시 파일에서 먼저 데이터를 준비한 다음 제자리에 복사하십시오.
- 이전 파일을 먼저 백업하십시오.
tmp=$(mktemp)
backup="${original}~"
modifyfile "$original" "$tmp"
cp -p "$original" "$backup"
cp -f "$tmp" "$original"