El permiso de retorno de Bash ha denegado el error cuando redirecciono la salida de ls a un archivo

Actualmente estoy estudiando comandos de shell, uno de los ejercicios consiste en crear una estructura con varios directorios y subdirectorios.

Escribí ls -laR > hello , se suponía que debía crear un archivo de texto llamado hello . Sin embargo, recibo el siguiente mensaje bash: hello: permission denied , incluso cuando escribo sudo al principio.

El comando funcionó en otra distribución de Linux. Además, utilicé hace unos minutos ls -la en el directorio donde quiero crear el archivo y me dio esto:

 drwxr-xr-x 2 root root 4096 Nov 26 10:56 . drwxr-xr-x 5 root root 4096 Nov 26 10:56 .. 

Según la primera tríada tengo privilegios de escritura?

Debido a que root es el propietario del directorio en el que desea crear el archivo de hello y los usuarios del mismo grupo y otros usuarios no tienen permiso para escribir en ese directorio, obtendrá bash: hello: permission denied error de bash: hello: permission denied cuando ejecuta ls -laR > hello

Además, obtendrá exactamente el mismo error cuando ejecute el mismo comando usando sudo delante de él. Esto se debe a que la redirección de salida (el operador > ) la realiza el shell , no ls , por lo que sudo no tiene ningún efecto sobre él. sudo tiene efecto solo en ls -laR . Para evitar esto, tienes que iniciar sesión como root:

 sudo -i 

A continuación, puede utilizar la redirección:

 ls -laR > hello 

De lo contrario, puede ejecutar su comando bash en una subshell con privilegios de raíz:

 sudo bash -c "ls -laR > hello" 

Finalmente, otra opción, en lugar de usar la redirección a través del operador > , puede usar el comando tee :

 ls -laR | sudo tee hello 

No tiene que usar en este caso sudo para el comando ls porque los usuarios del mismo grupo con root y todos los demás usuarios tienen permiso de lectura y ejecución en ese directorio.

O bien, coloque el archivo de saludo en un directorio de escritura como con:

 ls -laR > /tmp/hello 

o, si realmente desea crear un archivo en un directorio que no posee, ejecute:

 sudo sh -c "ls -laR > hello"