Errore di risposta Bash negato quando reindirizzo l’output di ls in un file

Attualmente sto studiando i comandi della shell, uno degli esercizi consiste nel creare una struttura con varie directory e sottodirectory.

Ho scritto ls -laR > hello , doveva creare un file di testo di nome hello . Tuttavia, ottengo il seguente messaggio bash: hello: permission denied , anche quando digito sudo all’inizio.

Il comando ha funzionato in un’altra distribuzione Linux. Inoltre, ho usato pochi minuti fa ls -la nella directory in cui voglio creare il file e mi ha dato questo:

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

Secondo la prima triade ho dei privilegi di scrittura?

Poiché root è il proprietario della directory in cui si desidera creare file hello e utenti dello stesso gruppo e altri utenti non hanno il permesso di scrivere in quella directory, si otterrà bash: hello: permission denied errore di bash: hello: permission denied quando si esegue ls -laR > hello .

Inoltre, si otterrà esattamente lo stesso errore quando si esegue lo stesso comando usando sudo di fronte ad esso. Questo perché il reindirizzamento dell’output (l’operatore > ) è fatto dalla shell , non da ls , quindi sudo non ha alcun effetto su di esso. sudo ha effetto solo su ls -laR . Per evitare ciò, devi accedere come root:

 sudo -i 

Quindi puoi usare il reindirizzamento:

 ls -laR > hello 

Altrimenti, è ansible eseguire il comando bash in una subshell con i privilegi di root:

 sudo bash -c "ls -laR > hello" 

Infine, un’altra opzione, invece di utilizzare il reindirizzamento tramite l’operatore > , è ansible utilizzare il comando tee :

 ls -laR | sudo tee hello 

In questo caso non è necessario utilizzare sudo per il comando ls perché gli utenti dello stesso gruppo con root e tutti gli altri utenti dispongono dell’authorization di lettura e esecuzione in tale directory.

O metti il ​​file Hello in una directory scrivibile come con:

 ls -laR > /tmp/hello 

oppure, se vuoi davvero creare un file in una directory che non possiedi, esegui:

 sudo sh -c "ls -laR > hello"