実行中のシェルをrmしたりcpで上書きするとどうなる?

運用スクリプトを修正してリリースする際に、そのシェルスクリプトが常駐監視スクリプトだったりする場合は、普通はいったん停止して、置き換えて、再実行と考えると思うが、スクリプトを停止せずにcpで上書きしたり、いったんrmしたらどうなるの?とふと疑問に思ったので調べてみました。
 
・rmしたらどうなるか
rmしてもシェルスクリプトは停止することはなく、実行プロセスが消えるとファイルの実体も消される。
 
・cpで上書きしたらどうなるか
ただちにファイルの実体が上書きされるため、シェルスクリプトがおかしな挙動をすることがある。
 
個人的にこちらのページの説明が非常にしっくりきた。

これは, ファイルが「ディレクトリエントリ→iノード番号→ファイルの実体」のように管理されており, またオープンしているファイルを iノード番号で管理しているためで,
・cp ではファイルの実体を上書きする
・rm ではディレクトリエントリを削除する (iノードへの参照がなくなればファイルの実体を削除する)
・mv ではディレクトリエントリに記録されているファイル名を変更する (「iノード番号→ファイルの実体」の部分にはタッチしない)

参照:https://oshiete.goo.ne.jp/qa/1530970.html 

スポンサーリンク
勉強wikiの下部広告
  • このエントリーをはてなブックマークに追加
スポンサーリンク
勉強wikiの下部広告

コメントをどうぞ

メールアドレスが公開されることはありません。

CAPTCHA