O Vim escreve no arquivo sem ter permissões [duplicado]

0
$ ls sess.vim -lh              
-rw-r--r-- 1 root root 11K Feb 26 18:52 sess.vim

Eu quero que este arquivo seja legível para todos e gravável por ninguém (exceto pelo root). Assim, defino suas permissões para 644 e posse para root:root .

$ echo "text" >> sess.vim      
zsh: permission denied: sess.vim

Parece bem. Depois de algumas mudanças no vim eu faço :w! (force write) e o arquivo é salvo com sucesso. Agora:

$ ls sess.vim -lh
-rw-r--r-- 1 MY_USERNAME users 11K Feb 26 19:06 sess.vim

Wt .. Por quê? Como?

    
por Al.G. 26.02.2016 / 17:59

2 respostas

6

Usar :w! no vim é semelhante ao seguinte:

echo 'test' > sess.vim.temp
mv sess.vim.temp sess.vim

Os comandos mv só se preocupam com as permissões do diretório, as permissões do arquivo não são relevantes. Isto é porque você está modificando o diretório, não escrevendo para o arquivo. Para atingir seu objetivo, você também precisará ajustar as permissões do diretório em que o arquivo reside.

    
por 26.02.2016 / 18:14
1

Isso está funcionando porque a propriedade do usuário e do grupo do diretório pai é seu nome de usuário: seu-nome-do-grupo

Se um usuário for o proprietário de um diretório e tiver permissão de gravação para esse diretório, ele poderá remover qualquer arquivo contido nele (independentemente das permissões do arquivo). Eu suspeito que o vim desvincula (remove) o arquivo que ele edita e grava um novo arquivo com o mesmo nome de arquivo quando: wq! é dado.

    
por 26.02.2016 / 18:16