¿Cómo cambiar el permiso de enlace simbólico?

Tengo un problema: necesito cambiar el permiso del enlace simbólico de 777 a 755 y no tengo ni idea de cómo debo hacerlo. He intentado usar el command chmod pero no funciona. yo quiero

 lrwxrwxrwx 1 frosu 2016_cluj 5 Jul 4 13:53 test6 -> test0 

a

 lrwxr-xr-x 1 frosu 2016_cluj 5 Jul 4 13:53 test6 -> test0 

Algunos sistemas admiten cambiar el permiso de un enlace simbólico, otros no.

  • chmod – cambie modos de file o lists de control de acceso (OSX y FreeBSD , usando -h )

    -h Si el file es un enlace simbólico, cambie el modo del enlace en lugar del file al que apunta el enlace.

  • chmod – cambiar bits de modo de file (Linux)

    chmod nunca cambia los permissions de enlaces simbólicos; la llamada al sistema chmod no puede cambiar sus permissions. Esto no es un problema ya que los permissions de los enlaces simbólicos nunca se usan. Sin embargo, para cada enlace simbólico enumerado en la línea de command, chmod cambia los permissions del file apuntado. Por el contrario, chmod ignora los enlaces simbólicos que se encuentran durante los recorridos de directorys recursivos.

Dado que la característica es diferente, POSIX no menciona la posibilidad.

De los comentarios, alguien sugiere que un cambio reciente a coreutils de GNU proporciona la opción -h . Por el momento, eso no aparece en el código fuente de chmod :

   while ((c = getopt_long (argc, argv,
                            ("Rcfvr :: w :: x :: X :: s :: t :: u :: g :: o :: a ::, :: + :: = ::"
                             "0 :: 1 :: 2 :: 3 :: 4 :: 5 :: 6 :: 7 ::"),
                            long_options, NULL))

y long_options tiene esto:

 static struct option const long_options[] = { {"changes", no_argument, NULL, 'c'}, {"recursive", no_argument, NULL, 'R'}, {"no-preserve-root", no_argument, NULL, NO_PRESERVE_ROOT}, {"preserve-root", no_argument, NULL, PRESERVE_ROOT}, {"quiet", no_argument, NULL, 'f'}, {"reference", requinetworking_argument, NULL, REFERENCE_FILE_OPTION}, {"silent", no_argument, NULL, 'f'}, {"verbose", no_argument, NULL, 'v'}, {GETOPT_HELP_OPTION_DECL}, {GETOPT_VERSION_OPTION_DECL}, {NULL, 0, NULL, 0} }; 

Los permissions se establecen con chmod . La propiedad se establece con chown . GNU coreutils (como BSD) admite la capacidad de cambiar la propiedad de un enlace simbólico. Esta es una característica diferente, ya que la propiedad de un enlace simbólico se relaciona con si se puede modificar el contenido del enlace (y apuntarlo a un objective diferente). De nuevo, esto comenzó como una característica de BSD (OSX, FreeBSD , etc.), que también es compatible con Linux (y Solaris , etc.). POSIX dice de esta característica :

-h
Para cada operando de file que nombre un file de tipo enlace simbólico, chown intentará establecer la identificación de usuario del enlace simbólico. Si se especificó una ID de grupo, para cada operando de file que nombra un file de tipo enlace simbólico, chown intentará establecer la ID de grupo del enlace simbólico.

Tanto para las herramientas de command-line (y scripts de shell). Sin embargo, puede escribir su propia utilidad, utilizando una característica de POSIX que no se menciona en la discusión de la utilidad chmod :

int chmod(const char *path, mode_t mode);
int fchmodat(int fd, const char *path, mode_t mode, int flag);

La última function agrega un parámetro de indicador , que se describe así:

Los valores para el indicador se construyen mediante un OR de indicadores incluido en bits de la siguiente list, definida en <fcntl.h> :

AT_SYMLINK_NOFOLLOW
Si la ruta nombra un enlace simbólico, entonces se cambia el modo del enlace simbólico.

Es decir, el propósito de fchmodat es proporcionar la function que solicitó. Pero la utilidad chmod command-line está documentada (hasta ahora) solo en términos de chmod (sin esta característica).

fchmodat , por cierto, parece haber comenzado como una característica poco documentada de Solaris que fue adoptada por los desarrolladores de Red Hat y GNU hace diez años, y sugerida por ellos para la estandarización:

  • se requiere una function más de estilo abierto: fchmodat
  • Minutas del Grupo Austin de la Teleconferencia del 17 de mayo de 2007
  • [Fwd: The Austin Group anuncia que ahora está disponible el Borrador 2]

Según la Interfaz de Progtwigción de Linux , desde 2.6.16, Linux admite AT_SYMLINK_NOFOLLOW en estas llamadas: faccessat , fchownat , fstatat , utimensat y linkat se implementaron en 2.6.18 (ambas más bien "antiguas": 2006, según OSNews ).

Si la característica es útil para usted, o no, depende de los sistemas que esté utilizando.

El permiso para los enlaces simbólicos no se evalúa.

En otros times, no había forma de cambiar los bits de permiso para enlaces simbólicos.

Desde hace un time, POSIX introdujo fchmodat() y todas las plataforms que admiten esta llamada, pueden cambiar los bits de permiso para enlaces simbólicos.

Sin embargo, no esperes que esto tenga efectos sobre el enlace simbólico.