Procurando serviço resolvido pelo sistema após a recente divulgação de vulnerabilidades, vi um comportamento muito estranho do comando find.
root@localhost:/# find . -name "*systemd-resolved*"
./usr/share/man/man8/systemd-resolved.service.8.gz
./usr/share/man/man8/systemd-resolved.8.gz
O comando retorna 0 ou duas linhas como saída para a primeira execução. Mas se eu executar o comando na segunda vez, recebo:
root@localhost:/# find . -name "*systemd-resolved*"
./usr/share/man/man8/systemd-resolved.service.8.gz
./usr/share/man/man8/systemd-resolved.8.gz
./lib/systemd/systemd-resolved
./lib/systemd/system/systemd-resolved.service.d
./lib/systemd/system/systemd-resolved.service
Isso significa que, pela primeira vez, "localizar" na verdade não encontra tudo. Além disso, isso acontece apenas uma vez. A execução do comando na próxima vez mostra a saída correta. Eu verifiquei isso em alguns outros sistemas com o Debian 8 (jessie) instalado. Nas pessoas com o Kernel 4.9+, esse problema exato sempre ocorre, mas nos sistemas com o kernel 3.16 isso não ocorre.
Após a reinicialização do sistema, tudo isso acontece novamente. Mas o comportamento é o mesmo para cada sistema individual. Isso significa que, se o teste em um sistema específico retornar (incorretamente) duas linhas de saída para a primeira execução e a saída correta para a segunda execução, a primeira execução do comando após a reinicialização do sistema imprimirá novamente duas linhas. Portanto, os sistemas mostram o mesmo comportamento após cada reinicialização (de acordo com meus testes). Os detalhes dos arquivos são os seguintes:
-rw-r--r-- 1 root root ./usr/share/man/man8/systemd-resolved.service.8.gz
lrwxrwxrwx 1 root root ./usr/share/man/man8/systemd-resolved.8.gz -> systemd-resolved.service.8.gz
-rwxr-xr-x 1 root root ./lib/systemd/systemd-resolved
drwxr-xr-x 2 root root ./lib/systemd/system/systemd-resolved.service.d
-rw-r--r-- 1 root root ./lib/systemd/system/systemd-resolved.service
EDIT: Para todos aqueles que sugerem o problema, talvez relacionados a este caso específico para esses arquivos específicos: " resolvido pelo sistema " é apenas um exemplo. Isso acontece ao pesquisar outras palavras-chave também. Este é outro exemplo que fornece resultados incorretos para a primeira execução:
root@localhost:/# find . -name "*apache*"
Ninguém aqui é capaz de verificar esse problema em um Debian 8 com o kernel mais recente do repositório de backport?
strace
? Em qual SO você observou o comportamento defeituoso? O que você quer dizer com "retorna 0 ou dois resultados como acima"? Zero ou duas linhas de saída ou código de saída 0 + duas linhas? Isso acontece novamente depois de iniciar um novo shell ou reiniciar? Pode ser relevante que a primeira chamada retorne apenas arquivos, enquanto a segunda retorna arquivos e diretórios./lib/systemd
montado? Que tipo de sistema de arquivos é esse? Se for um ponto de montagem separado, a que horas foi montado?Respostas:
A versão padrão do findutils que está instalada no Debian 8 é 4.4.2 e esta é a versão mais recente nos repositórios jessie. Eu baixo a versão mais recente (4.6.0) do código fonte findutils e construí os binários a partir da fonte. Então eu fiz os mesmos testes e o comando "find" mostrou a saída correta para a primeira execução.
Então baixei o código fonte do findutils versão 4.4.2 do arquivo gnu e o compilei. O mesmo problema aconteceu para o comando find compilado. Portanto, este problema não está acontecendo com o findutils 4.6.0.
Mas ainda não sei por que alguns usuários não obtêm os mesmos resultados usando o findutils 4.4.2 (a versão padrão do utilitário instalado no Debian) e não sei por que o Debian ainda deve ser lançado com esta versão antiga do findutils e possivelmente outros utilitários Linux e causam essa situação problemática. E a última coisa é que a razão técnica exata do que aconteceu estranhamente ainda é desconhecida, o que não é desejável. Porque não tenho certeza se há algo preocupante no meu ambiente de sistema operacional.
fonte