¿Qué es una X mayúscula en posix / chmod?

11

Yo sé lo que es ugoa (propietario, grupo u otros, todos) o rwx (lectura / derecha / ejecución) o 4,2,1 o -, f, d, l, y traté de leer en man chmodentender lo que es un capitel Xen chmodpero no había Una entrada para ello. Luego leí en este artículo en posix / chmod pero me quedé atrapado en este pasaje:

Establezca el bit ejecutable solo si el destino a) es un directorio b) ya tiene al menos un bit ejecutable establecido para cualquiera de usuario, grupo u otros.

También leí en este artículo que da este ejemplo de código:

chmod -R u=rwX,g=rX,o=rX testdir/

Entiendo que hay un permiso recursivo sobre testdir/, en lo que respecta al propietario (u), el grupo (g) y otros (o), pero admito que todavía extraño la intención de la X mayúscula.

Tal vez una frase didáctica aquí podría arrojar algo de luz sobre esto (la razón principal por la que publico esto aquí es porque no encontré una sesión de SE sobre esto).

Actualizar

Lo siento todo, lo extrañé en el hombre. No imaginé que la X aparecería antes de la lista de argumentos y pensé que la búsqueda devuelve x en lugar de X, mi error.

Arcticooling
fuente

Respuestas:

20

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: chmodanaliza 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 chmodaplica la Xinstrucción específica , por lo que puede borrar los bits de ejecución en la misma ejecución con a-x,a=rwXsolo 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 statla salida de, o la primera columna de ls -l. Los bits de ejecución están representados por x. -rwxr-xr-xes 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=rwXestablece 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 chmoduna 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 Xpara +las operaciones).

Stephen Kitt
fuente
Así que lo vi y entendí mal el término "conjunto de bits". ¿Es un inodo con propietario: raíz y grupo: raíz y permisos ---, ---, ---un indoe sin un "conjunto de bits"?
Arcticooling
Sí, ---------significa que no hay bits establecidos. Puede encontrar esta pregunta útil.
Stephen Kitt el
Stephen, creo que agregar una definición de los términos "ejecutar conjunto de bits" (describiría como ...,...,...) 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.
Arcticooling
@Arcticooling, bueno, los permisos están codificados en bits y, por ejemplo, la página de manual de GNU chmoddice que "cambia los bits de modo de archivo de cada archivo", etc. En contexto, "ejecutar bit (s)" se refieren a los tres +xpermisos posibles (ugo) . En mi opinión, "sin bits establecidos" suena extraño, ya que no menciona ningún contexto.
ilkkachu
@Arcticooling He agregado un párrafo, aunque solo sea para aclarar su comprensión con suerte: "ejecutar conjunto de bits" ya ...,...,...que realmente no significa nada, ni "conjunto de bits de ejecución no válido" (¿qué tiene de inválido?).
Stephen Kitt el
5

De la man chmod:

Las letras rwxXst seleccionan bits de modo de archivo para los usuarios afectados: leer (r), escribir (w), ejecutar (o buscar directorios) (x), ejecutar / buscar solo si el archivo es un directorio o ya tiene permiso de ejecución para algunos usuario (X), establecer ID de usuario o grupo en ejecución (s), bandera de eliminación restringida o bit fijo (t).

(é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:

# chmod -R u=rwX,g=rX,o=rX testdir/`  

Usando la X mayúscula, el comando anterior establece el atributo ejecutable de acuerdo con las dos reglas siguientes:

  1. 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.

  2. 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 .

Isaac
fuente
1

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=rwXdice: 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 posterior a=rwXdice: Obtenga los bits de lectura y escritura en todas partes, y un bit de ejecución solo en los directorios.

usuario9303970
fuente