El manual de GNU Coreutils para mv
dice:
Si existe un archivo de destino pero normalmente no se puede escribir, la entrada estándar
es un terminal, y no se proporciona la opción -f o –force, mv
pregunta al usuario si debe reemplazar el archivo. (Es posible que sea el propietario del archivo
o que tenga permiso de escritura en su directorio). Si la respuesta
no es afirmativa, el archivo se omite.
Sin embargo, la versión de mv
Estoy usando (GNU coreutils 8.21 en Ubuntu 14.04.3 LTS) presenta un comportamiento inesperado:
$ 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
Según el extracto del manual citado anteriormente, habría esperado el mv 1 2
Comando para haber avisado al usuario antes de sobrescribir el archivo 2
.
¿Hay algún error en mi versión de mv
? , o un error en mi comprensión? Si es lo último, entonces qué hace el manual significa?
Respuesta aceptada:
Resulta que el servidor estaba usando un sistema de archivos de tipo "cifs" (presumiblemente el Sistema de archivos de Internet común, también conocido como CIFS). Esto se descubrió ejecutando el comando df -T
.
Aparentemente, CIFS exhibe un comportamiento poco convencional con respecto a los permisos.
Ejecutar los mismos comandos en una máquina con un sistema de archivos ext4 y una versión reciente de Coreutils produjo:
$ mv 1 2
mv: replace ‘2’, overriding mode 0444 (r--r--r--)?
como se esperaba.