web-dev-qa-db-fra.com

Autorisation de retour Bash refusée lorsque je redirige la sortie de ls vers un fichier

J'étudie actuellement les commandes Shell. L'un des exercices consiste à créer une structure avec divers répertoires et sous-répertoires.

J'ai écrit ls -laR > hello, il était censé créer un fichier texte nommé helloname__. Cependant, je reçois le message suivant bash: hello: permission denied, même si je tape Sudo au début.

La commande a fonctionné dans une autre distribution Linux. De plus, j'ai utilisé il y a quelques minutes ls -la dans le répertoire où je veux créer le fichier et cela m'a donné ceci:

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

Selon le premier trio j'ai des privilèges d'écriture?

2
sUnTECH789

Étant donné que root est le propriétaire du répertoire dans lequel vous souhaitez créer le fichier hello et que les utilisateurs du même groupe et les autres utilisateurs ne sont pas autorisés à écrire dans ce répertoire, vous obtiendrez une erreur bash: hello: permission denied en exécutant ls -laR > hello.

De plus, vous obtiendrez exactement la même erreur lorsque vous exécuterez la même commande en utilisant Sudo devant celle-ci. Ceci parce que la redirection de sortie (l'opérateur >) est effectuée par le shell, et non par ls, de sorte que Sudo n'a aucun effet sur celui-ci. Sudo n'a d'effet que sur ls -laR. Pour éviter cela, vous devez vous connecter en tant que root:

Sudo -i

Ensuite, vous pouvez utiliser la redirection:

ls -laR > hello

Sinon, vous pouvez exécuter votre commande bash dans un sous-shell avec les privilèges root:

Sudo bash -c "ls -laR > hello"

Enfin, une autre option, au lieu d’utiliser la redirection via l’opérateur >, vous pouvez utiliser la commande tee:

ls -laR | Sudo tee hello

Dans ce cas, vous n'avez pas à utiliser Sudo pour la commande ls car les utilisateurs du même groupe avec root et tous les autres utilisateurs disposent des autorisations de lecture et d'exécution dans ce répertoire.

10
Radu Rădeanu

Soit, placez le fichier hello dans un répertoire accessible en écriture comme avec:

ls -laR > /tmp/hello

ou, si vous voulez vraiment créer un fichier dans un répertoire que vous ne possédez pas, lancez:

Sudo sh -c "ls -laR > hello"
2
jlliagre