Lo sé cuando ejecuto el comando
chmod +x filename
bash hará que mi archivo sea ejecutable. ¿Qué sucede exactamente con la arquitectura del archivo para cambiarlo a ejecutable? es decir, ¿cómo sabe el núcleo que este archivo es ejecutable?
Sólo intento ejercitar mis músculos de nerd.
Respuesta1
La "arquitectura" del archivono cambia– Depende de usted asegurarse de que tenga el formato correcto. Es decir, el archivoyadebe ser un binario ELF válido, o un script con un #!
encabezado válido, o algo más que su núcleo particular reconozca (como a.out o MZ/PE).
Lo chmod
que hace es simplemente establecer un bit en los permisos del archivo diciéndole al kernel que el usuario estápermitidopara ejecutar este archivo. Puede actuar como una pequeña barrera de seguridad, además de prevenir cierto tipo de accidentes. (Tenga en cuenta que +x
aquí hay una abreviatura de ugo+x
; es un bit de permiso como lectura/escritura).
Si configura +x en un archivo que el kernel no reconoce, simplemente devolverá un código de error de la exec
llamada al sistema. (Tenga en cuenta que algunos shells tienen un manejo especial para esto; si el kernel informó "formato no reconocido", el shell intentará interpretar el archivo como un script.internamente, ya que así es como funcionaban los shellscripts #!
antesinventado.)
Respuesta2
El contenido del archivo no cambia en absoluto. Los sistemas de archivos diseñados para Unix típico admitirán el almacenamiento de información sobre cada archivo. Esto a menudo se denomina "metadatos" del archivo.
Es por eso que no obtendrá resultados similares con algunos sistemas de archivos. Es decir, FAT no tiene un espacio integrado diseñado para almacenar datos relacionados con los permisos de Unix, y Unix normalmente lo soluciona utilizando un parámetro especial al montar dicho volumen de sistema de archivos. Por lo tanto, normalmente todos los archivos en una unidad FAT tienen los mismos permisos, según lo especificado durante el montaje. (Esperaría un comportamiento similar para otros sistemas de archivos, como ISO9660, aunque probablemente generalmente no se pueda escribir). En volúmenes montados de esta manera, el uso chmod +x
no terminará cambiando nada.
En resumen, la forma en que el kernel lo sabe es comprobando el controlador del sistema de archivos. Para los sistemas de archivos típicos diseñados para Unix, ese controlador admite la lectura de las ubicaciones donde se almacenan los permisos de estilo Unix.
chmod simplemente cambia esos puntos en el disco.