Por que isso está acontecendo?
$ sudo ls /var/lib/postgresql/9.4/pg_log/
postgresql-2015-03-23_134626.log postgresql-2015-03-25_000000.log postgresql-2015-03-25_095920.log
postgresql-2015-03-24_000000.log postgresql-2015-03-25_095626.log
$ sudo ls /var/lib/postgresql/9.4/pg_log/*
ls: cannot access /var/lib/postgresql/9.4/pg_log/*: No such file or directory
ls /path/to/dir/
mostra arquivos, mas ls /path/to/dir/*
diz que nenhum arquivo foi encontrado.
Por que é isso?
*
entre aspas duplas (sudo ls "/path/to/dir/*"
) atrasar a expansão para o tempo apropriado?Você está experimentando um aspecto do problema discutido
sudo
incapaz de escrever para/etc/profile
e Como anexar um arquivo comosudo
? , e a questão discutida em Quem lida com o*
emecho *
? Sua casca primária interpreta cada comando que você digita incluindo caracteres curinga (também conhecidos como globs ou padrões de nome de arquivo). Se você digitaro shell enumera os arquivos no diretório atual e passa-os ao comando; por exemplo.,
Bem, se você não tem permissão para ler
/var/lib/postgresql/9.4/pg_log
, então sua concha não tem permissão para enumerar/var/lib/postgresql/9.4/pg_log/*
. O fato de que, quando o comando corre , funciona comoroot
é muito pouco tarde demais - a expansão do nome do caminho (ou seja, interpretação de curinga) é feita até lá.Você pode consertar isso com um truque discutido nas duas primeiras perguntas que referi:
Isso executa um shell privilegiado. O shell privilegiado pode expandir o
*
.fonte