recursivos - dar permisos a un usuario en linux
Chmod recursivamente (5)
Agregar permisos ejecutables, recursivamente , a todos los archivos (no carpetas) dentro de la carpeta actual con extensión sh
:
find . -name ''*.sh'' -type f | xargs chmod +x
* Observe el tubo ( |
)
Tengo un archivo, que es archivado por otra persona, y deseo automáticamente, después de descargarlo, cambiar una rama del sistema de archivos dentro de los archivos extraídos para obtener acceso de lectura. (No puedo cambiar cómo se crea el archivo).
He analizado este hilo: chmod: cómo agregar recursivamente permisos de ejecución solo a archivos que ya tienen permiso de ejecución como en otros, pero no es un placer.
Los directorios vienen originalmente con varias banderas pero todas erróneas, pueden aparecer como:
drwx------
d---r-x---
drwxrwxr-x
dr--r-xr--
Esos son solo los pocos que he descubierto hasta ahora, pero podrían ser más.
find
errores cuando intenta buscar en un directorio sin permiso x
, por lo que no se lo pasa a chmod
. Lo que he estado haciendo hasta ahora, es cambiar manualmente los permisos en el directorio principal, luego ir a los directorios secundarios y hacer lo mismo para ellos y así sucesivamente. Pero esto es mucho trabajo manual. ¿No hay alguna manera de hacer esto automáticamente?
Es decir como lo estoy haciendo ahora:
hacer:
$ chmod -R +x
$ chmod -R +r
Hasta que no obtenga errores, entonces
$ find -type f -exec chmod -x {} +
Pero debe haber una mejor manera.
Intenta cambiar todas las obligaciones al mismo tiempo:
chmod -R +xr
Necesita acceso de lectura, además de acceso de ejecución, para listar un directorio. Si solo tiene acceso de ejecución, puede encontrar los nombres de las entradas en el directorio, pero no otra información (ni siquiera los tipos, por lo que no sabe cuál de las entradas son subdirectorios). Esto funciona para mí:
find . -type d -exec chmod +rx {} /;
Para hacer que todo sea escribible por el propietario, lea / ejecute por el grupo y ejecutable mundialmente:
chmod -R 0755
Para hacer todo abierto:
chmod -R 0777
Puede usar chmod con la letra del modo X
(la X mayúscula) para establecer el indicador ejecutable solo para los directorios.
En el siguiente ejemplo, el indicador ejecutable se borra y luego se establece para todos los directorios de forma recursiva:
~$ mkdir foo
~$ mkdir foo/bar
~$ mkdir foo/baz
~$ touch foo/x
~$ touch foo/y
~$ chmod -R go-X foo
~$ ls -l foo
total 8
drwxrw-r-- 2 wq wq 4096 Nov 14 15:31 bar
drwxrw-r-- 2 wq wq 4096 Nov 14 15:31 baz
-rw-rw-r-- 1 wq wq 0 Nov 14 15:31 x
-rw-rw-r-- 1 wq wq 0 Nov 14 15:31 y
~$ chmod -R go+X foo
~$ ls -l foo
total 8
drwxrwxr-x 2 wq wq 4096 Nov 14 15:31 bar
drwxrwxr-x 2 wq wq 4096 Nov 14 15:31 baz
-rw-rw-r-- 1 wq wq 0 Nov 14 15:31 x
-rw-rw-r-- 1 wq wq 0 Nov 14 15:31 y
Un poco de explicación:
-
chmod -x foo
- borra la marca eXecutable parafoo
-
chmod +x foo
- establece el indicador eXecutable parafoo
-
chmod go+x foo
- igual que arriba, pero establece la bandera solo para los usuarios de Grupo y Otros , no toque el permiso de Usuario (propietario) -
chmod go+X foo
- igual que arriba, pero aplica solo a directorios, no toques archivos -
chmod -R go+X foo
- igual que el anterior, pero hazlo recursivamente para todos los subdirectorios defoo