GNU/Linux >> Linux の 問題 >  >> Linux

移動の許可が拒否された場合、Mv(1)がオブジェクトをコピーするのはなぜですか?

mvを実行します cp(1)として機能します プロセスの移動許可が拒否された場合

もしそうなら、それはルールに反しているのではありませんか?

承認された回答:

簡単に言えば、そうではないということです。

mv 定義:

rename()と同等のアクションを実行します 関数

rename() コンテンツをコピーするのではなく、ディスク上で名前を変更するだけです。これは完全に不可分な操作であり、部分的に失敗することはありません。

ただし、それだけでは全体像はわかりません。この効果ができる デバイス間でファイルを移動しようとしたときに発生します。その場合、ファイルシステムで名前の変更を行うことはできません。移動の効果を得るには、mv 最初にソースを宛先にコピーしてから、ソースを削除します。実際には、mv /mnt/a/X /mnt/b/Y 基本的にcp /mnt/a/X /mnt/b/Y && rm /mnt/a/Xと同等です 。これが、デバイス間でファイルを移動する唯一の方法です。

mvの場合 そのソースファイルを削除する権限がない場合、エラーが報告されますが、その時点でコピーはすでに行われています。操作中に権限が変更される可能性のある競合状態のため、事前に権限を確認してそれを回避することはできません。

デバイス間でファイルを移動できなくなる以外に、このような事態を防ぐ方法はありません。 mvを許可する選択 送信元と宛先の間では、一般的なケースでは物事が簡単になりますが、これらの異常なケースでは奇妙な(ただし非破壊的な)動作が犠牲になります。

これは、単一のデバイス内で大きなファイルを移動する方が、別のデバイスに移動するよりもはるかに高速である理由でもあります。


Linux
  1. ルートユーザーがSudo権限を必要とするのはなぜですか?

  2. [a-z]がBashの小文字と一致するのはなぜですか?

  3. sudoがエイリアスを無視するのはなぜですか?

  1. catalina.out に大量の (許可が拒否されました)

  2. docker.sock 許可が拒否されました

  3. 実行権限は何をしますか?

  1. ssh-add の実行時に Permission Denied が表示されるのはなぜですか?

  2. authorized_key ファイルで許可が拒否されました

  3. rsync が Linux で /sys からファイルをコピーできないのはなぜですか?