mvはメッセージを表示せずに読み取り専用ファイルを上書きします。

mvはメッセージを表示せずに読み取り専用ファイルを上書きします。

これGNU Coreutils マニュアルmv説明する:

宛先ファイルが存在するが、通常は書き込めず、標準入力が端末であり、-f または --force オプションが指定されていない場合、mv はユーザーにファイルを置き換えるかどうかを尋ねます。 (ファイルを所有しているか、そのディレクトリへの書き込み権限がある可能性があります。)応答が肯定的でない場合は、ファイルをスキップしてください。

しかし、私が使用しているバージョンmv(Ubuntu 14.04.3 LTSのGNU coreutils 8.21)では、予期しない動作が発生します。

$ which mv
/bin/mv
$ ls -l
total 0
$ echo foo > 1; chmod -w 1; cp 1 2; ls -l | cut -d' ' -f 1-5,9
-r-x------ 1 me me 4 1
-r-x------ 1 me me 4 2
$ echo bar > 2
-bash: 2: Permission denied
$ mv 1 2
$ ls -l | cut -d' ' -f 1-5,9
-r-x------ 1 me me 4 2

mv 1 2上記のマニュアルの抜粋に基づいてファイルを上書きする前にユーザーにメッセージを表示するコマンドが必要です2

mv私のバージョンや理解に問題がありますか?後者ならどうしますかするマニュアルとはどういう意味ですか?

答え1

サーバーが「cifs」タイプのファイルシステムを使用していることがわかりました(おそらく共通インターネットファイルシステム、別名CIFS)。これはコマンドの実行によって検出されましたdf -T

CIFS は明らかに権限に関して一様な行動を示す。

ext4ファイルシステムと最新バージョンのCoreutilsがあるシステムで同じコマンドを実行すると、次のようになります。

$ mv 1 2
mv: replace ‘2’, overriding mode 0444 (r--r--r--)?

予想通り。

関連情報