¿Es posible representar el permiso simbólico +X con un valor octal? La página del manual chmod(1) dice:
ejecutar/buscar solo si el archivo es un directorio o ya tiene permiso de ejecución para algún usuario
lo que significa que chmod -R g+X
agregará el permiso de ejecución del grupo solo si ya hay un bit de ejecución establecido para el usuario, grupo u otro. Ciertamente puedes hacer esto de la manera más difícil con find:
find . -perm /ugo=x -exec chmod g+x {} \;
Sin embargo, no es obvio cómo se podría hacer lo mismo con un modo octal sin usarencontraropruebapara verificar los permisos del archivo primero. ¿Es esto posible o hay algunas áreas donde los permisos simbólicos y octales simplemente no se superponen?
Respuesta1
El cuento: no es posible, no.
La historia más larga: los permisos octales son estados. La [+-][rwxXst]
notación representa operations
que culminan en estados cambiantes. Tenga en cuenta, no el =[rwxXst]
queconjuntosestado y es equivalente a los modos octales como dijo Gilles. Una X
es la única operación condicional, las demás son todas incondicionales.
Cuando crea chmod
un archivo con permisos octales, proporciona el archivo finalestadode los bits de permiso palabra por palabra. Cuando utilizas las operaciones, eliges lo que quieres.hechoa los bits de permiso.
Su pregunta equivale a preguntar si hay un único número que represente todas las raíces cuadradas. La respuesta es obviamente "no": cada raíz cuadradarendimientosun número (pedantes: aunque podría ser imaginario/irracional), pero sin el punto inicialestado(el número), no se puede decir cuál.
Respuesta2
Los modos simbólicos son más expresivos que los modos octales, porque los modos octales sólo pueden expresar cambios absolutos. Los cambios relativos, lo que significa no solo +X
cualquier modo que no especifique todos los bits nuevos (como g+x
- o incluso a+rwx
, que no elimina ningún bit setuid/setgid), no se pueden expresar con modos octales.
Por el contrario, cualquier modo octal se puede expresar como un modo simbólico, en general usando =
, por ejemplo 4750
= u+rwxs,g=rx,o-rwxt
(o u=rwxs,g=rx,o=
muchas otras combinaciones).