Qual é a diferença entre "chmod + x" e "chmod 755"?

62

Quando se trata de fazer um arquivo executável que é a diferença entre chmod 755e chmod +xe quando que eu iria usar o que? Até agora, apenas usei chmod +xe acabei de ler algo e ele usou chmod 755e não sabia dizer se era melhor usar chmod 755ou chmod +x.

Darth4212
fonte
9
chmod +xdefine todos os sinalizadores executáveis ​​sem alterar outras permissões. chmod 755define rwxr-xr-x
ravery
5
@ravery: Olá! Você encontrou a seção de comentários, que é uma área dedicada a criticar e solicitar esclarecimentos. Para fornecer uma resposta / solução, você deve usar a seção "resposta" abaixo (procure o botão vermelho "Publique sua resposta"). Espero que ajude!
Lightness Races com Monica

Respostas:

145

Versão curta:

Para poder compará-los, devemos analisá-los da mesma perspectiva, portanto:

  • chmod +xé igual a chmod ugo+x(com base no umaskvalor)
  • chmod 755 é igual a chmod u=rwx,go=rx

Explicação:

Em primeiro lugar você deve saber que:

  1. + significa adicionar essa permissão às outras permissões que o arquivo já possui.
  2. = significa ignorar todas as permissões, defini-las exatamente como eu forneço.

    • Portanto, todos os "ler, escrever, executar, sticky bit, suid e guid" serão ignorados e somente os fornecidos serão definidos.
  3. read = 4, write = 2, execute = 1

    • Aqui está a lógica binária por trás disso (se você estiver interessado):

      Symbolic:  r-- -w- --x  |  421
      Binary:    100 010 001  |  -------
      Decimal:    4   2   1   |  000 = 0
                              |  001 = 1
      Symbolic:  rwx r-x r-x  |  010 = 2
      Binary:    111 101 101  |  011 = 3
      Decimal:    7   5   5   |  100 = 4
                 /   /   /    |  101 = 5
      Owner  ---/   /   /     |  110 = 6
      Group  ------/   /      |  111 = 7
      Others ---------/       |  Binary to Octal chart
      

Usando +xvocê está dizendo para adicionar ( +) o bit executável ( x) ao proprietário, grupo e outros.

  • é igual a ugo+xouu+x,g+x,o+x
  • Quando você não especifica qual proprietário, grupo ou outros é o seu destino, no caso de xele considerar todos eles. E como o @Rinzwind apontou, é baseado em umaskvalor, adiciona o bit ao umaskpermitido. lembre-se se você especificar o alvo como o+rentão umasknão terá mais nenhum efeito.
  • Não toca nos outros mods (permissões).
  • Você também pode usar u+xpara adicionar apenas bits executáveis ​​ao proprietário.

Usando 755você está especificando:

  • 7 -> u=rwx(4 + 2 + 1 para o proprietário)
  • 5 -> g=rx(4 + 1 para o grupo)
  • 5 -> o=rx(4 + 1 para outros)

Assim chmod 755é como: chmod u=rwx,g=rx,o=rxou chmod u=rwx,go=rx.

insira a descrição da imagem aqui

Ravexina
fonte
15
uma adição muito importante: ao usar, chmod 755você define esses bits E também limpa todos os bits suid / sgid / sticky (que podem estar lá) (por exemplo: NUNCA chmod 755 /tmp). 755 deve ser sempre pensado como 0755, ou seja, o primeiro conjunto octal de bits também é definido como 0.
Olivier Dulac
11
quase perfeita para que um prematura +1 (yay você tem que distintivo de mim:)): Você se esqueceu de umask;)
Rinzwind
@OlivierDulac Obrigado, eu não quero entrar em muitos detalhes, mas eu vou atualizei a resposta ...
Ravexina
11
Acho que acabei de entender como as permissões funcionam, obrigado!
Fabich 08/07
37

chmod +x adiciona a permissão de execução para todos os usuários às permissões existentes.

chmod 755define a 755permissão para um arquivo.

755 significa permissões totais para o proprietário e permissão de leitura e execução para outras pessoas.

Pilot6
fonte
7

Outra maneira de ver isso (que acho mais fácil de entender) chmod +xé definir as permissões relativamente , enquanto as chmod 755define absolutamente .

Após a chmod 755execução em um arquivo, suas permissões serão 755 ou rwxr-xr-x.

chmod +xapenas aceita as permissões existentes e adiciona permissões de execução ao arquivo.

Baptiste Candellier
fonte
6

Eu recomendo revisar a página de manual do chmod para obter detalhes completos. Você está apenas vendo dois modos de operação diferentes disponíveis com o comando chmod para realizar a mesma tarefa de alterar permissões.

O modo octal está usando números e define todas as permissões do arquivo. O modo de caractere está usando as letras e geralmente é usado apenas para modificar as permissões existentes.

chmod 755define rwxr-xr-xenquanto chmod +xajusta permissões para que proprietário, grupo e mundo tenham permissões executáveis ​​adicionadas. Assumir uma permissão de arquivo padrão rwxr--r--ajustaria-a às mesmas permissões que 755 de rwxr-xr-x.

Cartola
fonte
5

A diferença é que permissões são definidas e qual modo você usa para defini-las.

Com chmod +xvocê define o bit executável para todos - o proprietário, o grupo de proprietários e os outros usuários. Isso é conhecido como modo simbólico. Para citar man chmod:

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.

Com chmod 755o uso de números octais, cuja representação binária é usada para definir bits específicos de permissões. Os primeiros 3 bits (à esquerda) correspondem às permissões do proprietário, os 3 do meio às permissões do grupo e os últimos (à direita) correspondem às permissões de todos os outros usuários. A ordem dos bits é sempre a mesma read,write,executeou , rwxportanto, exatamente porque a ordem é a mesma, o número individual, quando convertido em representação binária, definirá os bits de permissão para os quais o bit posicional correspondente no número é 1 e desmarca o que é 0 Especificamente:

  • O número octal 7é 111 no binário, então você está configurando todos os bits de leitura, gravação e execução para o proprietário; rwxestá definido.
  • O número octal 5é 101 no binário, então você está configurando a leitura e a execução, mas desativa os bits de gravação, e como é 5 para o grupo e outros usuários, essas duas categorias terão as mesmas permissões. Assim r-xestá definido.

Aqui está a pequena demonstração:

    bash-4.3$ touch file1 file2
    bash-4.3$ chmod +x file1
    bash-4.3$ chmod 755 file2
    bash-4.3$ ls -l file1 file2
    -rwxrwxr-x 1 xieerqi xieerqi 0 7月   6 13:54 file1
    -rwxr-xr-x 1 xieerqi xieerqi 0 7月   6 13:54 file2
Sergiy Kolodyazhnyy
fonte
3

Uma diferença importante é que o chmod + está sujeito a restrições umask e o chmod <octal> não.

Considere o seguinte exemplo:

$ ls -l foo bar
---------- 1 gowenfawr users 0 Jul  7 16:40 bar
---------- 1 gowenfawr users 0 Jul  7 16:39 foo
$ umask
0022
$ chmod +w bar
$ umask 0002
$ chmod +w foo
$ ls -l foo bar
--w------- 1 gowenfawr users 0 Jul  7 16:40 bar
--w--w---- 1 gowenfawr users 0 Jul  7 16:39 foo
$

Portanto, se você quiser fazer uma alteração delta nas permissões de maneira apropriada às suas configurações umask, use a sintaxe '+'. Mas se você deseja defini-lo absolutamente sem considerar o umask, use o formato <octal> e saiba que é necessário especificar todos os bits e não apenas um delta.

gowenfawr
fonte
1

Além dessas respostas bonitas, quero mencionar uma diferença pequena, mas provavelmente importante. O comando chmod 755 fileé equivalente a chmod 0755 file. Se executarmos este comando em um arquivo que tenha o bit SETUID ou SETGID definido, ele removerá o bit SETUID / SETGID. chmod +x filedeixará o SETUID / SETGID-bit intocado. Podemos ver isso no seguinte exemplo:

~ $ teste de toque
~ $ teste chmod u + s
~ $ ll test
-rwSrw-r-- 1 mook mook 0 de set 14 00:49 teste
~ $ chmod + x teste
~ $ ll test
-rwsrwxr-x 1 mook mook 0 de setembro 14 00:49 teste
~ $ chmod 755 teste
~ $ ll test
-rwxr-xr-x 1 mook mook 0 de setembro 14 00:49 teste
mook765
fonte