¿Cuál es la diferencia entre chmod u+x
y just chmod +x
? He visto un montón de tutoriales que dicen usar u+x
para hacer scripts ejecutables. Sin embargo, omitir el u
no parece tener ningún efecto.
¿Cuál es la diferencia entre chmod u+x
y just chmod +x
? He visto un montón de tutoriales que dicen usar u+x
para hacer scripts ejecutables. Sin embargo, omitir el u
no parece tener ningún efecto.
Respuestas:
La página del manual de chmod
cubre eso.
Eso significa que chmod u+x somefile
solo otorgará permisos al propietario de la ejecución de ese archivo, mientras que chmod +x somefile
es lo mismo que chmod a+x somefile
.
La página de manual de chmod dice:
El formato de un modo simbólico es
[ugoa...][[+-=][rwxXstugo...]...][,...]
. Se pueden dar múltiples operaciones simbólicas, separadas por comas.Una combinación de las letras 'ugoa' controla qué acceso de los usuarios al archivo cambiará: el usuario que lo posee (u), otros usuarios en el grupo del archivo (g), otros usuarios que no están en el grupo del archivo (o), o todos los usuarios (a). Si no se da ninguno de estos, el efecto es como si se diera 'a', pero los bits que se establecen en la máscara de usuario no se ven afectados.
chmod +x file
diferenciándose de chmod a+x file
: vea la respuesta de Ravexina para más detalles.
Simplemente +x
se aplicará a todos los indicadores: [u] ser, [g] roup, [o] thers.
Escriba man chmod
para más información.
En primer lugar, le sugiero que lea estas preguntas y las respuestas vinculadas a continuación:
Le ayuda a comprender todas las partes necesarias que necesita saber.
chmod +x
es igual a chmod ugo+x
(Basado en el umask
valor)chmod a+x
es igual a chmod ugo+x
(Sin considerar el umask
valor)El resultado de chmod a+x
es establecer el bit ejecutable para todos (Propietario, Grupo, Otros), fácil ¿verdad?
Sin embargo, chmod +x
como es un poco complicado, dice umask
valor de uso y, en función de ese valor, agregue el valor x
a todos los que están permitidos.
Entonces, si el umask
de mi entorno es 0002
:
$ umask
0002
$ umask -S
u=rwx,g=rwx,o=rx
Se agregará x
al usuario (propietario), grupo y otros, en esta situación (que es la situación predeterminada para la mayoría de los sistemas) es exactamente igual chmod ugo+x
o igual que chmod a+x
, o en una forma más detallada:
chmod u+x,g+x,o+x
¿Puedes detectar la conexión chmod u+x,g+x,o+x
y la salida de umask -S
?
Ahora cambiemos el umask
shell actual a 0003
:
$ umask 0003
$ umask
0003
$ umask -S
u=rwx,g=rwx,o=r
Como puede ver ahora, solo el propietario y el grupo obtendrán el bit ejecutable y no los demás. Significa chmod +x
que ahora es igual a chmod u+x,g+x
o chmod ug+x
.
¿Qué sucede si ejecuto chmod +w
un archivo después de configurarlo umask
en 0003
?
Igual que antes, solo afecta user
y group
del archivo porque 3 también elimina el permiso de escritura (2).
Tiene el mismo efecto cuando eliminas un bit 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
hará que el archivo sea ejecutable para su usuario (solo lo agregará para su usuario, aunque ya puede ser ejecutable por el propietario del grupo u "otro").
chmod +x
o chmod a+x
('todo más bit ejecutable') hace que el archivo sea ejecutable por todos.
Si hace esto a un directorio, en su lugar, se puede buscar el directorio. Es decir, puede enumerar el contenido de un directorio para el que tiene permiso + x.
chmod u+x file
significa agregar el bit ejecutable al propietario del archivo mientras se ignora el umask
(Su mod se establecerá, sin duda).
chmod +x file
significa agregar el bit ejecutable al propietario, el grupo y otros mientras considera el umask
(Primero verifique y umask
luego aplique los mods, podría tener diferentes efectos según el valor de umask).
creemos dos archivos:
$ 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
Ahora me puse la umask
de "111" para eliminar los bits de ejecución: 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 puede ver, el chmod
ignorado umask
y el archivo1 obtuvieron un bit ejecutable para su propietario, sin embargo, el segundo no hizo nada porque está considerando el valor de umask.