mv sobrescreve o arquivo somente leitura sem avisar

4

O manual do GNU Coreutils para mv diz:

If a destination file exists but is normally unwritable, standard input is a terminal, and the -f or --force option is not given, mv prompts the user for whether to replace the file. (You might own the file, or have write permission on its directory.) If the response is not affirmative, the file is skipped.

No entanto, a versão do mv que estou usando (GNU coreutils 8.21 no Ubuntu 14.04.3 LTS) exibe um comportamento 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

Com base no trecho do manual citado acima, eu esperava que o comando mv 1 2 tivesse solicitado ao usuário antes de sobrescrever o arquivo 2 .

Existe um bug na minha versão do mv ou um bug no meu entendimento? Se o último, então o que faz o manual significa?

    
por sampablokuper 19.10.2015 / 12:15

1 resposta

5

Acontece que o servidor estava usando um sistema de arquivos do tipo "cifs" (presumivelmente o Common Internet File Sistema, também conhecido como CIFS . Isso foi descoberto executando o comando df -T .

O CIFS aparentemente exibe um comportamento não convencional em relação às permissões.

Executando os mesmos comandos em uma máquina com um sistema de arquivos ext4 e uma versão recente do Coreutils resultou em:

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

como esperado.

    
por 19.10.2015 / 13:39