Existe alguma diferença entre o valor do modo 0777 e 777

51

Vi um código mudar no trabalho, onde os valores de modo foram alterados de 777 para 0777 para fazer o nfs setattr funcionar. Qual é a diferença nos 2 valores?

user1071840
fonte
Me deparei com o mesmo problema enquanto usava funções relacionadas ao php FS embutidas, como mkdir(). 0777 vs 777
Niket Pathak

Respostas:

76

Se você estiver passando para chmod(o programa de linha de comando), não há diferença. Mas em um programa C ou similar, 0777é octal (três conjuntos de três bits 1, o que você pretende), enquanto 777é decimal e é um padrão de bits bem diferente. ( chmodinterpretará qualquer argumento numérico como octal, portanto, nenhum zero inicial é necessário.)

0777 (octal) == binário 0b 111 111 111    == permissões rwxrwxrwx   (== decimal 511)

777 (decimal) == binário 0b 1 100 001 001== permissões sr----x--x(== octal 1411)

alexis
fonte
14
Só para ficar claro - o valor que você passa para o chmodcomando é sempre interpretado como octal. Usar chmod 888dará um erro.
mattdm
mas cada dígito é octal, não o número inteiro em si.
Drake Clarris 02/12/2013
11
Uma sequência de dígitos octais é um número octal. chmodinterpreta um argumento numérico como octal, independentemente do prefixo. (Mas realmente o número em si não tem função; apenas os dígitos, ou melhor, os bits.)
alexis
Então, em um programa C, se você deseja passar 1777, precisa escrever 01777?
Faheem Mitha
11
@ Faheem, está certo. Octal 1777é escrito 01777em C. (Ou você poderia escrever 1023, que é o mesmo número em decimal Mas não :-).
alexis
4

O primeiro bit é usado para o sticky bit http://en.wikipedia.org/wiki/Sticky_bit

Se você definir a permissão usando 4 dígitos, o primeiro definirá ou removerá este bit.

alfredocambera
fonte
3
O bit pegajoso não é o primeiro, mas o terceiro. O primeiro é o bit suid e o segundo o sgid. Se você definir permissões usando três dígitos, o primeiro dígito ausente também afetará (por exemplo, remover) esses três bits.
Jlliagre,
Você está certo. Ergo, a "resposta fornecida pelo alexis é torcer.
alfredocambera
2
@jlliagre Na página de manual do chmod - "Dígitos omitidos são assumidos como zeros à esquerda". Além disso, o primeiro dígito de 4 é o bit adesivo. Na página do manual novamente: "O primeiro dígito seleciona o ID do usuário definido (4) e o ID do grupo (2) e os atributos de exclusão ou exclusão restrita (1). O segundo dígito seleciona permissões para o usuário que possui o arquivo: read ( 4), escreva (2) e execute (1); o terceiro seleciona permissões para outros usuários no grupo do arquivo, com os mesmos valores; e o quarto, para outros usuários não pertencentes ao grupo do arquivo, com os mesmos valores. ".
Faheem Mitha
11
@FaheemMitha, os dígitos omitidos são assumidos como zeros à esquerda e, portanto , removerão os bits mencionados acima. Além disso, você parece confundir bits e dígitos, eu estava comentando sobre o primeiro bit, não o primeiro dígito.
Jlliagre
11
@ jlliagre Ok, é justo.
Faheem Mitha
1

A resposta interessante é:

  • não há diferença entre 0700e 700, como explicado nas outras respostas
  • mas não é uma diferença entre 00700e 0700(para diretórios)

Pelo menos é o caso da versão chmod do GNU coreutils, que é o padrão no Linux.

Veja este exemplo:

$ ls -ld mydir
drws--s--- 4 myuser mygroup 4096 Jul  8 09:27 mydir
$ chmod 0710 mydir ; ls -ld mydir                   # surprise ahead -- s-bits remain:
drws--s--- 4 myuser mygroup 4096 Jul  8 09:27 mydir
$ chmod 00710 mydir ; ls -ld mydir                  # _now_ they're gone:
drwx--x--- 4 myuser mygroup 4096 Jul  8 09:27 mydir

Isso evita a exclusão acidental de bits setuid / setgid para diretórios. Para detalhes, consulte a documentação chmod .

Alex O
fonte
-1

No sistema Linux, existem dois tipos de permissões disponíveis:

  1. Permissão de arquivo
  2. Permissão especial

Na permissão de arquivo, definimos a permissão em arquivos e pastas:

As permissões são:

  • ler (4)
  • gravação (2)
  • executar (1)

Enquanto em permissão especial, três tipos de permissão são:

  • SUID (4)
  • SGID (2)
  • Bit pegajoso (1)

Na sua pergunta, você pergunta o que é a diferença; portanto, não há diferença entre, chmod 777 and 0777porque existe o no any octal valuevalor de exibição de (0) zero.

Purushottam Dike
fonte