Como você fez três perguntas separadas, responderei separadamente.
Sua primeira pergunta:
Is this GNU only?
Não tenho certeza se é apenas GNU . Parece ser uma característica do rm
do GNU Coreutils que também é encontrada em pelo menos alguma outra documentação rm
. Por exemplo, de acordo com algumas documentação antiga no opengroup.org para POSIX rm
:
- If file is not of type directory, the -f option is not specified, and either the permissions of file do not permit writing and the standard input is a terminal or the -i option is specified, rm shall write a prompt to the standard error and read a line from the standard input. If the response is not affirmative, rm shall do nothing more with the current file and go on to any remaining files.
Soa familiar? Ele está muito próximo da documentação do GNU rm
que você mencionou na sua pergunta.
Sua segunda pergunta:
When using rm as root this does not happen on my system. Is this normal behavior? I can't find it documented anywhere.
Se você quer dizer que executar rm
sem flags como root não avisa ao tentar remover um "unwritable file", então sim, este é um comportamento normal para o GNU Coreutils 8.23 (e provavelmente quase todas as outras versões do GNU Coreutils). Não parece haver nenhuma documentação para isso, mas se você entrar em a fonte para rm
(você precisa alternar entre vários arquivos para juntar tudo), isso mostra que executar rm somefile
de um terminal como usuário root removerá somefile
sem um prompt, mesmo que seja protegido contra gravação .
Sua terceira pergunta:
What's the rationale for this behavior? It only increases the confusion of users, who tend to think that you need to have write permissions for a file to delete it. It makes them think that rm chmods the file. But rm can also delete the file if one isn't the owner.
Se você quer dizer por que um usuário pode excluir um arquivo protegido contra gravação que não possui, esse comportamento tem menos a ver com rm
e mais a ver com permissões do sistema de arquivos. Veja linuxdevcenter.com , cyberciti.biz , e Wikipedia , que afirmam coletivamente (mais ou menos):
Usually, on most filesystems, deleting a file requires write permission on the parent directory (and execute permission, in order to enter the directory in the first place), but you need not have permission on the file itself. Note that, confusingly for beginners, permissions on the file itself are irrelevant. However, GNU rm asks for confirmation if a write-protected file is to be deleted, unless the -f option is used.
A ênfase ousada é minha. É assim que o Linux e outros SOs parecidos com Unix lidam com exclusões de arquivos com base em permissões de arquivos.