Isso não está documentado, até onde eu sei, mas um / líder faz com que dpkg trate o argumento como um caminho e não como um padrão. Em outras palavras, se você disser para procurar por algo que começa com / , ele pressupõe que ele deve procurar por um arquivo em um dos pacotes instalados com o caminho exato .
Você pode confirmar isso facilmente com
$ dpkg -S nonmatching
dpkg-query: no path found matching pattern *nonmatching*
$ dpkg -S /nonmatching
dpkg-query: no path found matching pattern /nonmatching
Observe que, no primeiro caso, sem / , o erro mostra que ele pesquisou *nomatching* , enquanto com / pesquisou o caminho exato /nonmatching . Por exemplo, ele também não consegue encontrar /doc apesar da existência de diretórios como /usr/share/doc :
$ dpkg -S /doc
dpkg-query: no path found matching pattern /doc
Embora não encontre nenhuma menção a isso na página do manual, confirmei confirmando a origem. As seguintes linhas são da função searchfiles definida em querycmd.c (dpkg 1.17.13)
if (!strchr("*[?/",*thisarg)) {
varbuf_reset(&vb);
varbuf_add_char(&vb, '*');
varbuf_add_str(&vb, thisarg);
varbuf_add_char(&vb, '*');
varbuf_end_str(&vb);
thisarg= vb.buf;
}
Isso adicionará * em torno do argumento transmitido, a menos que esse argumento comece com / . Então, isso faz com que dpkg-query trate qualquer coisa que comece com / como um caminho absoluto e qualquer coisa que não seja como um padrão a ser correspondido.