La página del manual dice:
ejecutar / buscar solo si el archivo es un directorio o ya tiene permiso de ejecución para algún usuario ( X
)
POSIX dice:
El símbolo permanente X representará la parte de ejecución / búsqueda de los bits de modo de archivo si el archivo es un directorio o si los bits de modo de archivo actuales (no modificados) tienen al menos uno de los bits de ejecución (S_IXUSR, S_IXGRP o S_IXOTH) establecidos. Se ignorará si el archivo no es un directorio y ninguno de los bits de ejecución se establece en los bits del modo de archivo actual.
Este es un indicador de permiso condicional: chmod
analiza lo que está procesando actualmente, y si es un directorio, o si tiene algún bit de ejecución establecido en sus permisos actuales (propietario, grupo u otro), actúa como si el permiso solicitado fuera x
, de lo contrario lo ignora. La condición se verifica en el momento en que se chmod
aplica la X
instrucción específica , por lo que puede borrar los bits de ejecución en la misma ejecución con a-x,a=rwX
solo establecer el bit ejecutable en los directorios.
Puede ver si un archivo tiene un bit de ejecución establecido mirando la parte de "acceso" de stat
la salida de, o la primera columna de ls -l
. Los bits de ejecución están representados por x
. -rwxr-xr-x
es común para los ejecutables e indica que el bit ejecutable está configurado para el propietario, el grupo y otros usuarios; -rw-r--r--
es común para otros archivos e indica que el bit ejecutable no está configurado (pero el bit de lectura está configurado para todos y el bit de escritura para el propietario). Consulte Comprender los permisos de UNIX y sus atributos, que tiene muchos más detalles.
Por lo tanto, en su ejemplo, u=rwX
establece los permisos de propietario para leer y escribir en todos los casos, y para directorios y archivos ejecutables, ejecutar; del mismo modo para group ( g=rX
) y other ( o=rX
), leer y ejecutar para directorios y archivos ejecutables.
La intención de este operador es permitir al usuario otorgar chmod
una variedad de archivos y directorios, y obtener los permisos de ejecución correctos (suponiendo que ninguno de los archivos tenga un conjunto de bits de ejecución no válido). Evita tener que distinguir entre archivos y directorios (como en el tradicional find . -type f -exec chmod 644 {} +
y los find . -type d -exec chmod 755 {} +
comandos), e intenta manejar los ejecutables de una manera sensata.
(Tenga en cuenta que macOSchmod
aparentemente sólo es compatible X
para +
las operaciones).
---, ---, ---
un indoe sin un "conjunto de bits"?---------
significa que no hay bits establecidos. Puede encontrar esta pregunta útil....,...,...
) así como "conjunto de bits de ejecución no válido" (describiría como---,---,---
), al comienzo de la respuesta, podría ayudar a hacerlo aún más didáctico y disminuye la posibilidad de que alguien se haya perdido eso; Aquí es donde originalmente me enamoré de esto.chmod
dice que "cambia los bits de modo de archivo de cada archivo", etc. En contexto, "ejecutar bit (s)" se refieren a los tres+x
permisos posibles (ugo) . En mi opinión, "sin bits establecidos" suena extraño, ya que no menciona ningún contexto....,...,...
que realmente no significa nada, ni "conjunto de bits de ejecución no válido" (¿qué tiene de inválido?).De la
man chmod
:(énfasis mío).
Sin embargo, eso no lo aclara mucho. Este artículo tiene las dos reglas que aclaran lo que hace:
Por ejemplo, emitimos el siguiente comando chmod en un directorio:
Usando la X mayúscula, el comando anterior establece el atributo ejecutable de acuerdo con las dos reglas siguientes:
Si el archivo es un directorio, establece el atributo ejecutable para el propietario, el grupo y el mundo, lo que significa que pueden ingresar a este directorio.
Si el archivo es un archivo normal, agregará el atributo ejecutable a sus permisos, si el archivo ya tiene un conjunto de bits de ejecución. Si el archivo no tiene un bit de ejecución establecido, no se agregará ninguno.
Usando la x minúscula sería imposible lograr este resultado con un solo comando.
Esperanza de que clarificar el uso de X .
fuente
Por favor, no pulses esta respuesta. Es justo lo que entendí de la respuesta anterior de Stephen Kitt, que acepté como correcta.
1) Una X mayúscula como en
a=rwX
dice: Todos los directorios encontrados obtendrán x y todos los archivos regulares encontrados que tengan al menos 1 bit ejecutable en uno de los tres grupos de permisos, también obtendrán x en los tres grupos.2) El combo de
a-x
(que asegura que todos los archivos pierdan el bit de ejecución), y un mensaje posteriora=rwX
dice: Obtenga los bits de lectura y escritura en todas partes, y un bit de ejecución solo en los directorios.fuente