inodeを変更せずにファイルを一貫して(ここで使用されているデータベースシステムの用語で一貫して)編集するための最良の方法は何ですか?通常、一時ファイルに書き込んでから呼び出しますrename(2)
が、これによってinodeが変更されるため、これはオプションではありません。似たようなことを考えましたがmodify_file <file >tmp && cat <tmp >file
、修正が完全に起こったり、まったく起こらなかったり、どちらかです(modify_file
標準入力の内容を修正するプロセスです)。通常のシェルユーティリティを使用してこれは可能ですか?以下はおそらくほとんどの状況(SIGKILL
停電を除く)を扱うと思います。
(
flock -x 9
trap '' INT TERM # (perhaps other signals)
modify_file <file >tmp && cat <tmp >file
) 9>>file
ファイル内の特定のバイトシーケンスのみを変更したいサブケースのためのed
より良いオプションですか?