Por que a expansão de nome de arquivo não funciona neste exemplo? [duplicado]

2

Eu removi alguns arquivos usando trash-cli :

$ pwd
/tmp/test
$ sudo trash mfile 
$

Depois, procuro onde o arquivo excluído está armazenado:

$ sudo ls /.Trash/0/ -la
total 16
drwx------ 4 root root 4096 May 19 16:52 .
drwx------ 3 root root 4096 May 19 16:52 ..
drwx------ 2 root root 4096 May 19 16:52 files
drwx------ 2 root root 4096 May 19 16:52 info

$ sudo ls /.Trash/0/* -la
ls: cannot access '/.Trash/0/*': No such file or directory

$ sudo ls /.Trash/0/files/ -la
total 12
drwx------ 2 root root 4096 May 19 16:52 .
drwx------ 4 root root 4096 May 19 16:52 ..
-rw-rw-r-- 1 t    t       6 May 19 16:48 mfile

Por que a expansão de nome de arquivo não funciona no segundo comando?

Obrigado.

    
por Tim 20.05.2018 / 00:10

1 resposta

6

O primeiro ls mostra que /.Trash/0/ é legível somente por raiz (a primeira linha, a que corresponde a . ). Como você está usando sudo , provavelmente você não é root, então seu shell não pode listar o conteúdo do diretório e não pode expandir o * . ls /.Trash/0/ sem o sudo provavelmente daria Permission denied .

Isso é semelhante a como sudo echo foo > /some/path/filename não funciona, se /some/path for gravável apenas pelo root: o shell processa as expansões e os redirecionamentos antes de executar sudo . Você precisaria de sudo bash -c 'ls /.Trash/0/*' ou de ter a linha de comando processada em sudo .

    
por 20.05.2018 / 00:21