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

44

Quando se trata de tornar um arquivo executável, qual é a diferença entre chmod 755 e chmod +x e quando eu usaria qual? Até agora usei apenas chmod +x e acabei de ler algo e usei chmod 755 e não sabia se era melhor usar chmod 755 ou chmod +x .

    
por Darth4212 06.07.2017 / 21:48

7 respostas

112

Versão resumida:

Para poder compará-los, devemos analisá-los da mesma perspectiva, então:

  • chmod +x é igual a chmod ugo+x (com base no valor umask )
  • 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.

    • Assim, todo o "ler, escrever, executar, pegajoso, suid e guid" será ignorado e apenas os fornecidos serão definidos.
  3. ler = 4, escrever = 2, executar = 1

    • Aqui está a lógica binária por trás dele (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 +x , você está dizendo para adicionar ( + ) o bit executável ( x ) ao proprietário, grupo e outros.

  • é igual a ugo+x ou u+x,g+x,o+x
  • Quando você não especificar qual deles é o proprietário, grupo ou outros, no caso de x , todos serão considerados. E como @Rinzwind apontou, é baseado no valor umask , adiciona o bit aos que umask permite. lembre-se se você especificar o alvo como o+r , então umask não terá mais efeito algum.
  • Ele não toca nos outros mods (permissões).
  • Você também pode usar u+x para adicionar apenas um bit executável ao proprietário.

Usando 755 , você 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 os outros)

Então, chmod 755 é como: chmod u=rwx,g=rx,o=rx ou chmod u=rwx,go=rx .

    
por Ravexina 06.07.2017 / 22:05
35

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

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

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

    
por Pilot6 06.07.2017 / 21:51
7

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

Depois que chmod 755 for executado em um arquivo, suas permissões serão 755 ou rwxr-xr-x .

chmod +x apenas aceitará as permissões existentes e adicionará as permissões de execução ao arquivo.

    
por Baptiste Candellier 07.07.2017 / 11:19
6

Eu recomendo rever a página do manual chmod para detalhes completos. Você está vendo apenas dois modos de operação diferentes disponíveis com o comando chmod para realizar a mesma tarefa de alterar as 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 755 conjuntos rwxr-xr-x enquanto chmod +x ajusta as permissões para que o proprietário, o grupo e o mundo tenham permissões executáveis adicionadas. Supondo uma permissão de arquivo padrão de rwxr--r-- , ela seria ajustada para as mesmas permissões que 755 de rwxr-xr-x .

    
por TopHat 06.07.2017 / 21:57
5

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

Com chmod +x , você 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 o man chmod :

% bl0ck_qu0te%

Com chmod 755 , você está usando números octais, cuja representação binária é usada para definir bits específicos de permissões. Primeiro (à esquerda) 3 bits correspondem às permissões do proprietário, o meio 3 às permissões do grupo e o último (à direita) corresponde às permissões de todos os outros usuários. A ordem dos bits é sempre a mesma, read,write,execute ou rwx Assim, exatamente porque a ordem é a mesma, o número individual quando convertido para representação binária, irá definir os bits de permissão para os quais o bit posicional correspondente no número é 1 e desabilitar o que é 0. Especificamente:

  • Número octal 7 é 111 em binário, então você está definindo todos os bits de leitura, gravação e execução para o proprietário; rwx está definido.
  • O número octal 5 é 101 em binário, portanto, você está definindo a leitura e a execução, mas desabilita os bits de gravação e, como são 5 para o grupo e outros usuários, essas duas categorias terão as mesmas permissões. Assim, r-x está 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
    
por Sergiy Kolodyazhnyy 06.07.2017 / 21:57
3

Uma diferença importante é que chmod + está sujeito a restrições de umask e 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 para as permissões de uma maneira que seja adequada às configurações de umask, use a sintaxe "+". Mas se você quiser defini-lo absolutamente sem considerar a umask, use o < octal > formato, e perceber que você tem que especificar todos os bits e não apenas um delta.

    
por gowenfawr 07.07.2017 / 18:45
1

Além dessas belas respostas, 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 conjunto SETUID-bit ou SETGID-bit, ele removerá o SETUID / SETGID-bit. chmod +x file deixará o bit SETUID / SETGID intacto. Podemos ver isso no seguinte exemplo:

~$ touch test
~$ chmod u+s test
~$ ll test
-rwSrw-r-- 1 mook mook 0 Sep 14 00:49 test
~$ chmod +x test
~$ ll test
-rwsrwxr-x 1 mook mook 0 Sep 14 00:49 test
~$ chmod 755 test
~$ ll test
-rwxr-xr-x 1 mook mook 0 Sep 14 00:49 test
    
por mook765 13.09.2018 / 20:00