'chmod -644' definiria a permissão de arquivo para 000

12

Eu tinha um arquivo com 644 ( -rw-r--r--) e queria alterá-lo para 664 ( -rw-rw-r--), depois de executar:

sudo chmod -664 my_file

as permissões de arquivo foram definidas como 000 ( ----------).

Tentar alterar as permissões para algo diferente de 000 parece não estar funcionando. O que estou perdendo aqui?

illgoforit
fonte
11
Por que você tem um -na frente de 644? Tente sudo chmod 644 my_file. -644irá remover os direitos.
Soren A

Respostas:

34

Você está usando -664, basta usar 664. E nunca use sudoquando você não precisar. Se esse é o seu arquivo, você não precisa de sudo:

chmod 644 my_file

Quando você executa chmodcom um -antes do modo, você o remove. Veja man chmod(grifo meu):

O operador + faz com que os bits do modo de arquivo selecionado sejam adicionados aos bits do modo de arquivo existente de cada arquivo; - faz com que sejam removidos ; e = faz com que eles sejam adicionados e faz com que os bits não mencionados sejam removidos, exceto que os bits de ID de grupo e usuário não mencionados de um diretório não são afetados.

Os números são:

  • 1: executar
  • 2: escrever
  • 4: ler

Portanto, um arquivo com 777permissões significa que todos têm o direito de executar os três, desde 1 + 2 + 4 = 7, e, portanto, definir as permissões para 7 significa permitir leitura, gravação e execução.

Se você começar com um arquivo cujo modo é 777:

$ ls -l my_file 
-rwxrwxrwx 1 terdon terdon 0 May 28 13:45 my_file

E agora execute chmod -644, você removerá os bits 644e terminará com um arquivo cujo modo é 133:

$ chmod -644 my_file; ls -l my_file 
---x-wx-wx 1 terdon terdon 0 May 28 13:45 my_file

Isso porque você removeu 6 (leitura (4) + gravação (2)) das permissões do proprietário, deixando apenas 1 (execução) definido e 4 (leitura) do grupo e outras permissões. O resultado é um arquivo com apenas permissões execute (1) para o proprietário e grava e executa (você desativa 4, deixando 1 e 3) permissões para o restante.

Como seu arquivo provavelmente tinha as permissões padrão para novos arquivos, então 644, quando você executou chmod -644 my_file, removeu todos os bits de permissão definidos e obteve um arquivo sem permissões para ninguém.

$ ls -l my_file 
-rw-r--r-- 1 terdon terdon 0 May 28 13:45 my_file
$ chmod -644 my_file
$ ls -l my_file 
---------- 1 terdon terdon 0 May 28 13:45 my_file
Terdon
fonte