Qual é a diferença entre chmod u+x
e just chmod +x
? Eu já vi vários tutoriais que dizem usar u+x
para tornar scripts executáveis. No entanto, omitir o u
não parece ter nenhum efeito.
Qual é a diferença entre chmod u+x
e just chmod +x
? Eu já vi vários tutoriais que dizem usar u+x
para tornar scripts executáveis. No entanto, omitir o u
não parece ter nenhum efeito.
Respostas:
A página de manual chmod
cobre isso.
Isso significa que chmod u+x somefile
concederá apenas ao proprietário das permissões de execução desse arquivo, enquanto chmod +x somefile
é o mesmo que chmod a+x somefile
.
A página de manual do chmod diz:
O formato de um modo simbólico é
[ugoa...][[+-=][rwxXstugo...]...][,...]
. Podem ser dadas várias operações simbólicas, separadas por vírgulas.Uma combinação das letras 'ugoa' controla quais acessos de usuários ao arquivo serão alterados: o usuário que possui (u), outros usuários no grupo de arquivos (g), outros usuários que não pertencem ao grupo de arquivos (o), ou todos os usuários (a). Se nada disso for dado, o efeito é como se 'a' fosse dado, mas os bits definidos no umask não serão afetados.
chmod +x file
diferente de chmod a+x file
- consulte a resposta da Ravexina para obter detalhes.
Apenas fazer +x
aplicará a todas as bandeiras: [u] ser, [g] roup, [o] thers.
Digite man chmod
para mais informações.
Antes de tudo, sugiro que você leia estas perguntas e as respostas abaixo:
Ajuda a entender todas as partes necessárias que você precisa conhecer.
chmod +x
é igual a chmod ugo+x
(com base no umask
valor)chmod a+x
é igual a chmod ugo+x
(sem considerar o umask
valor)O resultado chmod a+x
é definir o bit executável para todos (Proprietário, Grupo, Outros), fácil, certo?
No entanto, com chmod +x
isso é um pouco complicado, ele diz que usa umask
valor e, com base nesse valor, adiciona a x
todos os que são permitidos.
Portanto, se o umask
meu ambiente é 0002
:
$ umask
0002
$ umask -S
u=rwx,g=rwx,o=rx
Ele será adicionado x
ao usuário (proprietário), grupo e outros. Nesta situação (que é a situação padrão para a maioria dos sistemas), é exatamente chmod ugo+x
igual ou igual a chmod a+x
, ou de uma forma mais detalhada:
chmod u+x,g+x,o+x
Você consegue identificar a conexão entre chmod u+x,g+x,o+x
e a saída de umask -S
?
Agora vamos mudar o umask
shell atual para 0003
:
$ umask 0003
$ umask
0003
$ umask -S
u=rwx,g=rwx,o=r
Como você pode ver agora, apenas o proprietário e o grupo receberão o bit executável e não os outros. Isso significa que chmod +x
agora é igual a chmod u+x,g+x
ou chmod ug+x
.
O que acontece se eu for executado chmod +w
em um arquivo após definir umask
como 0003
?
O mesmo que antes, afeta apenas user
e group
do arquivo porque 3 também remove a permissão de gravação (2).
Tem o mesmo efeito quando você está removendo um pouco como chmod -w
:
$ mkdir test
$ stat -c %A test
drwxrwxr-x
$ umask
0002
$ chmod +w test
$ stat -c %A test
drwxrwxr-x
$ chmod a+w test
$ stat -c %A test
drwxrwxrwx
$ chmod -w test
chmod: test/: new permissions are r-xr-xrwx, not r-xr-xr-x
$ stat -c %A test
dr-xr-xrwx
chmod u+x
tornará o arquivo executável para o seu usuário (ele será adicionado apenas ao seu usuário, embora já possa ser executável pelo proprietário do grupo ou "outro").
chmod +x
ou chmod a+x
('all plus executable bit') torna o arquivo executável por todos.
Se você fizer isso em um diretório, ele tornará o diretório pesquisável. Ou seja, você pode listar o conteúdo de um diretório no qual você tem permissão + x.
chmod u+x file
significa adicionar o bit executável ao proprietário do arquivo enquanto ignora o umask
(seu mod será configurado, sem dúvida).
chmod +x file
significa adicionar o bit executável ao proprietário, grupo e outros enquanto considera o umask
(Primeiro verifique com, em umask
seguida, aplique os mods, ele pode ter efeitos diferentes com base no valor do umask).
vamos criar dois arquivos:
$ touch file1 file2
$ ls -l file1 file2
-rw-rw-rw- 1 ravexina ravexina 0 Aug 5 01:45 file1
-rw-rw-rw- 1 ravexina ravexina 0 Aug 5 01:45 file2
Agora eu definir o umask
que "111" para remover bits executáveis: umask 111
.
$ chmod u+x file1
$ chmod +x file2
$ ls -l file1 file2
-rwxrw-rw- 1 ravexina ravexina 0 Aug 5 01:47 file1
-rw-rw-rw- 1 ravexina ravexina 0 Aug 5 01:47 file2
Como você pode ver, o bit chmod
ignorado umask
e o file1 foram executáveis para o proprietário, mas o segundo não fez nada porque está considerando o valor do umask.