Erro de retorno do Bash negado quando redirecionar a saída de ls para um arquivo [duplicado]

1

Atualmente estou estudando comandos shell, um dos exercícios consiste em criar uma estrutura com vários diretórios e subdiretórios.

Eu escrevi ls -laR > hello , ele deveria criar um arquivo de texto chamado hello . No entanto, recebo a seguinte mensagem bash: hello: permission denied , mesmo quando digito sudo no começo.

O comando funcionou em outra distribuição do Linux. Além disso, eu usei alguns minutos atrás ls -la no diretório onde eu quero criar o arquivo e me deu isso:

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

De acordo com a primeira tríade, tenho privilégios de escrita?

    
por sUnTECH789 26.11.2013 / 16:11

2 respostas

8

Como root é o proprietário do diretório em que você deseja criar o arquivo hello e os usuários do mesmo grupo e outros usuários não têm permissão para gravar nesse diretório, você receberá bash: hello: permission denied error ao executar ls -laR > hello .

Além disso, você obterá exatamente o mesmo erro quando executar o mesmo comando usando sudo na frente dele. Isso porque o redirecionamento de saída (o operador > ) é feito pelo shell , não por ls , portanto sudo não tem efeito sobre ele. sudo tem efeito apenas em ls -laR . Para evitar isso, você precisa fazer o login como root:

sudo -i

Então você pode usar o redirecionamento:

ls -laR > hello

Caso contrário, você pode executar o comando bash em um subshell com privilégios de root:

sudo bash -c "ls -laR > hello"

Por fim, outra opção, em vez de usar o redirecionamento por meio do operador > , você pode usar o comando tee :

ls -laR | sudo tee hello

Você não tem que usar, neste caso, o comando sudo for ls porque os usuários do mesmo grupo com root e todos os outros usuários têm permissão de leitura e execução nesse diretório.

    
por Radu Rădeanu 26.11.2013 / 17:25
2

Coloque o arquivo hello em um diretório gravável como:

ls -laR > /tmp/hello

ou, se você realmente deseja criar um arquivo em um diretório que não é seu, execute:

sudo sh -c "ls -laR > hello"
    
por jlliagre 26.11.2013 / 16:48