Suponiendo que el uso de chmodDel paquete GNU coreutils en Ubuntu 12.10.
chmod 775 . -Rejecuta la fchmodatllamada del sistema para cada archivo que encuentra, independientemente de si los permisos deben cambiarse o no. Confirmé esto inspeccionando el código y usando strace chmod 775 . -R(fragmento a continuación) para enumerar el comportamiento real.
newfstatat(4, "d", {st_mode=S_IFREG|0666, st_size=0, ...}, AT_SYMLINK_NOFOLLOW) = 0
fchmodat(4, "d", 0775) = 0
newfstatat(4, "c", {st_mode=S_IFREG|0666, st_size=0, ...}, AT_SYMLINK_NOFOLLOW) = 0
fchmodat(4, "c", 0775) = 0
newfstatat(4, "a", {st_mode=S_IFREG|0666, st_size=0, ...}, AT_SYMLINK_NOFOLLOW) = 0
fchmodat(4, "a", 0775) = 0
newfstatat(4, "b", {st_mode=S_IFREG|0666, st_size=0, ...}, AT_SYMLINK_NOFOLLOW) = 0
fchmodat(4, "b", 0775) = 0
Hay un par de desventajas de ejecutar fchmodaten cada archivo
- La llamada adicional al sistema probablemente se volverá significativa si se cambia una gran cantidad de archivos. El método
find/ xargs/ chmodmencionado por otros probablemente será más rápido al cambiar solo los archivos que deben cambiarse.
- La llamada a
fchmodatcambia la modificación del estado del archivo (ctime) de cada archivo. Esto hará que cada archivo / inodo cambie cada vez y probablemente causará un exceso de escritura en el disco. Es posible utilizar las opciones de montaje para detener estas escrituras en exceso.
Un experimento simple muestra los cambios de ctime que ocurren para chmod
auser@duncow:/tmp/blah.test$ ls -lc
total 0
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:17 a
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:17 b
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:17 c
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:17 d
auser@duncow:/tmp/blah.test$ chmod 775 . -R
auser@duncow:/tmp/blah.test$ ls -lc
total 0
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 a
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 b
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 c
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 d
Pero esto no cambia durante find/ xargs/ chmodunos minutos más tarde
auser@duncow:/tmp/blah.test$ date
Tue Jun 18 18:27:27 BST 2013
auser@duncow:/tmp/blah.test$ find . ! -perm 775 -print0 | xargs -0 -I {} chmod 775 {}
auser@duncow:/tmp/blah.test$ ls -lc
total 0
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 a
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 b
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 c
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 d
Siempre tendería a usar la versión find/ xargs/ chmodporque find brinda más control sobre la selección de cosas.