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命令在覆盖 file 之前提示用户2

是我的版本有问题mv,还是我的理解有问题?如果是后者,那又怎样说明书是什么意思?

答案1

事实证明,服务器正在使用“cifs”类型的文件系统(大概是通用互联网文件系统,又名 CIFS)。这是通过运行命令发现的df -T

CIFS 显然在权限方面表现出非常规行为。

在具有 ext4 文件系统和最新版本 Coreutils 的计算机上运行相同的命令会产生:

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

正如预期的那样。

相关内容