ld.so.cache não é um arquivo binário

5

Atualmente estou estudando para o exame Comptia Linux + e estou no capítulo Biblioteca compartilhada. Entre todos, ele diz que o arquivo /etc/ld.so.cache é um arquivo binário, mas no meu caso não é. É um arquivo regular, cujo conteúdo eu posso ver facilmente e que ele contém locais de bibliotecas.

ls -l /etc/ld.so.cache 
-rw-r--r--. 1 root root 154135 Feb 11 11:17 /etc/ld.so.cache

Eu vi em vários materiais que o arquivo de cache é um arquivo binário e estou curioso para saber por que essa incompatibilidade? O tipo de arquivo é dependente de distro? Estou usando o Fedora Workstation 27

    
por Ermir Bajraktari 11.02.2018 / 12:08

2 respostas

4

Você está misturando as definições de um arquivo binário e um arquivo executável (binário).

O livro está certo de mencionar /etc/ld.so.cache é um arquivo binário (um arquivo de dados).

Como você pode ver executando file /etc/ld.so.cache

$ file /etc/ld.so.cache 
/etc/ld.so.cache: data

De man ld.so :

When resolving shared object dependencies, the dynamic linker first inspects each dependency string to see if it contains a slash (this can occur if a shared object pathname containing slashes was specified at link time). If a slash is found, then the dependency string is interpreted as a (relative or absolute) pathname, and the shared object is loaded using that pathname.

If a shared object dependency does not contain a slash, then it is searched for in the following order:

.....

  • From the cache file /etc/ld.so.cache, which contains a compiled list of candidate shared objects previously found in the augmented library path. If, however, the binary was linked with the -z nodeflib linker option, shared objects in the default paths are skipped. Shared objects installed in hardware capability directories (see below) are preferred to other shared objects.

De man ldconfig

/etc/ld.so.cache

File containing an ordered list of libraries found in the directories specified in /etc/ld.so.conf, as well as those found in /lib and /usr/lib.

Além disso, /etc/ld.so.cache é regenerado ao executar ldconfig . Veja Relação entre ldconfig e ld.so.cache

Verificação dupla é de fato uma lista de arquivos de biblioteca:

$ strings /etc/ld.so.cache | head -5
ld.so-1.7.0
glibc-ld.so.cache1.1
libz.so.1
/lib/x86_64-linux-gnu/libz.so.1
libxtables.so.7

Ou novamente, usando ldconfig -p :

$ ldconfig -p | head -5
227 libs found in cache '/etc/ld.so.cache'
    libz.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libz.so.1
    libxtables.so.7 (libc6,x86-64) => /lib/libxtables.so.7
    libxml2.so.2 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libxml2.so.2
    libxml-security-c.so.17 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libxml-security-c.so.17
    
por 11.02.2018 / 12:26
1

É um arquivo binário porque contém estruturas de dados binários gravadas nele usando um programa chamado ldconfig . A estrutura (Provavelmente, uma Hashtable) é usada para pesquisar e localizar com eficiência o caminho de um objeto compartilhado. O motivo pelo qual você vê os caminhos quando abre o arquivo no modo de texto é porque parte das estruturas contém strings ou uma tabela de strings (Path names) e é tudo o que o editor de texto pode reconhecer como ASCII code strings (E, portanto , mostre na tela).

    
por 11.02.2018 / 13:10