Linuxのコマンドでの質問です。

http://q.hatena.ne.jp/1272351283 の質問と被りますがcp、mv、installコマンドでは特に指定がなければ上書きされるようですが、
上書き先のモジュールなどが使用中の場合でも上書きされるのでしょうか?
Windowsなどでは使用中のファイルは削除出来なかったりということがありますが、Linuxにおいて上書き先のファイルが使用中である場合の挙動を教えて下さい。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2010/05/25 11:11:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:JULY No.1

回答回数966ベストアンサー獲得回数247

ポイント50pt

上書きされません。

ごとむにっき

上記ページが分かりやすいと思いますが、open というシステムコール(Windows での WinAPI のようなもの)が ETXTBSY というエラーが発生します。

英語環境だと「Text file busy」、日本語だと「テキストファイルがビジー状態です」と言われますが、いわゆる「テキストファイル」でなくても、このメッセージになります。

その理由は...、う~ん、なぜだろう? ネイティブなバイナリプログラムで、メモリにロードされた状態で CPU が実行するコードが入っている部分を UNIX では「Text セグメント」と言うのと関連があるのかもしれません。

id:quocard

なるほど。

そうなると対象ファイルがビジー状態を判断するか、ETXTBSYのチェックを落とさないと書き換えが出来ないわけですね。

ETXTBSYのチェックの落とし方はちょっと検索した程度はわかりませんでした。

PHPでファイルの書き換えを行っているのでこの辺になるとちょっと技量が追いつかないようです。

2010/05/24 17:31:21
id:t-wata No.2

回答回数82ベストアンサー獲得回数13

ポイント50pt

http://q.hatena.ne.jp

基本的には、全部上書き可能だと思ってもらって問題ないです。上書きガードかかかるのは非常に特殊な場合のみです。

JULYさんの言う上書き制限は、実行中の実行ファイル(シェルスクリプトの場合、sebangに指定された実行ファイル)のみです。

つまり、デフォルトの状態なら、/usr/binとか/bin以下にあるもの以外は上書きできる、ってことです。

また、この場合できないのは、ファイルを開いて別の内容に書き換える、という方法で、

ファイルの削除(unlink)やリネームに関しては実行中でも問題なくできます。

つまり、mvのように削除して同名ファイルを作るという方法なら、いつでも上書きできます。

id:quocard

ありがとうございます。

こちらで作成したtest.cやtest.phpに対して行うのでガードはかかってなさそうですね。

sebangでの指定がどこでおこなわれているのかはちょっと検索しきれませんでしたが、そういったことでしたら大丈夫そうです。

2010/05/25 09:10:49
  • id:t-wata
    すみません、sebangはshebangの間違いです。
    スクリプトなどの先頭に書かれる #!/bin/sh などのことです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません